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

常见损失函数

  • 0-1损失函数
    L(Y,f(X))={1,0Y != f(X)Y = f(X)
  • 平方损失函数
    L(Y,f(X))=(Yf(X))2
  • 绝对损失函数 L(Y,f(X))=|(Yf(X))|
  • 对数损失函数 L(Y,P(Y|X))=logP(Y|X)

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

平方损失函数

在神经网络中样本的平方损失函数一般会定义为:
Ed=12i(ziyi)2 ,方便求导后约掉系数。

使用误差逆传播训练神经网络时会使用梯度下降法来更新每个神经网络中的权重,
根据链式求导法可以得到权重更新公式,

Edwji=Ednodejnodejwji=Ednodejiwjixjiwji=Ednodejxji

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

sigmoid激活函数

如果神经元使用sigmoid激活函数,即 y=11+ez
,函数图如下,
神经网络的交叉熵损失函数_第1张图片

则梯度下降法更新权重时,会涉及到sigmoid函数的导数,这个导数的形状大致如下:
这里写图片描述
可以看到导数两边的值基本都接近0,也就是说两边的斜率很平缓,两边的点在使用梯度下降时下降很缓慢,可能会影响训练最终效果。

交叉熵损失函数

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

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

这时再看权重更新公式,
Lwji=Lnodejnodejwji=Lnodejiwjixjiwji=Lnodejxji

此时对于输出层,权重更新公式为
Lwji=Lyjyjnodejxji=xji(zjyj)

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

以下是广告相关阅读

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

公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以购买。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

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

相关阅读:
机器学习之神经网络

欢迎关注:

这里写图片描述

你可能感兴趣的:(机器学习)