神经网络与深度学习 笔记4 交叉熵代价函数 softmax函数

来源:互联网 发布:java base64编码解码 编辑:程序博客网 时间:2024/05/22 12:58

1. 学习缓慢问题


二次代价函数,定义如下

其中 a 是神经元的输出,训练输入为 x = 1,y = 0 则是目标输出。显式地使用权重和偏置来表达这个,我们有 a = σ(z),其中 z = wx + b。使用链式法则来求权重和偏置的偏导数就有:


σ 函数图像:

我们可以从这幅图看出,当神经元的输出接近 1 的时候,曲线变得相当平,所以 σ ′ (z) 就很小了。∂C/∂w 和 ∂C/∂b 会非常小,这其实就是学习缓慢的原因所在


2. 引入交叉熵代价函数


定义交叉熵代价函数:

其中 n 是训练数据的总数,求和是在所有的训练输入 x 上进行的,y 是对应的目标输出。

将交叉熵看做是代价函数有两点原因,交叉熵是非负的,在神经元达到很好的正确率的时候会接近 0。


计算交叉熵函数关于权重的偏导数。将 a = σ(z) 代入到 上式 中应用两次链式法则,得到:

将结果合并一下,简化成:

根据 σ(z) = 1/(1 + e −z ) 的定义,和一些运算,我们可以得到 σ ′ (z) = σ(z)(1 − σ(z)),上下两项约去:

这个公式告诉我们权重学习的速度受到 σ(z) − y,也就是输出中的误差的控制。更大的误差,更快的学习速度。


另一种解决学习缓慢的问题的方法

3. 基于柔性最大值(softmax)神经元层

柔性最大值的想法其实就是为神经网络定义一种新式的输出层。首先计算带权输入zLj=kwLjkaL1k+bLj。在zLj上应用softmax函数,第 j 个神经元的激活值aLj就是:

其中,分母中的求和是在所有的输出神经元上进行的。

学习缓慢问题:

先定义一个对数似然(log-likelihood)代价函数,使用 x 表示网络的训练输入,y 表示对应的目标输出:

 

学习缓慢的关键就是量C/wLjkC/bLj 的变化情况

????????????????????????????

???????????????????????????


把一个具有对数似然代价的柔性最大值输出层,看作与一个具有交叉熵代价的 S 型输出层非常相似