神经网络与深度学习读书笔记第五天----交叉熵代价函数入门
来源:互联网 发布:无线连接投影仪软件 编辑:程序博客网 时间:2024/06/05 09:58
书本来源
这两天骑车不小心把一颗门牙整个磕断了。心情十分不好,书也没怎么看……证明和代码部分随便翻了翻。真是烦死了,自己怎么这么不小心……北京看牙齿真贵,一颗镶牙要好几千,一颗种植牙2w…然后老师又分配了嵌入式系统相关的任务,以后又要开始重拾嵌入式部分,这次好像是写sylixos的网络驱动,原来还没写过底层的网络驱动,又不知道要学习多久,有点紧张也有点期待,更多的是无从下手。
今天继续看书,第三章,第一节交叉熵代价函数(cross- entropy cost function)
1.引入代价熵函数:学习速度为什么会慢
作者假设了这么一个学习任务:
训练这个神经元做一个很简单的事情,让输入1转化为0。为了让例子更加明确,作者让权重偏置初始化为0.6和0.9,这个时候的输出sigma(z)= 0.82。
设置学习速率n=0.15进行学习一方面足够慢的跟随学习过程,另一方面也保证学习的时间不久。代价函数是我们在第一章用到的二次函数,C。
随着迭代期的增加,神经元的输出、权重、偏置和代价的变化如下面一系列图形所示(此处强烈建议去感受下动态过程):
然后,作者给出了一个权重和偏置设置都为2,初始输出为0.98的一个学习过程:
这次的可以看出,开始的时候算法学习比较缓慢,在学习速率都为0.15的情况下,为什么一个学习快一个学习慢呢?
实际上我们的学习速率(梯度下降的速度)还取决于代价函数的偏导数,当我们说学习速率较为缓慢的时候(即下降缓慢),实际上是在说这个偏导数比较小。二次函数的之前是用的这个:
其中a是神经元的输出,训练输入x=1,y=0是输出目标。显式的使用权重和偏置来表达这个,我们有a=sigma(z),其中z=wx+b。使用链式法则来求权重和偏置的偏导数就有:
这是已经将y=0,x=1带入过后的式子。
我们回忆下之前看过的sigma函数(sigmoid):
可以看到在神经元输出sigma(z)接近于1的时候,曲线接近于平缓,即会接近于0,所以下降速度会变得缓慢,所以在输出接近1的情况下学习速度会变得很慢。
2.引入交叉熵代价函数
如何解决上面说的问题?使用交叉熵代价函数来代替二次代价函数。
假设现在的学习任务变成:
神经元输出a=sigma(z),其中是输入的带权和,我们定义这个神经元的交叉熵代价函数如下:
其中n是训练数据的总数。
可以较为容易的看出两点:
1.C肯定是非负数,因为求和的所有的独立项都是负数(当对数函数定义域在0,1之间时),外加前面有个负号
2.当神经元实际输出a接近于y时,即y≈a时,C趋近于0;这是我们想要的结果
接下来可以算算交叉熵关于权重的偏导数。我们将a=sigma(z)带入,应用链式求导法则可以得到:
合并简化可得:
根据sigma(z)=1/1+exp(-z)可以证得:
所以在60中可以约去一部分,可以得:
同理可得到关于偏置b的表达式:
可以看到这两个权重和偏置的偏导都跟无关,因此可以用来解决之前说的偏导导致的学习缓慢的问题。
其中,中括号内的部分又叫做二元熵。
应用到多层神经网络:
0 0
- 神经网络与深度学习读书笔记第五天----交叉熵代价函数入门
- 神经网络与深度学习 笔记4 交叉熵代价函数 softmax函数
- 神经网络与深度学习笔记(四)为什么用交叉熵代替二次代价函数
- 深度学习笔记---交叉熵代价函数
- 神经网络与深度学习第一天读书笔记
- 深度学习用到的代价函数------交叉熵
- 神经网络中交叉熵代价函数 求导
- 深度学习框架TensorFlow学习与应用(三)——使用交叉熵作为代价函数
- 读书笔记《神经网络与深度学习》
- 【神经网络与深度学习】读书笔记
- 在神经网络中使用交叉熵代价函数
- 交叉熵代价函数
- 交叉熵代价函数
- 交叉熵代价函数
- 交叉熵代价函数
- 交叉熵代价函数
- 交叉熵代价函数
- 交叉熵代价函数
- priority_queue使用方法【优先队列】
- Linux Core 文件在系统排障中的应用
- mysql远程登录
- hdu2577一道很不错的DP
- Java JVM:内存溢出问题
- 神经网络与深度学习读书笔记第五天----交叉熵代价函数入门
- svn 命令行下常用的几个命令
- c++ 创建和使用动态链接库 DLL
- java虚拟机-垃圾收集器
- c语言版贪吃蛇
- 控件包含代码块(即 <% ... %>),因此无法修改控件集合。
- 用Cognos Maps展现和地域相关的数据
- Android之JSON格式数据解析
- 看JavaScript面向对象编程指南电子书笔记之-alert,prompt,confirm用法总结