分类模型为什么使用交叉熵作为损失函数

推导过程

让推理更有体感,进行下面假设:

  1. 假设要对进行图片识别分类
  2. 假设模型输出yyy,是一个几率,表示是猫的概率

训练资料如下:

xnx^nxn类别y^n\widehat{y}^nyn
x1x^1x11
x2x^2x21
x3x^3x30

注:x1x^1x1是第一组训练资料它是属于猫,因为我们使用one-hot来表示目标类别,所以y^in\widehat{y}^n_iyin要么等于0,要么等于1

损失函数怎么定义比较好?我们优先想到的是判断结果是否和真实值相等

Loss=[f(x1)≠y^1]+[f(x2)≠y^2]+[f(x3)≠y^3]Loss=[f(x^1) \neq \widehat{y}^1]+[f(x^2) \neq \widehat{y}^2]+[f(x^3) \neq \widehat{y}^3]Loss=[f(x1)=y1]+[f(x2)=y2]+[f(x3)=y3]
f(xn)={1,yn>0.50,yn<=0.5f(x^n)= \begin{dcases} 1 , y^n > 0.5 \\ 0 ,y^n <=0.5 \end{dcases}f(xn)={1yn>0.50yn<=0.5
只需要找到 w∗,b∗=arg⁡minw,bL(w,b)w^*,b^*=\arg\underset{w,b}{min}L(w,b)w,b=argw,bminL(w,b) 使得Loss最小即可
但是上面的f(xn)f(x^n)f(xn)无法进行微分,不能计算梯度

所以重新寻找Loss函数:
Loss=f(x1)+f(x2)+(1−f(x3))=y1+y2+(1−y3)Loss=f(x^1)+f(x^2)+(1-f(x^3))= y^1+y^2+(1-y^3)Loss=f(x1)+f(x2)+(1f(x3))=y1+y2+(1y3)
Loss越大说明和训练集越相似,效果越好,我们希望找到一个 w∗,b∗=arg⁡maxw,bL(w,b)w^*,b^*=\arg\underset{w,b}{max}L(w,b)w,b=argw,bmaxL(w,b) 使得Loss最大

但是Loss多大算大?我们还是希望找到一个最小Loss,最好趋近于0
所以对Loss再次变形,对Loss加一个 负lnlnln,我们就可以求Loss的最小值了
w∗,b∗=arg⁡maxw,bL(w,b)=arg⁡minw,b−lnL(w,b)w^*,b^*=\arg\underset{w,b}{max}L(w,b)=\arg\underset{w,b}{min}-lnL(w,b)w,b=argw,bmaxL(w,b)=argw,bminlnL(w,b)

推导:
Loss=−[lnf(x1)+lnf(x2)+(1−lnf(x3))]Loss=-[lnf(x^1)+lnf(x^2)+(1-lnf(x^3))]Loss=[lnf(x1)+lnf(x2)+(1lnf(x3))]

因为y^in\widehat{y}^n_iyin要么等于0,要么等于1,所以可得:{lnf(xn)=y^nlnf(xn)+(1−y^n)ln(1−lnf(xn))1−lnf(xn)=y^nlnf(xn)+(1−y^n)ln(1−lnf(xn))\begin{dcases} lnf(x^n)=\widehat{y}^nlnf(x^n)+(1-\widehat{y}^n)ln(1-lnf(x^n)) \\ 1-lnf(x^n)=\widehat{y}^nlnf(x^n)+(1-\widehat{y}^n)ln(1-lnf(x^n)) \end{dcases}{lnf(xn)=ynlnf(xn)+(1yn)ln(1lnf(xn))1lnf(xn)=ynlnf(xn)+(1yn)ln(1lnf(xn))

=−[y^1lnf(x1)+(1−y^1)ln(1−lnf(x1))+y^2lnf(x2)+(1−y^2)ln(1−lnf(x2))+y^3lnf(x3)+(1−y^3)ln(1−lnf(x3))]=-[\widehat{y}^1lnf(x^1)+(1-\widehat{y}^1)ln(1-lnf(x^1))+\widehat{y}^2lnf(x^2)+(1-\widehat{y}^2)ln(1-lnf(x^2))+\widehat{y}^3lnf(x^3)+(1-\widehat{y}^3)ln(1-lnf(x^3))]=[y1lnf(x1)+(1y1)ln(1lnf(x1))+y2lnf(x2)+(1y2)ln(1lnf(x2))+y3lnf(x3)+(1y3)ln(1lnf(x3))]

=−∑[y^nlnf(xn)+(1−y^n)ln(1−lnf(xn))]=-\sum[\widehat{y}^nlnf(x^n)+(1-\widehat{y}^n)ln(1-lnf(x^n))]=[ynlnf(xn)+(1yn)ln(1lnf(xn))]

设:p(x)p(x)p(x)为二项分布,其中p(1)=y^np(1)=\widehat{y}^np(1)=ynp(0)=1−y^np(0)=1-\widehat{y}^np(0)=1yn
设:q(x)q(x)q(x)为二项分布,其中q(1)=f(xn)q(1)=f(x^n)q(1)=f(xn)q(0)=1−f(xn)q(0)=1-f(x^n)q(0)=1f(xn)
=−∑i=1Np(x)ln(q(x))=-\displaystyle\sum_{i=1}^Np(x)ln(q(x))=i=1Np(x)ln(q(x))
=∑i=1Np(x)ln(1q(x))=\displaystyle\sum_{i=1}^Np(x)ln(\frac{1}{q(x)})=i=1Np(x)ln(q(x)1)

**交叉熵(cross entropy)**的数学公式如下:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9dcfc80e77e349bdb2f256cbb4097b49.png

  • 如果我们把模型输出和真实值看做是一个二项分布的话,那么Loss的最终定义就是这两个二项分布越接近越好

交叉熵可在神经网络中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。交叉熵作为损失函数还有一个好处是使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。

问题

为什么不使用平均方差作为Loss函数呢?

  1. 假设Loss=12∑(f(xn)−y^n)2Loss=\frac{1}{2}\sum(f(x^n)-\widehat{y}^n)^2Loss=21(f(xn)yn)2
  2. 假设用的是sigmoid函数

求导之后:
在这里插入图片描述
注:f(x)f(x)f(x)的导数是f(x)(1−f(x))f(x)(1-f(x))f(x)(1f(x))
对于红色字体中的式子来说:
当y=1,f(x) = 1的时候,gradient=0,那么暂停训练是合理的
但y=1,f(x) = 0,这个时候和实际值有差距,应该继续训练,但gradient=0了
在这里插入图片描述

分类如果超过2维怎么办?

如果还是使用one-hot来表示目标类别,那么输出变为了多个,经过softmax函数之后都是0~1之间的数,把它看做是概率,可以理解成N个二项式概率分布的相似度求和,但实际上是N项分布,计算一次交叉熵即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值