一、神经网络基础

(1)     Backpropagation (熟悉推导过程)

后向传播求导基本单元:

深度学习基线 深度学习基础教程_激活函数

如果l+1为最后一层

深度学习基线 深度学习基础教程_初始化_02

,则根据损失函数L先将该层的导数求出,根据链式法则:

深度学习基线 深度学习基础教程_深度学习基线_03

其中表示i个输入单元的导数(残差)。

L为均方误差,即

深度学习基线 深度学习基础教程_权重_04


深度学习基线 深度学习基础教程_激活函数_05

可改为:

深度学习基线 深度学习基础教程_初始化_06

对于除

深度学习基线 深度学习基础教程_初始化_02

以外的层:

深度学习基线 深度学习基础教程_深度学习基线_08


深度学习基线 深度学习基础教程_初始化_09

,... 2层,同样根据链式法则(以

深度学习基线 深度学习基础教程_深度学习基线_08

层为例): 

深度学习基线 深度学习基础教程_激活函数_11

s代表的是某一层神经元的个数。将上述与替换为ll+1,即可获得每一层的导数(残差)。

这时如果我们需要求某一层权重或偏置的导数,依旧是链式法则:

深度学习基线 深度学习基础教程_深度学习基线_12

深度学习基线 深度学习基础教程_权重_13

借用Ufldl中的总结,反正传播算法可表示为以下几个步骤(用矩阵-向量表示法书写):

深度学习基线 深度学习基础教程_深度学习基线_14

(若有不对之处还望指正)

 (2)参数初始化的对称失效问题

  初始化权重参数时,需要进行随机初始化,而不是全部初始化为0或其他一样的值。可以看看如果我们将权重设为同样的值会发生什么:

  模拟前向传播的过程:

  网络结构如下

  

深度学习基线 深度学习基础教程_初始化_15

  公式化:

  

深度学习基线 深度学习基础教程_初始化_16

(来自Ufldl)

  如果此时的权重初始化为一样的值,则有

  

深度学习基线 深度学习基础教程_激活函数_17

  若所有的值都一样,一是输入一个和输入多个没有什么区别,二是在后向传播中,所有的权重会有相同的导数,即所有的权重会以相同的步率更新,所有的权重仍为同一个值,便没有设置这么多权重的价值了。

 (3)梯度消失与梯度爆炸

  以每一层仅有一个神经元的网络来说明:

  

深度学习基线 深度学习基础教程_初始化_18

 

  f为激活函数。若想求的W(1)的导数,则需根据链式法则:

深度学习基线 深度学习基础教程_初始化_19

  问题主要在于这一部分:

 

深度学习基线 深度学习基础教程_深度学习基线_20

  由于早期的激活函数以sigmoid为主,其求导后的图像如下图所示:

 

深度学习基线 深度学习基础教程_权重_21

  可以看到该导数的最大值不会超过0.25。若W的值也很小(一般也确实是,因为初始化后的权重都为较小的值,否则会引来梯度爆炸的问题),则提取出的那一部分也很小(小于1)。随着网络的加深,小于1的数不断相乘,累积到最后的梯度的导数便会接近0,就发生了梯度消失的现象。

  相反,若提取出的那一部分很大(大于1,权重很大时会发生这种情况),则会发生梯度爆炸。