当前位置: 首页 > news >正文

交叉熵代价函数——当我们用sigmoid函数作为神经元的激活函数时,最好使用交叉熵代价函数来替代方差代价函数,以避免训练过程太慢...

交叉熵代价函数

machine learning算法中用得很多的交叉熵代价函数。

1.从方差代价函数说起

代价函数经常用方差代价函数(即采用均方误差MSE),比如对于一个神经元(单输入单输出,sigmoid函数),定义其代价函数为:

其中y是我们期望的输出,a为神经元的实际输出【 a=σ(z), where z=wx+b 】。

在训练神经网络过程中,我们通过梯度下降算法来更新w和b,因此需要计算代价函数对w和b的导数:

然后更新w、b:

w <—— w - η* ∂C/∂w = w - η * a *σ′(z)

b <—— b - η* ∂C/∂b = b - η * a * σ′(z)

因为sigmoid函数的性质,导致σ′(z)在z取大部分值时会很小(如下图标出来的两端,几近于平坦),这样会使得w和b更新非常慢(因为η * a * σ′(z)这一项接近于0)。

2.交叉熵代价函数(cross-entropy cost function)

为了克服这个缺点,引入了交叉熵代价函数(下面的公式对应一个神经元,多输入单输出):

其中y为期望的输出,a为神经元实际输出【a=σ(z), where z=∑Wj*Xj+b】

与方差代价函数一样,交叉熵代价函数同样有两个性质

  • 非负性。(所以我们的目标就是最小化代价函数)
  • 当真实输出a与期望输出y接近的时候,代价函数接近于0.(比如y=0,a~0;y=1,a~1时,代价函数都接近0)。

另外,它可以克服方差代价函数更新权重过慢的问题。我们同样看看它的导数:

可以看到,导数中没有σ′(z)这一项,权重的更新是受σ(z)−y这一项影响,即受误差的影响。所以当误差大的时候,权重更新就快,当误差小的时候,权重的更新就慢。这是一个很好的性质。

3.总结

  • 当我们用sigmoid函数作为神经元的激活函数时,最好使用交叉熵代价函数来替代方差代价函数,以避免训练过程太慢。

  • 不过,你也许会问,为什么是交叉熵函数?导数中不带σ′(z)项的函数有无数种,怎么就想到用交叉熵函数?这自然是有来头的,更深入的讨论就不写了,少年请自行了解。

  • 另外,交叉熵函数的形式是−[ylna+(1−y)ln(1−a)]而不是 −[alny+(1−a)ln(1−y)],为什么?因为当期望输出的y=0时,lny没有意义;当期望y=1时,ln(1-y)没有意义。而因为a是sigmoid函数的实际输出,永远不会等于0或1,只会无限接近于0或者1,因此不存在这个问题。

4.还要说说:log-likelihood cost

对数似然函数也常用来作为softmax回归的代价函数,在上面的讨论中,我们最后一层(也就是输出)是通过sigmoid函数,因此采用了交叉熵代价函数。而深度学习中更普遍的做法是将softmax作为最后一层,此时常用的是代价函数是log-likelihood cost。

In fact, it’s useful to think of a softmax output layer with log-likelihood cost as being quite similar to a sigmoid output layer with cross-entropy cost。

其实这两者是一致的,logistic回归用的就是sigmoid函数,softmax回归是logistic回归的多类别推广。log-likelihood代价函数在二类别时就可以化简为交叉熵代价函数的形式。具体可以参考UFLDL教程


转载请注明出处:http://blog.csdn.net/u012162613/article/details/44239919

相关文章:

  • nxn随机矩阵乘以概率向量依旧是概率向量
  • Yii2 如何关闭debug
  • 渗透测试流程
  • MapReduce数据筛选
  • free()
  • 【转载】TCP协议要点和难点全解
  • 技术开发人员也得有点儿傍身的大数据技能!
  • odoo开发笔记--odoo可用小图标
  • mysql修改表、字段、库的字符集
  • node.js中的流
  • realm vs. domain
  • 如何生成安全的密码 Hash:MD5, SHA, PBKDF2, BCrypt 示例
  • 千兆级LTE的一小步,5G之路的一大步
  • AWS学习笔记(二)--CLI管理Image,Instance,Snapshot,S3
  • 关闭Spring Boot的Jsckson的FAIL_ON_EMPTY_BEANS
  • 07.Android之多媒体问题
  • 10个最佳ES6特性 ES7与ES8的特性
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • GraphQL学习过程应该是这样的
  • Java多线程(4):使用线程池执行定时任务
  • Less 日常用法
  • Logstash 参考指南(目录)
  • Odoo domain写法及运用
  • PAT A1050
  • 工作中总结前端开发流程--vue项目
  • 计算机在识别图像时“看到”了什么?
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 前端性能优化--懒加载和预加载
  • 前端学习笔记之观察者模式
  • 试着探索高并发下的系统架构面貌
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 线上 python http server profile 实践
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 在Mac OS X上安装 Ruby运行环境
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #if 1...#endif
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十五)使用Nexus创建Maven私服
  • (转)shell中括号的特殊用法 linux if多条件判断
  • *p++,*(p++),*++p,(*p)++区别?
  • .axf 转化 .bin文件 的方法
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net 提取注释生成API文档 帮助文档
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .net实现客户区延伸至至非客户区
  • .Net小白的大学四年,内含面经
  • ??myeclipse+tomcat
  • @private @protected @public
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——