当前位置: 首页 > article >正文

关于网络中的超参数小记

超参数(Hyperparameters)详解

1. 什么是超参数?

超参数(Hyperparameters)是 在模型训练前设定的参数,不会在训练过程中通过数据学习得到,而是由研究者或工程师手动设定或通过自动搜索确定的参数。(“Hyper-” 的意思是“过度的、过分的、太高”。这个词通常用来描述超出正常水平的事情,或者高于正常水平或过度活跃的状态。不会讲英语的计算机博主不是一个好健身私教)

与之相对,模型参数(Model Parameters)训练过程中学习得到的参数,例如神经网络的权重和偏置。


2. 为什么超参数很重要?

超参数的选择直接影响:

  • 模型的收敛速度(学习率过高可能不收敛,过低收敛慢)。
  • 模型的性能(合适的超参数可提高泛化能力)。
  • 计算资源消耗(超参数设置不当可能导致计算成本过高)。

如果超参数设置不当,可能会导致 欠拟合(Underfitting)过拟合(Overfitting),从而影响模型的最终效果。


3. 超参数的主要类型

超参数可以分为以下几类:

3.1 优化相关超参数

(1) 学习率(Learning Rate, α \alpha α

学习率控制模型参数更新的步长,定义如下:

W ( t + 1 ) = W ( t ) − α ∇ L ( W ) W^{(t+1)} = W^{(t)} - \alpha \nabla L(W) W(t+1)=W(t)αL(W)

其中:

  • W ( t ) W^{(t)} W(t) 是第 t t t 轮的参数,
  • ∇ L ( W ) \nabla L(W) L(W) 是损失函数的梯度。

设置方式

  • 过大:导致梯度震荡甚至发散,找不到或者无法在可接受的误差范围内逼近最优。
  • 过小:收敛缓慢,训练时间过长。
  • 解决方案:使用 学习率衰减(Learning Rate Decay)自适应优化算法(如 Adam、RMSprop)
(2) 批大小(Batch Size)

批大小决定每次更新参数时使用的样本数。

设置方式

  • 小 Batch(32-256):训练稳定但计算开销大。

  • 大 Batch(512+):训练快但可能影响泛化能力,为啥会酱紫呢?

    • 大的Batch Size会影响模型泛化能力的原因主要有以下几点:

      1. 优化路径不同 - 小批量梯度下降的随机性往往能帮助模型跳出局部最小值,寻找到更好的全局最优解。大Batch Size减少了这种随机性,容易使模型陷入局部最优。
      2. 锐利的最小值问题 - 研究表明大Batch Size倾向于使模型收敛到较"锐利"的最小值(sharp minima),而小Batch Size更可能收敛到"平坦"的最小值(flat minima)。平坦最小值对输入变化不敏感,通常泛化性能更好。
      3. 训练-测试差距 - 大Batch Size可能导致训练准确率和测试准确率之间的差距增大,出现过拟合现象。
      4. 探索空间减少 - 小Batch Size会在参数空间中进行更多样化的探索,增加模型发现更优解的机会。
      5. 噪声影响 - 适当的梯度噪声有时对泛化能力有益,而大Batch Size降低了梯度估计中的噪声水平。

      不过,这个影响并非绝对的,许多研究人员也在探索如何在使用大Batch Size时保持良好的泛化性能,例如调整学习率策略或引入特定的正则化方法。

      如果不好理解,那就酱紫想:

      想象你在爬山寻宝,有两种策略:

      1. 大Batch Size就像带着大地图一次性规划路线:
        • 你看到很多地形信息,走得很坚定
        • 但容易按照固定路线直奔一个看起来有宝藏的地方
        • 问题是:这个地方可能只是个"假宝藏点",真正的大宝藏在别处
      2. 小Batch Size就像边走边看,小步前进:
        • 你每次只看一小片区域,走得摇摇晃晃
        • 有时会被风吹歪、被石头绊倒,看似走了弯路
        • 但这些"意外"反而让你发现了隐藏的小路,最终找到了真正的宝藏

      在学习的过程中:

      • 过于精确的方向(大Batch Size)可能让模型死记硬背训练数据的特点
      • 带些随机性的探索(小Batch Size)反而帮助模型学到更本质的规律

      打个比方,大Batch Size像是死记硬背考点,可能考试得高分;小Batch Size像是真正理解知识,虽然学习过程不那么完美,但面对新问题时能灵活应用。(煮啵好像讲多了,但是煮啵真的只是想把这个问题解释清楚啊。委屈.gif)

(3) 优化器(Optimizer)

常见优化器:

  • SGD(随机梯度下降):基础优化方法。
  • Momentum:添加动量减少震荡。
  • Adam:结合动量和自适应学习率,适用于大多数场景。

选择建议

  • 如果数据较少,首选 Adam
  • 如果数据较多且训练稳定,SGD + Momentum 可能效果更好。

3.2 模型结构相关超参数

(4) 网络深度(Number of Layers)

神经网络的层数决定了模型的表达能力。

  • 层数过少:可能无法拟合复杂数据(欠拟合)。
  • 层数过多:可能导致梯度消失或梯度爆炸。
(5) 神经元数量(Number of Neurons)

每层神经元的数量影响计算复杂度和模型的表达能力。

  • 较少神经元:可能难以学习复杂特征。
  • 过多神经元:可能导致过拟合。

一般经验

  • 对于 MLP(多层感知机):逐层减少神经元数量(如 512→256→128)。
  • 对于 CNN:使用较宽的卷积层(如 64、128、256 通道)。

3.3 正则化相关超参数

(6) 权重衰减(L1/L2 正则化)

L1 和 L2 正则化用于防止模型过拟合。

  • L1 正则化(Lasso): 促使权重变稀疏。
  • L2 正则化(Ridge): 使权重较小但不会完全为零。

正则化项定义如下:

L ( W ) = L 0 ( W ) + λ ∣ ∣ W ∣ ∣ L(W) = L_0(W) + \lambda ||W|| L(W)=L0(W)+λ∣∣W∣∣

其中 λ \lambda λ 控制正则化强度。

设置方式

  • 过大:模型可能欠拟合。
  • 过小:可能无法有效抑制过拟合。
(7) Dropout

Dropout 在训练过程中随机丢弃一定比例的神经元,防止过拟合。

设置方式

  • CNN 通常使用 0.3~0.5
  • MLP 使用 0.5 较为常见。

4. 超参数调优方法

4.1 网格搜索(Grid Search)

遍历所有可能的超参数组合,适用于小规模超参数搜索。

优点:全面搜索所有可能性。
🚫 缺点:计算成本高。

4.2 随机搜索(Random Search)

从设定的超参数范围中随机采样进行训练。

优点:效率较高,适用于高维超参数。
🚫 缺点:可能无法找到全局最优解。

4.3 贝叶斯优化(Bayesian Optimization)

使用概率模型(如高斯过程)预测最优超参数。

优点:比随机搜索更高效。
🚫 缺点:实现较复杂。

4.4 超参数自动调优工具

  • Optuna(支持贝叶斯优化)
  • Hyperopt(支持 TPE 方法)
  • Ray Tune(支持并行搜索)

5. PyTorch 代码示例

超参数调整示例

import torch
import torch.nn as nn
import torch.optim as optim

# 超参数定义
learning_rate = 0.01  # 学习率
batch_size = 64       # 批大小
epochs = 10           # 训练轮数

# 定义简单 MLP 模型
class SimpleNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x

# 初始化模型和优化器
model = SimpleNN(input_size=100, hidden_size=50, output_size=10)
optimizer = optim.Adam(model.parameters(), lr=learning_rate)

6. 总结

超参数是训练前设定的参数,对模型性能影响重大。
常见超参数包括学习率、批大小、网络结构等。
超参数调优方法包括网格搜索、随机搜索、贝叶斯优化等。
合理选择超参数能提高模型的泛化能力和训练效率。


http://www.kler.cn/a/596934.html

相关文章:

  • RTOS系列文章(17)-- 为什么RTOS选择PendSV实现任务切换?(从硬件机制到RTOS设计的终极答案)
  • NocoBase 本周更新汇总:优化表格区块的列和操作
  • Vue 中的日期格式化实践:从原生 Date 到可视化展示!!!
  • 青少年编程与数学 02-011 MySQL数据库应用 10课题、记录的操作
  • 【微服务架构】SpringCloud(二):Eureka原理、服务注册、Euraka单独使用
  • 蓝桥杯备考:二分答案之路标设置
  • 掌握新编程语言的秘诀:利用 AI 快速上手 Python、Go、Java 和 Rust
  • AI大白话(六):强化学习——AI如何通过“试错“成为大师?
  • 隋卞做 隋卞一探 视频下载
  • 配置DHCP(centos+OUS)
  • QHDBO基于量子计算和多策略融合的蜣螂优化算法
  • Fiddler抓包工具最快入门
  • 人工智能之数学基础:矩阵条件数在线性方程组求解中的应用
  • 律师解读《无人驾驶航空器飞行管理暂行条例》第二十二条
  • illustrate:一款蛋白/核酸结构快速渲染为“卡通风格”的小工具
  • Vue学习笔记集--路由
  • vmware下linux无法上网解决方法
  • 防重复请求方法总结 wx.request-微信小程序
  • SmolVLM2: 让视频理解能力触手可及
  • Flink介绍与安装