训练神经网络 尤其是深度神经网络所面临的一个问题是梯度消失或梯度爆炸
也就是说 当你训练深度网络时 导数或坡度有时会变得非常大 或非常小 甚至以指数方式变小 这加大了训练的难度
这节课 你将会了解梯度消失或爆炸问题的真正含义 以及如何更明智地选择随机初始化权重 从而避免这个问题
假设你正在训练这样一个极深的神经网络:
为了节约幻灯片上的空间,我画的神经网络每层只有两个隐藏单元,但它可能含有更多。但这个神经网络会有参数
w
[
1
]
w^{[1]}
w[1],
w
[
2
]
w^{[2]}
w[2],
w
[
3
]
w^{[3]}
w[3]等等,直到
w
[
L
]
w^{[L]}
w[L]。为了简单起见,假设我们使用激活函数
g
(
z
)
=
z
g(z)=z
g(z)=z,也就是线性激活函数。我们忽略
b
b
b,假设
b
[
L
]
=
0
b[L]=0
b[L]=0。如果那样的话,输出
y
=
w
[
L
]
∗
w
[
L
−
1
]
∗
w
[
L
−
2
]
∗
.
.
.
∗
w
[
3
]
∗
w
[
2
]
∗
w
[
1
]
∗
x
y=w[L]*w[L-1]*w^{[L-2]}*...*w^{[3]}*w^{[2]}*w^{[1]}*x
y=w[L]∗w[L−1]∗w[L−2]∗...∗w[3]∗w[2]∗w[1]∗x。如果你想考验我的数学水平,
w
[
1
]
∗
x
=
z
[
1
]
w^{[1]}*x=z^{[1]}
w[1]∗x=z[1],因为
b
=
0
b=0
b=0,所以我想,
z
[
1
]
=
w
[
1
]
∗
x
z^{[1]}=w^{[1]}*x
z[1]=w[1]∗x,因为
b
=
0
b=0
b=0。
a
[
1
]
=
g
(
z
[
1
]
)
a^{[1]}=g(z^{[1]})
a[1]=g(z[1])。因为我们使用了一个线性激活函数,它等于
a
[
1
]
=
g
(
z
[
1
]
)
=
z
[
1
]
a^{[1]}=g(z^{[1]})=z^{[1]}
a[1]=g(z[1])=z[1]。所以第一项
w
[
1
]
∗
x
w^{[1]}*x
w[1]∗x等于
a
[
1
]
a^{[1]}
a[1]。
通过推理,你会得出
w
[
2
]
∗
w
[
1
]
∗
x
=
a
[
2
]
w^{[2]}*w^{[1]}*x=a^{[2]}
w[2]∗w[1]∗x=a[2],所有这些矩阵数据传递的协议将给出
y
^
\hat{y}
y^而不是
y
y
y的值。假设每个权重矩阵
w
[
L
]
w^{[L]}
w[L]等于。。。假设它比1大一点,
w
[
L
]
=
[
1.5
0
0
1.5
]
w^{[L]}= \begin{bmatrix} 1.5 & 0 \\ 0 & 1.5 \\ \end{bmatrix}
w[L]=[1.5001.5]
从技术上讲,最后一项有不同维度,可能它就是余下的权重矩阵。忽略最后这个不同维度的项,
y
^
=
w
[
L
]
∗
[
1.5
0
0
1.5
]
L
−
1
∗
x
\hat{y}=w^{[L]}*{ \begin{bmatrix} 1.5 & 0 \\ 0 & 1.5 \\ \end{bmatrix} }^{L-1}*x
y^=w[L]∗[1.5001.5]L−1∗x
因为我们假设所有矩阵都等于它,
[
1.5
0
0
1.5
]
\begin{bmatrix} 1.5 & 0 \\ 0 & 1.5 \\ \end{bmatrix}
[1.5001.5]
It’s really 1.5 times the identity matrix, then you end up with this calculation.
它是1.5倍的单位矩阵,最后的计算结果就是
y
^
\hat{y}
y^。
y
^
\hat{y}
y^也就等于
1.
5
(
L
−
1
)
∗
x
1.5^{(L-1)}*x
1.5(L−1)∗x,如果对于一个深度神经网络来说,
L
L
L值较大,那么
y
^
\hat{y}
y^的值也会非常大。实际上它呈指数级增长的,他增长的比率是
1.
5
L
1.5^{L}
1.5L。音系对于一个深度神经网络,
y
y
y的值将爆炸式增长。
相反的,如果权重是0.5,它比1小。 1. 5 L 1.5^{L} 1.5L项也就变成了 0. 5 L 0.5^{L} 0.5L。矩阵变成了 0. 5 ( L − 1 ) ∗ x 0.5^{(L-1)}*x 0.5(L−1)∗x,再次忽略 w [ L ] w[L] w[L]。因此每个矩阵都小于1,假设 x 1 x_1 x1和 x 2 x_2 x2都是1,激活函数将变成 1 / 2 1/2 1/2和 1 / 2 1/2 1/2, 1 / 4 1/4 1/4, 1 / 4 1/4 1/4, 1 / 8 1/8 1/8, 1 / 8 1/8 1/8等,直到最后一项变成了 1 / 2 L 1/2L 1/2L。作为系定义函数,激活函数的值将以指数级下降,它是与网络层数量 L L L相关的函数。
在深度网络中,激活函数以指数级递减。我希望你得到的直观理解是,权重 W W W只比1略大一点,或者说只比单位矩阵大一点,深度神经网络的激活函数将爆炸式增长。如果 W W W比1略小一点,有可能是0.9,在深度神经网络中,激活函数将以指数级递减。
虽然我只是论述了激活函数以L的函数指数级增长或下降,相似的讨论也适用于展示导数或梯度函数也是以层数的函数呈指数增长或呈指数递减。(And even though I went through this argument in terms of activations increasing or decreasing exponentially as a function of L, a similar argument can be used to show that the derivations or the gradients the computer is going to send will also increase exponentially or decrease exponentially as a function of the number of layers.)
对于当前的神经网络,假设 L = 150 L=150 L=150。最近Microsoft对152层神经网络的研究取得了很大进展。在这样一个深度神经网络中,如果激活函数或梯度函数以L的函数指数级增长或下降,它们的值将会变得极大或极小。从而导致训练难度上升,尤其是梯度比 L L L小了指数级,梯度下降算法的步长会非常非常小。梯度下降算法将花费很长时间来学习。
总结一下,今天我们讲了深度神经网络是如何产生梯度消失或爆炸问题的。实际上,在很长一段时间内,它曾是训练深度神经网络的阻力。虽然有一个不能彻底解决此问题的解决方案,但是已在如何选择初始化权重问题上提供了很多帮助。我们下节课继续讲。