深度学习(一) 损失函数、输出单元、激活函数、反向传播
深度前馈网络
概述
- 线性模型无论是凸优化还是闭式解都可以高效可靠地拟合,而它的缺陷是拟合能力局限于线性函数里,无法理解特征之间的相互作用。
- 深度学习通过学习特征来优化模型,提高模型的性能。
- 与线性模型的凸优化从任意初始解都能收敛到最优点不同的是,深度学习的代价函数往往是非凸的,使用梯度来进行模型的优化。这种非凸迭代优化对模型的初值敏感,使用不同的初始值会收敛到不同的点。
损失函数
神经网络使用最大似然来进行训练:
损失函数必须足够的大、足够的足有代表性,饱和函数的梯度非常的小,不适合作为损失函数
常用损失函数:交叉熵、l2- 输出单元
- 线性单元
不易饱和,适合各种优化算法 - sigmoid 二分类
- softmax 多分类
- 线性单元
隐藏单元
- sigmoid/tanh
缺点:
a. sigmoid系函数两端扁平,十分易于饱和,simoid求导之梯度值在[0,1/4],易于产生梯度消失。
b. sigmoid函数的输出不是0均值的,这会导致下一层二等输入信号为非0均值,如果输入神经元是数据是正的,那么计算的梯度全为正数或负数,导致梯度下降锯齿形(之字形)晃动,导致收敛速度缓慢。若梯度是批数据累加的则权值的更新准确一些。
c. tanh函数的输出是0均值的,在实际应用中比sigmoid好
d. 非0均值会导致下一层的bias shift。bias shift是指输出的均值比输入的均值大的多。 - ReLU
ReLU单侧抑制,左侧不能学习(Dying ReLU再也没有机会学习),它的优化与线性函数类似。
什么叫Dying ReLU?
假设ReL的输入为 ,经过ReLU后, ,假设一个简单的误差函数 ,反向传播传回的梯度:
权值更新:
当梯度为0,权值则不再更新,可以注意到若所有的输入都位于左侧,返回的梯度为0,该神经元就死了,权值将不再被更新。
该问题的产生是由于在某个batch更新时,使得权值变得过于小,对于任何输入都有 ,权值不再被更新。
过大的学习率将会放大这一问题。 - Leaky ReLU
Leaky ReLU的左侧也能进行学习,将 固定为一个较小的常值,可以解决Dying ReLU问题 - PReLU
与 Leaky ReLU不同的是,PReLU的 并不是一个常值,它也是一个参数,学习出来的,在较小的数据集中容易过拟合 - ELU
a. ReLU有bias shift问题,他的输出全为正值,没有负值。当激活值均值非0时,会对下一层造成一个bias,若激活值之间不能相互抵消,会对一下层的激活单元造成bias shift,如此叠加,单元越多,bias shift就越大。
b. Leaky ReLU、 PReLU、 ELU可以取到负值,让激活单元可以更接近0,类似BN的效果,但降低了复杂度。
c.相对 Leaky ReLU、 PReLU,ELU对于输入值较小具有软包和(最左则梯度近似0)性质,提升了对噪声的鲁棒性。 - maxout
maxout可以以任意精度逼近任意凸函数 学习激活函数本身,缺点是k倍增加了参数
maxout以分段函数的形式去逼近凸函数,两端分段函数可以近似ReLU
- sigmoid/tanh
初始化
从正则化的角度,我们希望网络的权值小一点,降低过拟合的风险,而从优化的角度,我们希望初始化的大一点,权值大能够传递更多的信息。
目比较流行初始化方法是Xavier初始化,采用启发式想法,将权值以 ,它的方差为 ,使得信号在经过多层神经网络后还能保持在合理范围。(不至于太大或太小)
- 反向传播
softmax是元素级别的函数,返回的是向量
基础公式:
元素级别的函数求导
, ,
推导:
故:
以两层神经网络推导为例:
其中,令:
由之上的推导,可得
对 :
对 :
多层神经网络推导:
记号:
推导最后一层的偏导
固:
展开全微分
上面三项分别对应着:
向下一层传回梯度: