交叉熵代价函数定义及其求导推导(读书笔记)

简介: 目的:为了解决学习缓慢的问题神经元的输出就是 a = σ(z),其中z=∑wjij+bz=\sum w_{j}i_{j}+b是输⼊的带权和。

目的:为了解决学习缓慢的问题


神经元的输出就是 a = σ(z),其中z=wjij+b是输⼊的带权和。

C=1n[ylna+(1y)ln(1a)]

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

表达式是否解决学习缓慢的问题并不明显。实际上,甚⾄将这个定义看做是代价函数也不是显⽽易⻅的!在解决学习缓慢前,我们来看看交叉熵为何能够解释成⼀个代价函数。

将交叉熵看做是代价函数有两点原因。

第⼀,它是⾮负的, C > 0。可以看出:式子中的求和中的所有独⽴的项都是负数的,因为对数函数的定义域是 (0,1),并且求和前⾯有⼀个负号,所以结果是非负。

第⼆,如果对于所有的训练输⼊ x,神经元实际的输出接近⽬标值,那么交叉熵将接近 0。

假设在这个例⼦中, y = 0 ⽽ a ≈ 0。这是我们想到得到的结果。我们看到公式中第⼀个项就消去了,因为 y = 0,⽽第⼆项实际上就是 − ln(1 − a) ≈ 0。反之, y = 1 ⽽ a ≈ 1。所以在实际输出和⽬标输出之间的差距越⼩,最终的交叉熵的值就越低了。(这里假设输出结果不是0,就是1,实际分类也是这样的)

综上所述,交叉熵是⾮负的,在神经元达到很好的正确率的时候会接近 0。这些其实就是我们想要的代价函数的特性。其实这些特性也是⼆次代价函数具备的。所以,交叉熵就是很好的选择了。但是交叉熵代价函数有⼀个⽐⼆次代价函数更好的特性就是它避免了学习速度下降的问题。为了弄清楚这个情况,我们来算算交叉熵函数关于权重的偏导数。我们将a=ς(z)代⼊到 公式中应⽤两次链式法则,得到:

Cwj=====1nwj[ylna+(1y)ln(1a)]1na[ylna+(1y)ln(1a)]awj1n(ya1y1a)awj1n(yς(z)1y1ς(z))ς(z)wj1n(yς(z)1y1ς(z))ς(z)xj

根据ς(z)=11+ez 的定义,和⼀些运算,我们可以得到 ς(z)=ς(z)(1ς(z))。化简后可得:

Cwj=1nxj(ς(z)y)

这是⼀个优美的公式。它告诉我们权重学习的速度受到ς(z)y,也就是输出中的误差的控制。更⼤的误差,更快的学习速度。这是我们直觉上期待的结果。特别地,这个代价函数还避免了像在⼆次代价函数中类似⽅程中ς(z)导致的学习缓慢。当我们使⽤交叉熵的时候,ς(z)被约掉了,所以我们不再需要关⼼它是不是变得很⼩。这种约除就是交叉熵带来的特效。实际上,这也并不是⾮常奇迹的事情。我们在后⾯可以看到,交叉熵其实只是满⾜这种特性的⼀种选择罢了。

根据类似的⽅法,我们可以计算出关于偏置的偏导数。我这⾥不再给出详细的过程,你可以轻易验证得到:

Cb=1n(ς(z)y)

再⼀次, 这避免了⼆次代价函数中类似ς(z)项导致的学习缓慢。

相关文章
|
7月前
|
机器学习/深度学习
为什么在二分类问题中使用交叉熵函数作为损失函数
为什么在二分类问题中使用交叉熵函数作为损失函数
208 2
|
5月前
|
机器学习/深度学习
交叉熵损失函数的使用目的(很肤浅的理解)
交叉熵损失函数的使用目的(很肤浅的理解)
|
7月前
|
机器学习/深度学习 JavaScript Python
熵、联合熵、相对熵、交叉熵、JS散度、互信息、条件熵
熵、联合熵、相对熵、交叉熵、JS散度、互信息、条件熵
99 1
21 高斯的推导(1809)
21 高斯的推导(1809)
42 0
“交叉熵”反向传播推导
“交叉熵”反向传播推导
137 0
|
机器学习/深度学习 自然语言处理 JavaScript
数学基础之——熵与散度的灵魂摆渡(解析大全)(一)
数学基础之——熵与散度的灵魂摆渡(解析大全)(一)
193 0
|
移动开发 JavaScript 算法
数学基础之——熵与散度的灵魂摆渡(解析大全)(二)
数学基础之——熵与散度的灵魂摆渡(解析大全)(二)
338 0
|
机器学习/深度学习
损失函数:均方误和交叉熵,激活函数的作用
损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。
187 1
损失函数:均方误和交叉熵,激活函数的作用
|
机器学习/深度学习 人工智能 JavaScript
【Pytorch神经网络理论篇】 21 信息熵与互信息:联合熵+条件熵+交叉熵+相对熵/KL散度/信息散度+JS散度
对抗神经网络(如DIM模型)及图神经网络(如DGI模型)中,使用互信息来作为无监督方式提取特征的方法。
909 0