交叉熵损失函数(作用及公式推导)
交叉熵损失函数(作用及公式推导)
交叉熵损失函数是机器学习和深度学习中常用的损失函数之一,尤其在分类问题中表现优异。本文将从平方差损失函数的不足出发,深入探讨交叉熵损失函数的作用及其数学推导过程。
一、总结
一句话总结:
交叉熵损失函数的公式为:
$$C = - \frac { 1 } { n } \sum _ { x } [ y \ln a + ( 1 - y ) \ln ( 1 - a ) ]$$
1、平方差损失函数的不足?
使用平方差损失函数训练ANN时,存在一个显著的问题:当误差较大时,参数调整的幅度可能反而更小,导致训练过程变得缓慢。
二、交叉熵代价函数(作用及公式推导)
交叉熵代价函数(Cross-entropy cost function)是一种衡量人工神经网络(ANN)预测值与实际值差异的方法。与二次代价函数相比,它能更有效地促进ANN的训练。
1. 二次代价函数的不足
以一个神经元的二类分类训练为例,进行两次实验(ANN常用的激活函数为sigmoid函数,该实验也采用该函数):输入一个相同的样本数据x=1.0(该样本对应的实际分类y=0);两次实验各自随机初始化参数,从而在各自的第一次前向传播后得到不同的输出值,形成不同的代价(误差):
实验1:第一次输出值为0.82
实验2:第一次输出值为0.98
从两次实验的代价曲线中可以看出:实验1的代价随着训练次数增加而快速降低,但实验2的代价在一开始下降得非常缓慢;直观上看,初始的误差越大,收敛得越缓慢。
2. 交叉熵代价函数
交叉熵代价函数的公式为:
$$C = - \frac { 1 } { n } \sum _ { x } [ y \ln a + ( 1 - y ) \ln ( 1 - a ) ]$$
其中,C表示代价,x表示样本,y表示实际值,a表示输出值,n表示样本的总数。
重新计算参数w的梯度:
$$\frac{\partial C}{\partial w} = \frac{1}{n} \sum_x \frac{\partial C_x}{\partial w} = \frac{1}{n} \sum_x a(1-a)(y-a) \frac{\partial z}{\partial w}$$
其中(具体证明见附录):
$$\frac{\partial C_x}{\partial a} = -\frac{y}{a} + \frac{1-y}{1-a}$$
因此,w的梯度公式中原来的
被消掉了;另外,该梯度公式中的
表示输出值与实际值之间的误差。所以,当误差越大,梯度就越大,参数w调整得越快,训练速度也就越快。同理可得,b的梯度为:
3. 交叉熵代价函数是如何产生的?
以偏置b的梯度计算为例,推导出交叉熵代价函数:
在第1小节中,由二次代价函数推导出来的b的梯度公式为:
$$\frac{\partial C}{\partial b} = \frac{1}{n} \sum_x \frac{\partial C_x}{\partial b} = \frac{1}{n} \sum_x a(1-a)(y-a) \frac{\partial z}{\partial b}$$
为了消掉该公式中的
,我们想找到一个代价函数使得:
$$\frac{\partial C_x}{\partial a} = -\frac{y}{a} + \frac{1-y}{1-a}$$
即:
$$\frac{\partial C_x}{\partial a} = -\frac{y}{a} + \frac{1-y}{1-a}$$
对两侧求积分,可得:
$$C_x = -y \ln a - (1-y) \ln (1-a)$$
而这就是前面介绍的交叉熵代价函数。
附录:
sigmoid函数为:
$$\sigma(z) = \frac{1}{1 + e^{-z}}$$
可证:
$$\frac{\partial \sigma(z)}{\partial z} = \sigma(z)(1-\sigma(z))$$