本文讨论的内容参考自《神经网络与深度学习》https://nndl.github.io/ 第7章 网络优化与正则化
代入可知,KaTeX parse error: Undefined control sequence: \K at position 15: \frac{\alpha}{\̲K̲}可以看作是真正的学习率,如果不成正比,那么会出现过大或者过小的情况,使参数更新不稳定或者过慢。
可以看出,如果
β
1
\beta_1
β1和
β
2
\beta_2
β2都接近1,
M
^
t
\hat M_t
M^t接近
M
t
M_t
Mt,
G
^
t
\hat G_t
G^t接近
G
t
G_t
Gt,当
M
0
=
0
,
G
0
=
0
M_0=0, G_0=0
M0=0,G0=0,初期的均值和未减去均值的方差都很大,因为
t
t
t较小时,由于从0开始增长的很慢,所以基本都趋于0,所以和真实值差距很大,因此需要进行修正,
β
1
t
\beta^t_1
β1t在
t
t
t变大的时候越来越趋于0,这样就会使初期的
M
t
M_t
Mt和
G
t
G_t
Gt更新较大,后期更新较小。
AdaDelta算法的
G
t
G_t
Gt计算和RMSprop算法一样,是参数更新差值不同:
其实就是为了让激活函数
f
(
⋅
)
f(\cdot)
f(⋅)的净输入适合激活函数,如果在仿射变换之前进行归一化,那经过了仿射变换以后分布还是变了,可能不适合激活函数的定义域。当用Logistic函数时,如果归一化到[0,1],仿射变换可能让数值大于1,那么梯度就消失了,如果用ReLU函数,
x
>
0
x > 0
x>0时都是它本身,那么在仿射变换之后可能小于0了,梯度也消失了。
γ
\gamma
γ和
β
\beta
β表示缩放和平移的参数向量,通过这两个参数,可以调整输入分布,防止ReLU死亡问题,然后有了
β
\beta
β的存在,仿射变换就不需要偏置参数。
RNN的梯度随时间反向计算,有一个累积的过程,如果重复进行归一化,会导致梯度爆炸。而且批量归一化是使用小批量的均值和方差来近似整个序列的均值和方差,RNN的序列长度不同,批量均值和方差可能无法反映整个序列的统计特性。批量归一化通常假设批量中的样本是独立同分布的,这和RNN的每一层内不同,RNN的每一层是有时间步的关系。
很明显,对每个时刻的隐藏状态进行随机丢弃,会损坏网络的时间维度上的记忆能力。