优化神经网络常用技巧

338 阅读3分钟

1. 神经网络更新参数方法

1.1 随机梯度下降法(Stochastic gradient descent)SGD

微信图片_20220530200404.jpg

前提:神经网络存在合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程称为“学习

Step 1 : mini-batch

从训练数据中随机选出一部分数据(mini-batch),目标是减小mini-batch的损失函数的值

Step 2 : 计算梯度

求出各个权重参数的梯度——损失函数的值减小最多的方向

Step 3 : 更新参数

将权重参数沿梯度方向进行微小更新

Step 4 : 重复123

缺点:如果函数形状非均向(呈延伸状),搜索的路径非常低效,根本原因是SGD梯度的方向并没有指向最小值方向。(呈“之”字形朝最小值移动,效率低)

1.2 Momentum

微信图片_20220530200414.jpg

与SGD相比,更快地靠近最小值,减弱“之”字形的变动程度。

1.3 AdaGrad

为参数的每个元素适当地调整学习率,与此同时进行学习。

微信图片_20220530200418.jpg

按参数的元素进行学习率衰减,使变动大的参数学习率逐渐减小,“之”字形变动程度有所衰减。

AdaGrad会记录过去所有梯度的平方和,因此学习越深入,更新幅度越小,若无止境的学习,更新量就会变成零。

RMSProp方法:不是将过去所有梯度一视同仁地相加,而是逐渐地忘记过去的梯度,在做加法运算时将新的梯度信息更多地反映出来。

1.4 Adam

Momentum——参照小球在碗中滚动的物理规则进行移动

AdaGrad——参数的每个元素适当地调整更新步伐

将两者融合——3个超参数:学习率、Momentum系数β1、Momentum系数β2

总结:以上四种方法,各有各的特点,目前并不存在能在所有问题中都表现良好的方法。

2. 权重的初始值

将权重初始值设为零? NO!

将权重初始值设为一样的值? NO!(在误差反向传播中,所有的权重值都会进行相同的更新)

为了防止“权重均一化”,必须随机生成初始值0.01*np.randam.randn(10,100)

各层的激活值的分布都要求有适当地广度,通过在各层间传递多样性的数据,神经网络可以进行高效的学习,反之,若传递的是有所偏向的数据,就会出现梯度消失或“表现力受限”。

微信图片_20220606133644.jpg

3. Batch Normalization

  • 使学习快速进行(增大学习率)

  • 不那么依赖初始值

  • 抑制过拟合(降低Dropout等必要性)

思路:调整各层的激活值分布使其拥有适当的广度

微信图片_20220606133641.jpg

四、正则化

过拟合的原因:①模型拥有大量的参数,表现力强;②训练数据少。

微信图片_20220606133629.jpg

五、超参数的验证

超参数:神经元数量、batch大小、学习率、权值衰减等

不能使用测试集评估超参数的性能(对测试集发生过拟合)

超参数的最优化:

  • step1: 设定超参数的范围
  • step2: 从设定的范围中随机取样
  • step3: 使用2中采样到的超参数值进行学习,通过验证数据评估识别精度
  • step4: 重复2、3,根据识别精度结果缩小超参数的范围