码迷,mamicode.com
首页 > 其他好文 > 详细

交叉熵误差函数

时间:2020-05-01 20:54:26      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:输入   spl   计算公式   归一化   sse   get   编码   形式   如何   

机器学习中的交叉熵

交叉熵的定义

概率分布p和q的交叉熵定义为:

\[{\displaystyle \mathrm {H} (p,q)=\operatorname {E} _{p}[-\log(q)]=\mathrm {H} (p)+D_{\text{KL}}(p\parallel q)} \]

可以看到,交叉熵可以拆解为两部分的和,也就是P的熵加上p与q之间的KL距离,对于一个已知的分布p,它的熵:

\[{H(p)} \]

是一个已知的常数,所以在这种情况下,使用交叉熵等价于使用KL距离,而且由于交叉熵的计算更简洁,所以在机器学习中,通常使用交叉熵作为分类问题的误差函数。

如何计算

假设一个三分类问题,通过前向计算,最终会将输入映射到一个3维的向量上,假设得到的是:

\[\begin{bmatrix} 1 \\ 200 \\ 3\\ \end{bmatrix} \]

如果这个图片带有的标签是1,也就是第一类,如下所示:

\[\begin{bmatrix} 0 \\ 1 \\0 \end{bmatrix} \]

那么如何度量这种损失呢,需要使用交叉熵,但是交叉熵使用的条件是,p与q都是概率分布,现在只有p,也就是target是概率分布的形式,为了让q也变成概率分布的形式,使用softmax将其归一化,得到概率分布,然后再计算;

\[\sigma (\mathbf {z} )_{i}={\frac {e^{z_{i}}}{\sum _{j=1}^{K}e^{z_{j}}}} \]

归一化之后的q如下:

\[\begin{bmatrix} 3.7e ^{-87} \\ 1 \\ 2.7e^{-86}\\ \end{bmatrix} \]

根据交叉熵计算公式得到:0

交叉熵的结果总是大于等于0的,越接近0,说明两个概率分布之间越接近,所以这里可以认为是分类正确。

在pytorch中,不需要手动进行这种计算,也不需要手动对标签进行onehot编码,CrossEntropyLoss会自动进行这些操作,forward函数接收连个参数:input和target,input函数要满足 [b * c],target函数要是[b],也就是只要给出标签的序号即可。

交叉熵误差函数

标签:输入   spl   计算公式   归一化   sse   get   编码   形式   如何   

原文地址:https://www.cnblogs.com/yhxcs/p/12814270.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!