交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。在介绍交叉熵代价函数之前,本文先简要介绍二次代价函数,以及其存在的不足。

1. 二次代价函数的不足

ANN的设计目的之一是为了使机器可以像人一样学习知识。人在学习分析新事物时,当发现自己犯的错误越大时,改正的力度就越大。比如投篮:当运动员发现自己的投篮方向离正确方向越远,那么他调整的投篮角度就应该越大,篮球就更容易投进篮筐。同理,我们希望:ANN在训练时,如果预测值与实际值的误差越大,那么在反向传播训练的过程中,各种参数调整的幅度就要更大,从而使训练更快收敛。然而,如果使用二次代价函数训练ANN,看到的实际效果是,如果误差越大,参数调整的幅度可能更小,训练更缓慢。

以一个神经元的二类分类训练为例,进行两次实验(ANN常用的激活函数为sigmoid函数,该实验也采用该函数):输入一个相同的样本数据x=1.0(该样本对应的实际分类y=0);两次实验各自随机初始化参数,从而在各自的第一次前向传播后得到不同的输出值,形成不同的代价(误差):

实验1:第一次输出值为0.82

实验2:第一次输出值为0.98

在实验1中,随机初始化参数,使得第一次输出值为0.82(该样本对应的实际值为0);经过300次迭代训练后,输出值由0.82降到0.09,逼近实际值。而在实验2中,第一次输出值为0.98,同样经过300迭代训练,输出值只降到了0.20。

从两次实验的代价曲线中可以看出:实验1的代价随着训练次数增加而快速降低,但实验2的代价在一开始下降得非常缓慢;直观上看,初始的误差越大,收敛得越缓慢。

其实,误差大导致训练缓慢的原因在于使用了二次代价函数。二次代价函数的公式如下:

其中,C表示代价,x表示样本,y表示实际值,a表示输出值,n表示样本的总数。为简单起见,同样一个样本为例进行说明,此时二次代价函数为:

目前训练ANN最有效的算法是反向传播算法。简而言之,训练ANN就是通过反向传播代价,以减少代价为导向,调整参数。参数主要有:神经元之间的连接权重w,以及每个神经元本身的偏置b。调参的方式是采用梯度下降算法(Gradient descent),沿着梯度方向调整参数大小。w和b的梯度推导如下:

其中,z表示神经元的输入,表示激活函数。从以上公式可以看出,w和b的梯度跟激活函数的梯度成正比,激活函数的梯度越大,w和b的大小调整得越快,训练收敛得就越快。而神经网络常用的激活函数为sigmoid函数,该函数的曲线如下所示:

如图所示,实验2的初始输出值(0.98)对应的梯度明显小于实验1的输出值(0.82),因此实验2的参数梯度下降得比实验1慢。这就是初始的代价(误差)越大,导致训练越慢的原因。与我们的期望不符,即:不能像人一样,错误越大,改正的幅度越大,从而学习得越快。

可能有人会说,那就选择一个梯度不变化或变化不明显的激活函数不就解决问题了吗?图样图森破,那样虽然简单粗暴地解决了这个问题,但可能会引起其他更多更麻烦的问题。而且,类似sigmoid这样的函数(比如tanh函数)有很多优点,非常适合用来做激活函数,具体请自行google之。

2. 交叉熵代价函数

换个思路,我们不换激活函数,而是换掉二次代价函数,改用交叉熵代价函数:

其中,x表示样本,n表示样本的总数。那么,重新计算参数w的梯度:

其中(具体证明见附录):

因此,w的梯度公式中原来的被消掉了;另外,该梯度公式中的表示输出值与实际值之间的误差。所以,当误差越大,梯度就越大,参数w调整得越快,训练速度也就越快。同理可得,b的梯度为:

实际情况证明,交叉熵代价函数带来的训练效果往往比二次代价函数要好。

3. 交叉熵代价函数是如何产生的?

以偏置b的梯度计算为例,推导出交叉熵代价函数:

在第1小节中,由二次代价函数推导出来的b的梯度公式为:

为了消掉该公式中的,我们想找到一个代价函数使得:

即:

对两侧求积分,可得:

而这就是前面介绍的交叉熵代价函数。

附录:

sigmoid函数为:

可证:

