目录

  • 前言
  • 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这些方法

神经网络共享参数是什么 神经网络sgd_深度学习

2Momentum

神经网络共享参数是什么 神经网络sgd_数据_02

3AdaGrad

在神经网络的学习中,学习率过小会耗费过多的时间,学习率过大会导致学习发散不能正确进行
AdaGrad 会为每个参数适当的调整学习率。h 表示过去学习梯度的平方和,随着学习的深入,更新的幅度会变得越来越小,实际上,如果无止境的进行学习,更新速度就会变成0,
为了改善这个问题,我们提出了RMSprop方法,RMSprop并不是将过去所有梯度相加,而是逐渐遗忘过去的梯度,在做加法运算的时候将新梯度的信息反映出来,呈现指数型的减小过去的梯度。

4 Adam

Momentum参照小球在碗中滚动的物理规则进行移动,AdaGrad为参数的每个元素来适当的调整步伐。Adam 就是将这两种方法融合在一起,相比Momentum小球摆动的幅度减小了。

Adam会预先设定几个参数,学习率,一次Momentum=0.9,二次Momentum=0.999,

神经网络共享参数是什么 神经网络sgd_权重_03

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)对称的。

神经网络共享参数是什么 神经网络sgd_神经网络共享参数是什么_04

6.3 ReLU 的权重初始参数

对于像sigmoid和tanh这样的线性函数的时候可以使用Xavier来设置初始值,但是对于RELU这样激活函数,用“he初始值”来设置激活函数,用根号下的n/2来设置初始值,因为RELU函数负值区域的值为0,所以为了使得他更加有广度,需要2倍的系数
这样不仅能够保证广度,而且也能逆向传播的时候传播合适的值

小结:

当激活函数为sigmoid和tanh这样的S曲线时,使用Xavier初始值,激活函数为ReLU 时,使用H初始值。这是目前最佳实践

神经网络共享参数是什么 神经网络sgd_神经网络共享参数是什么_05

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)训练数据少

神经网络共享参数是什么 神经网络sgd_神经网络共享参数是什么_06


神经网络共享参数是什么 神经网络sgd_深度学习_07

6.5.2 权值衰减

将权重衰减到1/2λw(2),然后加到损失函数上,λ是控制正则化的超参数,因为权重衰减过程中都要加上这个数值到损失函数,所以误差反向传播法的结果加上λw。

6.5.3 Dropout

使用权重衰减可以抑制过拟合,但是如果网络模型过于复杂,使用权值衰减就难以应对,就要使用Dropout
DropOut是在学习过程中删除神经元的方法。
每次正向传播的时候,self.mask都会随机产生与x相同的数组,并将比dropout_ratio的值大的元素设置为TRUE,并以FALSE来保存要删除的神经元,这样正向传播传递了信号的神经元反向传播也会有信号传递,
正向传播没有信号的反向传播就会终止。

机器学习中经常会用到集成学习,所谓集成学习就是让多个模型单独进行学习,推理的时候再取多个模型的平均值,通过集成学习,神经网络的识别度可以提高几个百分点,DropOut通过删除神经元使得每次学习的模型都不一样,也就是

说DropOut 通过网络将集成学习实现了

神经网络共享参数是什么 神经网络sgd_权重_08

6.5.4超参数的学习

比如各层神经元的数量,batch的大小,参数更新时候的学习率或者权值衰减,如果这些参数没有设置合适的值,模型的性能就会更差。

在验证超参数的过程中不能使用测试数据,这会导致过拟合,用于调整超参数的数据就是验证数据。
有的时候要自己对数据集进行分割,一般是找出训练数据的20%作为验证数据,
超参数进行优化的过程中要先摒弃那些不符合逻辑的数据,然后再确定一个范围,从设定的范围中进行取样,通过验证数据评估识别精度,重复上面步骤,缩小范围。