从softmax到交叉熵再到softmax的反向梯度求解

交叉熵的来龙去脉

这个链接是一个很好的交叉熵的使用的连接,建议阅读前,先学习这一篇中的内容。
https://blog.csdn.net/tsyccnh/article/details/79163834

首先,我们要明了一下,什么是信息量,信息量一般用什么表示?
− l o g ( p ( x i ) ) -log(p(x_i)) log(p(xi))
其过程是将log进行了一个倒置。
p ( x i ) p(x_i) p(xi)越小,就越小,就越说明这个事情代表的意义越大,发生少的事情突然发生了,就能带来比较大的信息量。
用-log曲线,恰巧能将这个过程扭曲一下。


其次,信息熵是什么东西呢?
信息熵是当前这个变量的期望。
它的计算方式是 − p ( x i ) l o g ( p ( x i ) ) -p(x_i)log(p(x_i)) p(xi)log(p(xi))
当然 x i x_i xi不可能只有一个,那么就要考虑到求和问题: ∑ i n − p ( x i ) l o g ( p ( x i ) ) \sum^n_i-p(x_i)log(p(x_i)) inp(xi)log(p(xi))
之所以这样相加,是要解决所有信息熵的问题


最后,KL散度是什么东西呢?
KL散度是衡量在做什么呢?
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q) = \displaystyle\sum_{i=1}^np(x_{i})log(\frac{p(x_{i})}{q(x_{i})}) DKL(pq)=i=1np(xi)log(q(xi)p(xi))
其中 p ( x i ) p(x_i) p(xi)是真正的分布,而 q ( x i ) q(x_{i}) q(xi)可以理解问用算法学习出来的分布。
那么,在这个过程中,我们可以意识到,当分布越接近,就p/q越接近1,因而其值理论上也就越小。


接下来,可以对KL散度进行一个变形,那KL散度就发生了变形。
它会做什么呢?
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) − ∑ x i n p ( x i ) l o g ( q ( x i ) ) D_{KL}(p||q)=\displaystyle\sum^{n}_{i=1}p(x_i)log(p(x_i)) -\displaystyle\sum^{n}_{x_i}p(x_i)log(q(x_i)) DKL(pq)=i=1np(xi)log(p(xi))xinp(xi)log(q(xi))
这个时候,我们可以发现前半部分, ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) \displaystyle\sum^{n}_{i=1}p(x_i)log(p(x_i)) i=1np(xi)log(p(xi))其实就是熵。

由于对于原始分布来说,这部分的熵是肯定不变的,所以我们不再考虑这部分的信息。
而后者的信息就足为珍贵了,所以我们只要关注式子的后半部分就行。
∑ x i n p ( x i ) l o g ( q ( x i ) ) \displaystyle\sum^{n}_{x_i}p(x_i)log(q(x_i)) xinp(xi)log(q(xi))


在线型回归问题中,一般用 l o s s = 1 2 m ∑ i = 1 m ( y i − y ‾ ) 2 loss = \frac{1}{2m}\displaystyle\sum^{m}_{i=1}(y_i-\overline{y})^2 loss=2m1i=1m(yiy)2,也就是平均方差误差做loss.

那对于分类问题呢?
对于分类问题,其实只分为两类。
l o s s = − ∑ i = 1 n y i l o g ( y ^ i ) loss = - \sum^{n}_{i=1}y_ilog(\hat y_i) loss=i=1nyilog(y^i)
对于一个batch来说,,
l o s s = − 1 m ∑ j = 1 m ∑ i = 1 n y i j l o g ( y i j ^ ) loss = -\frac{1}{m} \sum_{j=1}^{m} \sum_{i=1}^{n}y_{ij} log( \hat {y_{ij}}) loss=m1j=1mi=1nyijlog(yij^)
其中m代表每个batch的数量,而n代表所有种类的数量。
其逻辑是,针对某一值,计算其关于所有种类的期望,希望这个值尽可能的小。


多分类中的交叉熵的使用

有的分类任务被叫做多分类,因为一张图片可能会归属于好几个类。
那个时候,其实pred已经不能通过softmax来计算了。
而是针对于每个label用pred来计算,再进行计算简化。

l o s s = − y l o g ( y ^ ) − ( 1 − y ) l o g ( l − y ^ ) loss = -ylog(\hat{y})-(1-y)log(l-\hat{y}) loss=ylog(y^)(1y)log(ly^)
这种情况只针对一一个logistic输出的类别,而最后还是要考虑到总共的数量和总共的batch的数量。


那么什么是softmax函数呢?
就是这个玩意儿。
在这里插入图片描述
其中softmax的用法就是 S i = e i ∑ j e j S_i=\frac{e^i}{\sum_je^j} Si=jejei
在这里插入图片描述
如上图所示,就是一个很普通的softmax的使用过程。


接下来进行softmax的反向梯度求导
这部分简易参考[手打例子,一步一步带你去softmax]中的softmax部分(https://www.jianshu.com/p/ffa51250ba2e)

假设经过logits后,进入了一个

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值