一、神经网络基础
(1) Backpropagation (熟悉推导过程)
后向传播求导基本单元:
如果l+1为最后一层
,则根据损失函数L先将该层的导数求出,根据链式法则:
其中表示i个输入单元的导数(残差)。
若L为均方误差,即
则
可改为:
对于除
以外的层:
,
,... 2层,同样根据链式法则(以
层为例):
s代表的是某一层神经元的个数。将上述与替换为l与l+1,即可获得每一层的导数(残差)。
这时如果我们需要求某一层权重或偏置的导数,依旧是链式法则:
借用Ufldl中的总结,反正传播算法可表示为以下几个步骤(用矩阵-向量表示法书写):
(若有不对之处还望指正)
(2)参数初始化的对称失效问题
初始化权重参数时,需要进行随机初始化,而不是全部初始化为0或其他一样的值。可以看看如果我们将权重设为同样的值会发生什么:
模拟前向传播的过程:
网络结构如下
公式化:
(来自Ufldl)
如果此时的权重初始化为一样的值,则有
若所有的值都一样,一是输入一个和输入多个没有什么区别,二是在后向传播中,所有的权重会有相同的导数,即所有的权重会以相同的步率更新,所有的权重仍为同一个值,便没有设置这么多权重的价值了。
(3)梯度消失与梯度爆炸
以每一层仅有一个神经元的网络来说明:
f为激活函数。若想求的W(1)的导数,则需根据链式法则:
问题主要在于这一部分:
由于早期的激活函数以sigmoid为主,其求导后的图像如下图所示:
可以看到该导数的最大值不会超过0.25。若W的值也很小(一般也确实是,因为初始化后的权重都为较小的值,否则会引来梯度爆炸的问题),则提取出的那一部分也很小(小于1)。随着网络的加深,小于1的数不断相乘,累积到最后的梯度的导数便会接近0,就发生了梯度消失的现象。
相反,若提取出的那一部分很大(大于1,权重很大时会发生这种情况),则会发生梯度爆炸。