交叉熵代价函数cross-entropy相关推荐

  1. TensorFlow 实战(一)—— 交叉熵(cross entropy)的定义

    对多分类问题(multi-class),通常使用 cross-entropy 作为 loss function.cross entropy 最早是信息论(information theory)中的概念 ...

  2. 关于交叉熵(Cross Entropy)与Softmax

    目录 写在前面 KL散度 交叉熵 Softmax 交叉熵与Softmax的关系 交叉熵损失 Softmax的求导 堆叠+向量化 其他关于Softmax函数的问题 赠品 写在前面 Softmax.交叉熵 ...

  3. pytorch:交叉熵(cross entropy)

    1.entropy entropy中文叫做熵,也叫不确定性,某种程度上也叫惊喜度(measure of surprise) = 如果p(x)采用0-1分部,那么entropy=1log1=0 而对于e ...

  4. 机器学习中使用的交叉熵(cross entropy)透彻分析

    从字面分析交叉熵,1是交叉.2是熵(熵与信息量有关):首先交叉熵涉及信息论里面的东西,想要彻底理解交叉熵就要明白此概念跟信息量的关系以及里边的熵怎么理解. (1)信息量 衡量信息量可以用大小或者多少来 ...

  5. Pytorch 手工复现交叉熵损失(Cross Entropy Loss)

    如果直接调包的话很简单,例子如下: import torch import torch.nn as nntorch.manual_seed(1234) ce_loss = nn.CrossEntrop ...

  6. 机器学习经典损失函数复习:交叉熵(Cross Entropy)和KL散度

    目录 1 交叉熵 2 KL散度 时间一长就忘记了,今天看见缩写CE,突然有点陌生,写个图文并茂的博客加深一下印象. 1 交叉熵 交叉熵,在机器学习中广泛用于衡量两个分布的相似度: 交叉熵一般跟在sof ...

  7. 【AI学习总结】均方误差(Mean Square Error,MSE)与交叉熵(Cross Entropy,CE)损失函数

    出发点 对于一个样本,有输入和输出结果,我们的目的是优化训练我们的模型,使得对于样本输入,模型的预测输出尽可能的接近真实输出结果.现在需要一个损失函数来评估预测输出与真实结果的差距. 均方误差 回归问 ...

  8. 机器学习基础(六)—— 交叉熵代价函数(cross-entropy error)

    交叉熵代价函数 1. 交叉熵理论 交叉熵与熵相对,如同协方差与方差. 熵考察的是单个的信息(分布)的期望: H(p)=−∑i=1np(xi)logp(xi) H(p)=-\sum_{i=1}^n p( ...

  9. python3 23.keras使用交叉熵代价函数进行MNIST数据集简单分类 学习笔记

    文章目录 前言 一.交叉熵代价函数简介 二.交叉熵代价函数使用 前言 计算机视觉系列之学习笔记主要是本人进行学习人工智能(计算机视觉方向)的代码整理.本系列所有代码是用python3编写,在平台Ana ...

  10. 为什么需要交叉熵代价函数

    为什么需要交叉熵代价函数 人类却能够根据明显的犯错快速地学习到正确的东西.相反,在我们的错误不是很好地定义的时候,学习的过程会变得更加缓慢.但神经网络却不一定如此,这种行为看起来和人类学习行为差异很大 ...

最新文章

  1. CSS样式表初始化代码
  2. c++吃豆人代码_山药豆的功效与作用营养功效
  3. 深入理解Kubelet核心执行框架
  4. Spring Boot——SpringMVC带URL前缀的静态资源解决方案
  5. 【并查集】【图论】【最小生成树】剑鱼行动(ssl 1618)
  6. html里空间顺序,按空间顺序写我的房间作文
  7. 前端学习(3124):react-hello-react之props的简写
  8. 【资讯】2017年最好的25大发明,你最钟爱哪个?
  9. java batch size_java – @BatchSize但在@ManyToOne案例中有很多往返
  10. 【干货】图文并茂生动详解命名实体识别NER理论与代码实战
  11. 一些iptables的具体应用
  12. OLED屏显和汉字点阵编码原理
  13. 基础版的音频功放电路(A类功放电路、B类功放电路、C类功放电路、D类功放电路、G类功放电路、H类功放电路、K类功放电路、T类功放电路)
  14. linux下这输入法切换大小写,Life With Arch:让Capslock成为输入法切换快捷键
  15. llvm-IR基础知识
  16. python单曲循环播放MP3
  17. blob导出文件及文件损坏处理
  18. pe系统如何读取手机_pe装系统,详细教您怎么在PE系统中重装系统
  19. 数据可视化、信息可视化与知识可视化
  20. 内忧外患中,黄章的梦想机难救魅族一世

热门文章

  1. patent sub categories
  2. wota dance
  3. 关于mbzuai的offer的三点思考
  4. ubuntu配置文件对照表
  5. 康托展开式---我排第几+逆康托展开
  6. 数据结构【图】—022邻接矩阵的深度和广度遍历
  7. 【NET CORE微服务一条龙应用】开始篇与目录
  8. spring boot actuator服务监控与管理
  9. 《Qt on Android核心编程》夹
  10. ROS学习之roslaunch的node标签