# 深度神经网络的训练难点

深度神经网络是很多个隐藏层的神经网络,可以学习到不同抽象程度的概念。

例如:图像中,第一层学到边角,第二层学到一些基本形状,第三层学到物体概念。

训练深度学习网络时,不同层的学习率明显不同,接近输出层学习率比较合适,但是前面的层学习太慢,有时会被困住,这个问题被称为消失的GradientGradient问题(VanishingGradientProblem)(Vanishing \: Gradient \: Problem)。

# 理论原因

假设每层只有一个神经元

图片名称

对于每一级神经元有zj=wjaj−1+bjz_j = w_ja_{j-1}+b_j,同时得到∂C∂b1\frac{\partial C}{\partial b_1}的表达式

∂C∂b1=σ′(z1)×w2×σ′(z2)×w3×σ′(z4)×∂C∂a4\frac{\partial C}{\partial b_1}=\sigma'(z_1)\times w_2 \times \sigma'(z_2) \times w_3 \times \sigma'(z_4) \times \frac{\partial C}{\partial a_4}

对b1b_1的一个小变化引起的CC的变化

∂C∂b1≈ΔCΔb1\frac{\partial C}{\partial b_1} \approx \frac{\Delta C}{\Delta b_1}

如何引起b1b_1的变化

a1=σ(z1)=σ(w1a0+b1)a_1 = \sigma(z_1) = \sigma(w_1a_0+b_1)

衡量z1z_1的变化

Δa1≈∂σ(w1a0+b1)∂b1Δb1=σ′(z1)Δb1\Delta a_1 \approx \frac{\partial \sigma(w_1a_0+b_1)}{\partial b_1}\Delta b_1 = \sigma'(z_1)\Delta b_1

a1a_1的变化又引起z2z_2的变化,z2=w2×a1+b2z_2 = w_2 \times a_1 + b_2

Δz2≈∂z2∂a1Δa1=w2Δa1\Delta z_2 \approx \frac{\partial z_2}{\partial a_1}\Delta a_1 = w_2\Delta a_1

把以上a1a_1的变化代入z2z_2的变化

Δz2≈σ′(z1)w2Δb1\Delta z_2 \approx \sigma'(z_1)w_2\Delta b_1

根据以上规律可以进行推导

ΔC≈σ′(z1)w2σ′(z2)...σ′(z4)∂C∂a4Δb1\Delta C \approx \sigma'(z_1)w_2 \sigma'(z_2)...\sigma'(z_4) \frac{\partial C}{\partial a_4}\Delta b_1

等式两边同时除以b1b_1的变化,得到

∂C∂b1=σ′(z1)w2σ′(z2)...σ′(z4)∂C∂a4\frac{\partial C}{\partial b_1} = \sigma'(z_1)w_2 \sigma'(z_2)...\sigma'(z_4) \frac{\partial C}{\partial a_4}

图片名称

根据上图,σ′\sigma'的值小于1/4,∣w∣|w|的值小于等于1,因此在不断连乘的情况下,这个值会不断减小。

# 解决方法

利用其他激活函数,比如ReLUReLU来代替SigmodSigmod