目录
1.梯度更新
在处理复杂任务上,深度网络比浅层网络具有更好的效果。但是,目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。
深度神经网络可看做是复合的非线性多元函数,
优化深度网络就是为了寻找到合适的权值,满足取得极小值点。而寻找极小值,通常采用梯度下降法。
2.梯度消失、梯度爆炸
梯度消失
网络层之间的梯度(小于1),重复相乘导致的指数级减小会产生梯度消失。
原因: 主要是因为网络层数太多、太深,导致梯度无法传播。本质应该是激活函数的饱和性。
表现: 神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新。
经常出现的情况:
(1) 在深层网络中
(2) 采用了不合适的损失函数,比如sigmoid
梯度爆炸
网络层之间的梯度(大于 1.0),重复相乘导致的指数级增长会产生梯度爆炸。
原因: 初始化权值过大,前面层会比后面层变化的更快,就会导致权值越来越大,梯度爆炸的现象就发生了。
表现: 在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致 NaN 值(即无穷大)。
一般出现的情况:
(1)在深层网络、循环神经网络中
(2)权值初始化值太大
2.1.BP更新权重
BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,参数的更新为,给定学习率,得出
给定4层全连接网络,定义网络输入为,是激活函数,第隐藏层网络经激活函数的输出为,其中代表第层的输入、第层的输出。
的
的
更新第2隐藏层的权值信息,根据链式求导法则:
第四层激活函数对第三层输出的导数:
根据上式可知,在权重更新时,会出现多个激活函数的导数相乘的情况。此时:
- 导数>1,随着层数的增加,求出的梯度的更新将以指数形式增加,发生梯度爆炸。
- 导数<1,随着层数的增加求出的梯度更新的信息会以指数形式衰减,发生梯度消失。
从深层网络角度来说,不同的层学习的速度差异很大,表现为网络中靠近输出的层学习的情况很好,靠近输入层的学习很慢,甚至即使训练了很久,前几层的权值和刚开始初始化的值差不多,因此梯度消失和梯度爆炸的根本原因在于反向传播算法的不足。
Hinton提出capsule的原因就是为了彻底抛弃反向传播
2.2.激活函数的影响
ReLU及其变体则是非饱和激活函数。使用非饱和激活函数的优势在于:
- 解决梯度消失
- 加快收敛速度:
Sigmoid函数需要将输入压缩至[0, 1]的范围
tanh函数需要将输入压缩至[-1, 1]的范围
2.2.1. Sigmoid
使用sigmoid作为损失函数,其梯度是不可能超过0.25的,经过链式求导之后,很容易发生梯度消失。
2.2.2.Tanh
tanh比sigmoid要好一些,但是它的导数仍然小于1。
tanh求导推导代码和可视化
2.2.3. Relu
ReLU函数的导数在正数部分恒等于1,因此在深层网络中使用不会导致梯度消失和爆炸。
优点:
- 解决了梯度消失、爆炸的问题
- 计算方便,计算速度快
- 加速了网络的训练
缺点:
- 由于负数部分恒为0,会导致一些神经元无法激活(可通过设置小学习率部分解决)
- 输出不是以0为中心的
2.2.4.LeakReLU
其中,leak系数一般选择0.01或者0.02,或者通过学习而来。
leakReLU解决了0区间带来的影响,而且包含了ReLU的所有优点。
2.2.5.ELU
其中,
ELU相对于leakReLU来说,计算要更耗时。
2.2.6.PReLU(参数化修正线性单元)
PReLU可以看作是Leaky ReLU的一个变体。在PReLU中,负值部分的斜率是根据数据来定的,而非预先定义的。
作者称,在ImageNet分类(2015,Russakovsky等)上,PReLU是超越人类分类水平的关键所在。
2.2.7.RReLU(随机纠正线性单元)
RReLU也是Leaky ReLU的一个变体。在RReLU中,负值的斜率在训练中是随机的,在之后的测试中是固定的。
亮点: 在训练环节中,是从一个均匀分布中随机抽取的数值。
2.2.8.ReLU其他变体
ReLU其他变体链接
CReLU(Concatenated Rectified Linear Units)
SELU
3.解决方案
在深度神经网络中,往往是梯度消失出现的更多一些。
3.1.预训练加微调
Hinton为了解决梯度的问题,提出采取无监督逐层训练方法。其基本思想是:
- 逐层预训练:每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入。
- Fine-tunning:在预训练完成后,再对整个网络进行“微调”。
Hinton在训练深度信念网络(Deep Belief Networks中,使用了这个方法,在各层预训练完成后,再利用BP算法对整个网络进行训练。此思想相当于是先寻找局部最优,然后整合起来寻找全局最优,此方法有一定的好处,但是目前应用的不是很多了。
3.2.梯度剪切(针对梯度爆炸)
设置梯度剪切阈值。在更新梯度时,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。
注:在WGAN中也有梯度剪切限制操作,但是和这个是不一样的,WGAN限制梯度更新信息是为了保证lipchitz条件。(?)
3.3.权重正则化(针对梯度爆炸)
其中,是指正则项系数。
发生梯度爆炸时,权值的范数会非常大,通过正则化项,可以部分限制梯度爆炸的发生。此外,通过对网络权重做正则,还可限制过拟合。
3.4.使用ReLU等激活函数
3.5.批规范化 Batch Normalization
Batch normalization (Batchnorm, BN) 是深度学习发展以来提出的最重要的成果之一,目前已经被广泛的应用到了各大网络中,具有加速网络收敛速度,提升训练稳定性的效果。
BN本质上是解决反向传播过程中的梯度问题。通过规范化操作将输出信号规范化,保证网络的稳定性。
举例:
正向传播:
反向传播:
反向传播的式子中有的存在,所以**的大小会影响梯度的消失和爆炸**。
BN通过将每一层的输出规范为均值和方差一致的方法,消除了带来的放大缩小的影响,进而解决梯度消失和爆炸的问题。也可以理解为:BN将输出从饱和区拉到了非饱和区。
3.6.残差结构
残差可以很轻松的构建几百层,一千多层的网络而不用担心梯度消失过快的问题,原因就在于残差的捷径(shortcut)部分。
相比较于以前网络的直来直去结构,残差中有很多这样的跨层连接结构,这样的结构在反向传播中具有很大的好处。
上式表示损失函数到达L的梯度,小括号里的1表示短路机制(identity x) 可以无损地传播梯度,而另一项残差梯度则需要经过带有weights的层,残差梯度不会那么巧全为-1,就算其很小,由于1的存在不会导致梯度消失,所以残差学习会更容易。
残差网络的出现导致了Image net比赛的终结。
论文:Deep Residual Learning for Image Recognition
论文解读
3.7.优化的循环神经网络
重置:有助于捕捉时间序列短期的依赖关系;
更新:有助于捕捉时间序列⾥⻓期的依赖关系。
遗忘门:控制上一时间步的记忆细胞
输入门:控制当前时间步的输入
输出门:控制从记忆细胞到隐藏状态
记忆细胞:种特殊的隐藏状态的信息的流动
3.7.1.LSTM
LSTM全称是长短期记忆网络(long-short term memory networks),不容易发生梯度消失。
主要原因在于LSTM内部复杂的门(gates)。LSTM通过“门”,可以在接下来更新的时候“记住”前几次训练的”残留记忆“。因此,经常用于生成文本中。目前也有基于CNN的LSTM。
3.7.2.GRU
3.7.3.深度循环网络
3.7.4.双向循环神经网络
3.8.初始化合理的权重值
可避免梯度爆炸或消失,也可以加快训练速度。
参考
https://blog.csdn.net/qq_25737169/article/details/78847691
https://zhuanlan.zhihu.com/p/68579467
https://www.mscto.com/ai/288755.html
https://blog.csdn.net/qq_30815237/article/details/89453315
https://blog.csdn.net/sisteryaya/article/details/81364089
https://www.cnblogs.com/chamie/p/8665251.html