理解交叉熵损失(Cross-Entropy)

理解交叉熵损失

字符集编码

字符集编码的意义在于将数据集进行有效压缩。
假设在一个文档中只出现了a、b、c、d、e 5种字符,其占比如下表:

字符abcde
占比0.10.10.20.20.4

最容易想到的编码方式,5个字符,需要3个bit位,故:

字符abcde单个字符编码长度期望值
编码0000010100111003

但是这并不是最优的编码方式,例如:

字符abcde单个字符编码长度期望值
编码111111101101002.2

这种编码方式的特点就在于,占比高的字符编码长度尽可能短,同时要满足不能出现歧义的限制条件。
那么给定一个数据集之后,究竟每个字符编码是什么,编码应该多长呢?
给定字符集 X={x} , 满足 p(x) 的概率分布,设字符x的最优编码长度为 l(x) ,设 H(X) 为字符编码长度期望,则根据香农信息理论,最优编码情况下有以下结论:

l(x)=log1p(x)

H(X)=xp(x)log1p(x)

字符集编码先介绍这么多,一会儿会用到。

相对熵

相对熵是一种用来评价两种概率分布差异程度的方法。
给定字符集 X={x} ,你通过某种方法预测其概率分布为 q(x) ,但是其真实的概率分布为 p(x) ,那么怎么评价二者的差异呢?如何评价 q(x) 偏离真实分布 p(x) 的程度呢?
可以通过字符集编码长度与最优编码方案下的编码长度的差来度量。
最优编码方案下的字符编码长度为:

l(x)=log1p(x)

根据预测概率分布 q(x) 进行编码,字符编码长度为:
l(x)=log1q(x)

最优编码方案下字符编码长度期望为:
H(X)=xp(x)log1p(x)

根据预测概率分布 q(x) 进行编码,实际获得的编码长度期望为:
H(X)=xp(x)log1q(x)

很显然:
H(X)>H(X)

因为最优编码是编码长度期望最短的;
定义:
DKL(P||Q)=H(X)H(X)

可得:
DKL(P||Q)=xp(x)log(p(x))xp(x)log(q(x))

DKL(P||Q) 就是相对熵,从公式可以看出,相对熵是不对称的。

交叉熵

交叉熵是从相对熵而来的。
在机器学习领域,多分类问题很常见,在很多深度学习模型当中,网络的输出层就是一个 softmax 层,对于 N 分类问题,输出是一个N维的向量,向量元素介于 [0,1] 之间,且元素累加和为1(这是 softmax 性质所决定的);
softmax 层输出向量视为预测类别的概率分布 q(x) ,用真实类别标签构造真实的类别概率分布 p(x) (例如,令真实类别概率为1,其余类别概率为0),那么相对熵 DKL(P||Q) 就可以评价预测结果 q(x) 的好坏了,我们只需要最小化它就好了。
既然可以用相对熵作为代价函数,那为什么还要引出交叉熵?
因为在 DKL(P||Q) 的公式中:

DKL(P||Q)=xp(x)log(p(x))xp(x)log(q(x))

xp(x)log(p(x)) 不涉及预测结果 q(x) ,是一个常数项,可以把这一项去掉简化模型。
于是只剩下:
xp(x)logq(x)

其实就是:
H(X)=xp(x)log1q(x)

也就是说,交叉熵等于基于预测概率分布 q(x) 对符合 p(x) 分布的字符集进行编码之后的平均字符编码长度,通过最小化交叉熵可以使 q(x) 逼近真实分布 p(x) ,也就使得预测模型更优。

延伸

既然是让预测概率分布 q(x) 逼近真实概率分布 p(x) ,你可能马上就想到,直接让代价函数等于 (q(x)p(x))2 不就好了,为什么搞得这么复杂?
因为二次代价函数有一个缺点,而交叉熵损失代价函数没有,请看传送门

说明

如有错误,敬请指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值