天天看点

神经网络的交叉熵损失函数

0-1损失函数

L(Y,f(X))={1,0Y != f(X)Y = f(X)

平方损失函数

L(Y,f(X))=(Y−f(X))2

绝对损失函数L(Y,f(X))=|(Y−f(X))|

对数损失函数L(Y,P(Y|X))=−logP(Y|X)

常见的损失函数包含以上几个。

在神经网络中样本的平方损失函数一般会定义为:

Ed=12∑i(zi−yi)2,方便求导后约掉系数。

使用误差逆传播训练神经网络时会使用梯度下降法来更新每个神经网络中的权重,

根据链式求导法可以得到权重更新公式,

∂Ed∂wji=∂Ed∂nodej∂nodej∂wji=∂Ed∂nodej∂∑iwjixji∂wji=∂Ed∂nodejxji

此时对于输出层,权重更新公式为

∂Ed∂wji=∂Ed∂yj∂yj∂nodejxji

如果神经元使用sigmoid激活函数,即y=11+e−z

,函数图如下,

神经网络的交叉熵损失函数

则梯度下降法更新权重时,会涉及到sigmoid函数的导数,这个导数的形状大致如下:

神经网络的交叉熵损失函数

可以看到导数两边的值基本都接近0,也就是说两边的斜率很平缓,两边的点在使用梯度下降时下降很缓慢,可能会影响训练最终效果。

针对以上不足,有两个方向来避免,一是从激活函数下手,一个是从损失函数下手。这里我们不换激活函数,还是用sigmoid函数,于是引入了交叉熵损失函数。

L=∑i[zilnyi+(1−zi)ln(1−yi)]

这时再看权重更新公式,

∂L∂wji=∂L∂nodej∂nodej∂wji=∂L∂nodej∂∑iwjixji∂wji=∂L∂nodejxji

∂L∂wji=∂L∂yj∂yj∂nodejxji=xji(zj−yj)

可以看到梯度下降已经不与sigmoid的导数相关了,而是由误差来影响,当误差较大时则下降较快,让梯度下降法更有效率,避免了训练慢的问题。

以下是广告和相关阅读

========广告时间========

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/74080321">为什么写《Tomcat内核设计剖析》</a>

=========================

相关阅读:

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/72487394">机器学习之神经网络</a>

欢迎关注:

神经网络的交叉熵损失函数

继续阅读