熵,交叉熵和损失函数,在机器学习中,这些概念容易让人迷糊,基于现有的理解,简要做一下总结供参考,以后理解深刻了,在进行拓展。
熵
熵作为一种测量信息量的一个度量,可以用意外程度的期望值来定义,其反应了系统的有序化程度。
假设一个事件发生的概率为p,则得知该消息的意外程度 log2(1p)
这个事件发生的概率越大,意外程度越小,包含的信息也越小。若一件事必然发生,概率为1,则意外程度为0,信息量为0.
假设对于一个不均匀的色子,其离散随机变量X可能取值 X={x1,x2,...,x6} ,每个取值发生的概率 p(X=xi) ,记为 pi , pi 可称为意外程度,意外程度是一个随机变量,那么意外程度随机变量的期望值定义为:
H=−∑i=1np(xi)logp(xi)=∑i6pi∗(得知该点数的是意外程度)=∑i6pi∗log(1/pi)
期望值H即是熵,或称香浓信息量,值越大,不确定度越大。
对于只有两种结果的一个事件,比如投不均匀的硬币,正面朝上为p,则熵可得:
H=−plog(1−p)−(1−p)log(p)
对H求导,当p=1/2时,熵H最大,无序度越大,不确定度越大,整个集合包含的信息量也越大。
在用比特来度量时:
若投硬币正面朝上,p=1/2,则log(2)=1,只需1bit就可表示两种结果
若投色子点数为1, p=1/6, 则log(6)=2.6,只需2.6bit就可表示六种结果。
换种角度来理解,给定一个分布p(x), 随机变量x来自p的分布,其可以用-log(p(x)) bit来编码。
则对于x这个随机变量来自p的所有取值,需要的编码bit数目为
H(p)=Ex∼p[−log(p(x))]=−∑xp(x)log(p(x))
然而如果这个随机变量x取自一个分布q,但其实际上属于p分布, 则实际需要的编码bit数目为
H(p)=Ex∼p[−log(q(x))]=−∑xp(x)log(q(x))
交叉熵
针对同一个事件,分别用两个概率分布p(代表真实概率)和q(代表模型概率)来度量信息量。交叉熵定义为:
H(p,q)=Ep[1/log(q)]=−∑xp(x)log(q(x))=H(p)+DKL(p||q)
其可用来度量p(假定为给定标签), q(假定为预测值)的相似程度,
H(p)值固定时, 此时H(p,q)等价于
DKL(p||q)
DKL(p||q)=∑i[plog(pq)]
表示用q来逼近p时信息的损失程度(可以理解为距离,但并不是真正的距离
D(p||q)≠D(q||p) ), q=0时, p必须为0, p=q时,损失最小
损失函数
交叉熵在机器学习中,一般用来定义损失函数,当这个事件只有两种结果p={y,1-y}, q=y˙,1−y˙ ,交叉熵:
H(p,q)=−sum1ipilog(qi)=−ylog(y˙))−(1−y)log(1−y˙)
则对应于logistic regression的损失函数(计算所有样本
m个的交叉熵平均值)为:
H(p,q)=−1m∑i=1m∑j=01H(pj,qj)=−1m∑im[yilog(y˙i)+(1−yi)log(1−y˙i)]=1m⎡⎣∑i=1m∑(j=1)1log[pi=j|xi;θ]⎤⎦
其中,
y˙i=p(yi=j|xi;θ)=h(xi;θ) ,代表一个样本输出概率值
交叉熵为正数>0, 当实际输出
y˙i 靠近期望的输出
yi 时,交叉熵靠近0.
将其拓展到softmax损失函数的定义为:
J(θ)=−1m∑i=1m∑j=1k1{yi=j}logeθTjxi∑kl=1eθTlxi+λ2∑i=1k∑j=0nθij=−1m∑i=1m∑j=1k1{yi=j}log[p(yi=j)|xi;θ]+λ2∑i=1k∑j=0nθij
∇θjJ(θ)=−1m∑i=1m[xi(1{yi=j})−p(yi=j|xi;θ)]+λθj
交叉熵代价函数的引入,主要是为了弥补二次代价函数的不足,二次代价函数权值和偏置更新需要乘以激活函数的偏导项,而sigmoid函数很容易饱和,饱和时,其偏导数趋向于0,从而导致权值和偏置更新缓慢甚至不跟新,交叉函数其梯度中没有了偏导数,其权值更新速度会更快。