目录
- 前言
- 1SGD
- 1.1 参数的更新
- 1.2 SGD 的缺点
- 2Momentum
- 3AdaGrad
- 4 Adam
- 5我们如何选取方法
- 6 设置权重初始值
- 6.1我们可以将权重初始值设置为0吗?
- 6.2 隐藏层的激活值的分布
- 6.3 ReLU 的权重初始参数
- 小结:
- 6.4 Batch Normalization
- 6.4.1 Batch Normalization算法
- 6.4.2 Batch Norm 的评估
- 6.5 正则化
- 6.5.1过拟合
- 6.5.2 权值衰减
- 6.5.3 Dropout
- 6.5.4超参数的学习
前言
本章主要介绍神经网络中的寻找最优参数的最优化方法,权重参数的初始值,超参数的设置方法
1SGD
1.1 参数的更新
之前学习到的随机最优梯度下降法(SGD)
将SGD类
截图
在上面的代码中出现的optimizer是进行最优化的人的意思,
通过单独实现最优化的类,功能的模块化会变得简单,后面的最优化方法Monmentum也会实现update方法,
1.2 SGD 的缺点
我们知道SGD是朝着梯度的方向移动的,但是梯度的方向并不是最小值的方向
下面将介绍Momentum、AdaGrad,Adam这些方法
2Momentum
3AdaGrad
在神经网络的学习中,学习率过小会耗费过多的时间,学习率过大会导致学习发散不能正确进行
AdaGrad 会为每个参数适当的调整学习率。h 表示过去学习梯度的平方和,随着学习的深入,更新的幅度会变得越来越小,实际上,如果无止境的进行学习,更新速度就会变成0,
为了改善这个问题,我们提出了RMSprop方法,RMSprop并不是将过去所有梯度相加,而是逐渐遗忘过去的梯度,在做加法运算的时候将新梯度的信息反映出来,呈现指数型的减小过去的梯度。
4 Adam
Momentum参照小球在碗中滚动的物理规则进行移动,AdaGrad为参数的每个元素来适当的调整步伐。Adam 就是将这两种方法融合在一起,相比Momentum小球摆动的幅度减小了。
Adam会预先设定几个参数,学习率,一次Momentum=0.9,二次Momentum=0.999,
5我们如何选取方法
要根据不同的问题,使用不同的方法,最近有很多研究者使用Adam。
6 设置权重初始值
我们知道,上面我们一直研究参数的最优问题,但是,我们并没有研究权重初始值问题。初始值可以决定学习是否能够成功。
6.1我们可以将权重初始值设置为0吗?
答案是不能,也就是将权重初始值设置为一样的,在误差反向传播过程中,如果权重初始值是样的,就会出现权重均一化,权重被更新为相同的值,
6.2 隐藏层的激活值的分布
在上面代码中我们分析了出现梯度消失和表现力受限的问题,这时候就用Xavier初始值
Xavier初始值:如果与前一层神经网络连接的节点有n个,就初始值使用标准差为1/根号下n的分布
根据公式可以知道与上层连接的节点越多,权重初始值越小,
这样设置后广度有了改善,但是后面层的图像出现了稍微歪斜的形状,如果用tanh代替sigmoid函数,就会呈现漂亮的钟形分布,sigmoid 和tanh都是S形曲线,sigmoid是关于(0,0.5)对称的,tanh是关于(0,0)对称的。
6.3 ReLU 的权重初始参数
对于像sigmoid和tanh这样的线性函数的时候可以使用Xavier来设置初始值,但是对于RELU这样激活函数,用“he初始值”来设置激活函数,用根号下的n/2来设置初始值,因为RELU函数负值区域的值为0,所以为了使得他更加有广度,需要2倍的系数
这样不仅能够保证广度,而且也能逆向传播的时候传播合适的值
小结:
当激活函数为sigmoid和tanh这样的S曲线时,使用Xavier初始值,激活函数为ReLU 时,使用H初始值。这是目前最佳实践
6.4 Batch Normalization
如何进行强制性的调整各个激活层的广度?
6.4.1 Batch Normalization算法
2015年提出了Batch Norm 方法,
优点
1)可以使得学习快速进行(可以增大学习率)
2)不那么依赖初始值(对于初始值可以不用那么神经质)
3)抑制过拟合(降低Dropout等的必要性)
定义:进行学习的时候使用mini-batch为单位,按mini-batch进行正规化,就是进行数据分布的均值为0,方差为1的正规化
步骤
1)先把数据集,求得均值和方差,进行正规化
2)将这个数据插入到激活函数的前面或者后面
3)Batch Norm进行缩放和平移的变换,
缺点
1)Batch Norm 的反向传播的推导有些复杂,使用计算图参考Frederik Kratzert的博客Understanding the backward pass through Batch Normalization Layer
6.4.2 Batch Norm 的评估
使用Batch Norm可以加大学习的推动,同时对权重初始值变得健壮
6.5 正则化
过拟合: 能拟合在训练数据中的其他数据,但是不能更好拟合不在训练集中的数据,
因此制作泛化性高的模型是必要的
6.5.1过拟合
1)模型拥有大量参数,表现力强
2)训练数据少
6.5.2 权值衰减
将权重衰减到1/2λw(2),然后加到损失函数上,λ是控制正则化的超参数,因为权重衰减过程中都要加上这个数值到损失函数,所以误差反向传播法的结果加上λw。
6.5.3 Dropout
使用权重衰减可以抑制过拟合,但是如果网络模型过于复杂,使用权值衰减就难以应对,就要使用Dropout
DropOut是在学习过程中删除神经元的方法。
每次正向传播的时候,self.mask都会随机产生与x相同的数组,并将比dropout_ratio的值大的元素设置为TRUE,并以FALSE来保存要删除的神经元,这样正向传播传递了信号的神经元反向传播也会有信号传递,
正向传播没有信号的反向传播就会终止。
机器学习中经常会用到集成学习,所谓集成学习就是让多个模型单独进行学习,推理的时候再取多个模型的平均值,通过集成学习,神经网络的识别度可以提高几个百分点,DropOut通过删除神经元使得每次学习的模型都不一样,也就是
说DropOut 通过网络将集成学习实现了
6.5.4超参数的学习
比如各层神经元的数量,batch的大小,参数更新时候的学习率或者权值衰减,如果这些参数没有设置合适的值,模型的性能就会更差。
在验证超参数的过程中不能使用测试数据,这会导致过拟合,用于调整超参数的数据就是验证数据。
有的时候要自己对数据集进行分割,一般是找出训练数据的20%作为验证数据,
超参数进行优化的过程中要先摒弃那些不符合逻辑的数据,然后再确定一个范围,从设定的范围中进行取样,通过验证数据评估识别精度,重复上面步骤,缩小范围。