在常规的多分类任务中,我们通常使用全连接层将特征通道映射至类别数目,获得每个类别的分数,使用 softmax 获得各类别的概率,以交叉熵作为损失函数优化模型。本文将会简单介绍一下 softmax 和交叉熵函数:
softmax
yi=∑k=1nezkezi
这样的形式使得 softmax 能将输入的分布映射到 [0,1] 之间,一方面 softmax 拉大了输入值之间的差距,因为我们希望模型能够为正确的类别分配更大的概率,而线性归一化的方法难以达到这种效果;另一方面 softmax 与交叉熵函数相结合较为光滑,并且其梯度求解也更为简单。
交叉熵
说起交叉熵就不得不谈到概率论里的最大似然估计了,最大似然估计用于样本分布已知时来估计原分布的参数,在这里,我们可以求解模型的参数,回顾一下概率论中的求解步骤:
- 写出似然函数
- 取对数
- 求导数
- 解方程
似然函数定义如下:
L(θ∣x)=P(x∣θ)=P(x1,x2,⋯,xn∣θ)=i=1∏np(xi∣θ)
P 即是样本的概率,带入取对数
logi=1∏nxi=log(x1⋅x2⋯⋅xn)=log(x1)+log(x2)+...+log(xn)=j=1∑nlog(xi)
这样看并不直观,比如已知 10 个球中有 6 个为白球,4 个为黑球,假设原分布服从参数为 p 的伯努利分布,p 为白球的概率我们可以得到似然函数为:
L=p6∗(1−p)4(1)
log(L)=6log(p)+4log(1−p)(2)
求导很容易解出来 p=0.6,那么最大似然和交叉熵有什么关系呢?
我们将公式 2 两边同除以 N=10,即样本的总数:
Nlog(L)=N6log(p)+N4log(1−p)let N6=q,N4=1−pNlog(L)=plog(p)+(1−p)log(1−p)
由于梯度下降需要最小化损失函数,将上式取负便得到了二元交叉熵损失函数,多元的也是同理:
CE=−∑qilog(pi)
另一方面,交叉熵也是一种熵,熵是信息论中的概念,能够描述信息的冗余,定义如下是:
Entropy=−∑qilog(qi)
其实两者十分相似,其中 p 为样本的概率,q 为真实的概率(在实际训练中 q 为 one-hot 或者 smooth 的标签),交叉熵的目的是为了是的p 尽可能的接近 q,当二者足够接近时,我们便可以得到熵,这样一来,我们也能从信息论的角度了解交叉熵。
顺便一提 KL 散度其实就是交叉熵减去熵,所以 KL 散度也叫相对熵。
梯度求解
在概率论中我们可以直接解出分布的参数,但是对于网络的中的这么多参数我们如何求解呢?
我们使用梯度下降法进行逼近,梯度下降的首要前提便是求解梯度。
softmax+ 交叉熵复合之后的导函 数形式也是十分简单,接下来求解 loss 关于输入 z 的梯度。
先求 softmax 的梯度,需要分成两种情况 i=j 和 i=j,由高中学过的求导法则和大学学过的偏导法则可得
相等时:
∂zi∂ai=∂zi∂(∑kezkezi)=(∑kezk)2∑kezkezi−(ezi)2=(∑k=1nezkezi)(1−∑kezkezi)=ai(1−ai)
不相等时:
∂zi∂aj=∂zi∂(∑kezkezj)=(∑kezk)2−ezjezi=−aiaj
对于交叉熵函数:
∂aj∂Li=−yjaj1
根据链式法则;
∂zi∂L=j∑(∂aj∂Lj∂zi∂aj)=j=i∑a(∂aj∂Lj∂zi∂aj)+j=i∑(∂aj∂Lj∂zi∂aj)=j=i∑aiyj+(−yi(1−ai))=aij∑yj−yi
对于 one-hot 向量的标签,我们可以将其化简为
∂zi∂L=ai−yi