7. 数值稳定性和模型初始化
7.1 数值稳定性
深度学习模型有关数值稳定性的典型问题是:梯度消失(gradient vanishing)和梯度爆炸(gradient exploding)。
当神经网络的层数较多时,模型的数值稳定性容易变差。
假设一个层数为
L
L
L的多层感知机的第
l
l
l层
H
(
l
)
\boldsymbol{H}^{(l)}
H(l)的权重参数为
W
(
l
)
\boldsymbol{W}^{(l)}
W(l),输出层
H
(
L
)
\boldsymbol{H}^{(L)}
H(L)的权重参数为
W
(
L
)
\boldsymbol{W}^{(L)}
W(L)。
不考虑偏差参数,设所有隐藏层的激活函数为恒等映射(identity mapping):
ϕ
(
x
)
=
x
\phi(x) = x
ϕ(x)=x。
- 在数学中,恒等函数(也称恒等关系/恒等映射/恒等变换)是始终返回与其参数相同的值的函数。即,对于f是恒等式,对所有x都有等式 f(x)=x 。
给定输入
X
\boldsymbol{X}
X,多层感知机的第
l
l
l层的输出
H
(
l
)
=
X
W
(
1
)
W
(
2
)
…
W
(
l
)
\boldsymbol{H}^{(l)} = \boldsymbol{X} \boldsymbol{W}^{(1)} \boldsymbol{W}^{(2)} \ldots \boldsymbol{W}^{(l)}
H(l)=XW(1)W(2)…W(l)。
此时,如果层数
l
l
l较大,
H
(
l
)
\boldsymbol{H}^{(l)}
H(l)的计算可能会出现梯度消失或梯度爆炸。
详细来说,假设输入和所有层的权重参数都是标量,权重参数为0.2和5,则多层感知机的第30层输出为:
输入
X
\boldsymbol{X}
X与
0.
2
30
≈
1
×
1
0
−
21
0.2^{30} \approx 1 \times 10^{-21}
0.230≈1×10−21(梯度消失)的乘积,或输入
X
\boldsymbol{X}
X与
5
30
≈
9
×
1
0
20
5^{30} \approx 9 \times 10^{20}
530≈9×1020(梯度爆炸)的乘积。
类似地,当层数较多时,梯度的计算也更容易出现梯度消失或梯度爆炸。
7.2 模型初始化
在神经网络中,需要随机初始化模型参数,具体原因如下:
回顾 (二)深度学习基础 – 3 小节,下图所示的多层感知机。
假设输出层只保留一个输出单元 o 1 o_1 o1(删去 o 2 o_2 o2和 o 3 o_3 o3以及指向它们的箭头),且隐藏层使用相同的激活函数,如果将每个隐藏单元的参数都初始化为相等的值,那么在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。在反向传播中,每个隐藏单元的参数梯度值相等。因此,这些参数在使用基于梯度的优化算法迭代后值依然相等。之后的迭代也是如此。在这种情况下,无论隐藏单元有多少,隐藏层本质上只有1个隐藏单元在发挥作用。
因此,通常将神经网络的模型参数,特别是权重参数,进行随机初始化。
![](https://img-blog.csdnimg.cn/2020051719170597.png)
Tensorflow2.0的默认随机初始化:
Tensorflow中initializers的模块参数都采取了较为合理的初始化策略。
不同类型的layer采用的初始化方法,参看源码。