基于梯度下降法的神经网络反向传播过程首先需要定义损失函数(loss function),然后计算损失函数对梯度的偏导,最后沿梯度下降方向更新权重及偏置参数。因此,损失函数的设定对梯度计算有重要的影响。
图2.15 GELU函数
损失函数 用以衡量模型预测值 与真实值 y 之间的差。神经网络的预测值是参数 w 的函数,可记为 。 和 y 总是不完全一致的,如图2.16所示。二者的误差可以用损失函数表示为 L ( w )= f ( Hw ( x ), y )。
图2.16 不同参数 w 下的拟合情况。训练样本( x,y )为(1,1),(2,2),(3,3),(4,4),真实值是 y = x 这条直线上的点
常用的损失函数包括均方差和交叉熵损失函数。
均方差损失函数是最常用的损失函数。以一个神经元为例,计算结果是 ,实际结果是 y ,则均方差损失函数为
假设激活函数是sigmoid函数,则 ,其中 z = wx + b 。均方差损失函数对 w 和 b 的梯度为
从上面的计算结果可以看出,两个梯度的共性之处是,当神经元的输出接近1或0时,梯度将会趋近0,这是因为二者都包含 σ ′ ( z )。该式子说明当神经元的输出接近1时,神经元的输出的梯度接近0,梯度会消失,进而导致神经网络在反向传播时参数更新缓慢。
训练集 D 上的均方差损失函数为
其中 m 为训练样本的总数量, i 为分类类别。
由于均方差损失函数和sigmoid函数的组合会出现梯度消失,因此可以用别的损失函数(例如交叉熵损失函数)与sigmoid激活函数组合以避免这一现象。交叉熵损失函数的定义为:
其中, m 为训练集 D 中样本的总数量, i 为分类类别。交叉熵的定义类似于信息论中熵的定义。对于单标签多分类问题,即每个图像样本只能有一个类别,交叉熵可以简化为 L = 。而对于多标签多分类问题,即每个图像样本可以有多个类别,一般转化为二分类问题。
对于二分类问题,使用sigmoid激活函数时的交叉熵损失函数为
神经网络计算的结果为
交叉熵损失函数对权重 w 的梯度为
将sigmoid激活函数的导数 σ ′ ( z )=(1 -σ ( z )) σ ( z )代入上式可得
同理可以得到交叉熵损失函数对偏置 b 的偏导为
从式(2.51)和式(2.53)可以看出,使用sigmoid激活函数的交叉熵的损失函数对 w 和 b 的梯度中没有sigmoid的导数 σ ′ ( z ),可以缓解梯度消失。
总结一下,损失函数是权重参数 w 和偏置参数 b 的函数,是一个标量,可以用来评价网络模型的好坏,损失函数的值越小说明模型和参数越符合训练样本( x , y )。对于同一个算法,损失函数不是固定唯一的。除了交叉熵损失函数,还有很多其他的损失函数。特别需要说明的是,必须选择对参数( w , b )可微的损失函数,否则无法应用链式法则。