最大分类
为什么要在softmax中使用交叉熵这个问题困扰了我很久,但这两篇博文完美地回答了我的疑问。
对交叉熵、相对熵和负对数似然的理解——最伟大的dreamer-https://zhuanlan.zhihu.com/p/268171298,之虎的文章
库尔巴克-莱布勒散度-灰色Articles-https://zhuanlan.zhihu.com/p/100676922,知乎简介
KL散度
KL散度是原始分布和近似分布(即学习分布)之间差异的度量。如果差异较大,则意味着学习到的近似分布不太拟合。
\[d _ { KL }(p \ parallel q)=\sum_{i=1}^n p _ I(log(p _ I)-log(q _ I))\ \
S(P)=\sum_{i=1}^K p_i\log p_i\\
交叉熵=-\sum_{i=1}^K p_i \log q_i \\
交叉熵(y_{true},y _ { pred })=-\sum_{i=1}^k y _ { true }(I)\ log y _ { pred }(I)\
\】可以看出,KL散度实际上是实际分布的熵s,加上预测分布和实际分布的交叉熵,机器学习的目的是最小化KL散度,因为KL散度越小,两个分布越接近,这意味着我们从学习中得到的分布越接近实际分布。
对数似然
假设我们观察了一系列样本,包括A情况下的A,B情况下的B,c情况下的c,我们的目标是什么?找出一组分布(p(a) p(b) p(c))使这种状态的概率最高。
因为机器学习是一种分布。
那么我们的目标是最大化
对数是\(a\log p(a) b\log p(b) c \log p(c)\)
其实我们会这样表达:\(\ sum _ { I=1 } n _ I \ log p _ I \)
我们的目标是最大化这个似然函数。在某些情况下,它有一个解决方案。比如在前面的概率论中,我们取导数求极值点,然后得到分布函数。但是在机器学习中,我们通过学习得到分布,没有精确的函数。
还记得之前的交叉熵吗?
对数似然\(\ sum _ { I=1 } n n _ I \ log p _ I \)可以除以\(\ sum _ { I=1 } n n _ I \),因为这个值是一个常数,那么你得到3360。
\(\sum_{i=1}^n p _ { true }(I)\ log p _ { pred }(I)\)
哇哦!
这不就是之前交叉熵的负数吗?
因此,从另一个角度来考虑对数似然性,最大化对数似然性实际上就是最小化KL散度,因为我们的目标是找到一组最接近真实分布的预测分布。
在这一点上,我们得出结论,负对数似然是交叉熵。
为什么我们可以用交叉熵来作为损失函数
在之前的KL散度中,有——个具有两个分量的自熵S和交叉熵。
在深度学习分类中,我们使用一组onehot向量,(0,0,0,1,0,0)作为标签,这意味着$ p _ j=1 \ quad和\ quad p _ {I | I \ neq j}=0 $,所以,\ s(p(交叉熵=-\sum_{i=1}^k p _ I \ log q _ I=-p _ j \ log q _ j=-\ log q _ j \)
这个交叉熵与前面提到的负对数似然一致。
这就是为什么交叉熵可以用作损失函数。
SoftMax 梯度下降
等着填坑.
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/77292.html