深度学习(二)损失函数--交叉熵与梯度计算

文章目录

  • 交叉熵
    • 相对熵
    • 交叉熵
      • 一个多分类的交叉熵问题
      • 多个二分类的交叉熵问题
  • 从极大似然看交叉熵
    • 极大似然估计推导交叉熵
      • 二分类
      • 多分类
  • 梯度

交叉熵

线性回归我们可以用均方误差(MSE),对于逻辑回归、神经网络而言,使用均方误差作为loss函数会产生很多局部最小值,会影响梯度下降算法寻找最小值,最常用的是交叉熵(cross-entropy)

交叉熵是个啥?首先我们来看下熵

熵可以理解为一个事件的信息量,比如下面两个事件:

  • 老婆,这月工资正常发,正常上交
  • 老婆,这月工资就发两百,没法上交了

这你老婆一听,第二个事件信息量很大啊,可以看出一个事件出乎意料,违反常理,那么信息量就很大,总结:事件发生概率越小,信息量越大
信息量表达式:
I ( x 0 ) = − l o g ( p ( x 0 ) ) I(x_0) = -log(p(x_0)) I(x0)=log(p(x0))
p ( x 0 ) p(x_0) p(x0)表示事件发生概率

当一个事件概率为1时,信息量为0;当概率接近0时,信息量无限大。
熵是衡量一个系统(所有事件)的不确定性,是所有事件的期望
H ( x ) = − ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) H(x) = -\sum_{i=1}^{n}p(x_i)log(p(x_i)) H(x)=i=1np(xi)log(p(xi))
以发工资事件为例

事件 可能性 信息量
正常发放 0.8 0.22
正常发放+奖励 0.15 1.9
公司倒闭,一分未发 0.05 3

按照公式计算的熵 H = 0.8 ∗ 0.22 + 0.15 ∗ 1.9 + 0.05 ∗ 3 H=0.8*0.22+0.15*1.9+0.05*3 H=0.80.22+0.151.9+0.053
比较特殊的是二分类问题
H ( x ) = − p ( x ) l o g ( p ( x ) ) − ( 1 − p ( x ) ) l o g ( 1 − p ( x ) ) H(x) = -p(x)log(p(x))-(1-p(x))log(1-p(x)) H(x)=p(x)log(p(x))(1p(x))log(1p(x))
两种事件发生的可能性和为1,所以另一个事件的信息量计算可以用当前事件概率表示

相对熵

在信息论中,相对熵D(P||Q)表示当用概率分布Q来拟合真实分布P时,产生的信息损耗(损耗越小,两个分布越接近),其中P表示真实分布,Q表示P的拟合分布。概率分布可以对应上面事件各情况的发生概率。机器学习领域的物理意义是用来度量两个函数的相似程度或者相近程度。

  • 离散随机变量的D(P||Q)公式:
    D K L ( P ∣ ∣ Q ) = ∑ i P ( i ) ∗ [ l o g ( P ( i ) Q ( i ) ) ] = ∑ i P ( i ) l o g ( P ( i ) ) − P ( i ) ∗ ( l o g ( Q i ) ) = − H p ( x ) + [ − ∑ i P ( i ) ∗ l o g ( Q ( i ) ) ] D_{KL}(P||Q)=\sum_iP(i)*[log(\frac{P(i)}{Q(i)})]\\ =\sum_iP(i)log(P(i))-P(i)*(log(Q_i))\\ =-H_p(x)+[-\sum_iP(i)*log(Q(i))] DKL(PQ)=iP(i)[log(Q(i)P(i))]=iP(i)log(P(i))P(i)(log(Qi))=Hp(x)+[iP(i)log(Q(i))]
  • 连续随机变量的D(P||Q)公式:
    D K L ( P ∣ ∣ Q ) = ∫ x P ( x ) ∗ [ l o g ( P ( i ) Q ( i ) ) ] d x D_{KL}(P||Q) = \int_x^{} P(x)*[log(\frac{P(i)}{Q(i)})]dx DKL(PQ)=xP(x)[log(Q(i)P(i))]dx

可看出

  • D(P||Q) ≠ D(Q||P)
  • 离散公式左部分为真实分布P的熵的负数

交叉熵

相对熵的右半部分为交叉熵,如果 H p ( x ) H_p(x) Hp(x)不变,KL散度和交叉熵等价,在优化过程中只需要关注交叉熵。
H ( p , q ) = − ∑ i n p i ∗ l o g ( q i ) H(p,q)=-\sum_i^np_i*log(q_i) H(p,q)=inpilog(qi)
交叉熵主要包含两类

  • 单分类是指结果类别只有一个,判断一张图片上动物类别是猫或狗或人(有且仅有一个类别),激活函数采用softmax,即多个预测概率和为1.
    *多分类 判断图片是否有猫和狗(类别数0~2),是一个多分类问题,激活函数sigmoid.

一个多分类的交叉熵问题

假定要判断一张图是否有猫或有狗。两者不同时出现,这是个单分类问题

label 0 1 0
pred 0.1 0.8 0.1

单分类交叉熵公式
l o s s = − ∑ i n y i ∗ l o g ( y ^ ) loss = -\sum_i^ny_i*log(\hat{y}) loss=inyilog(y^)
则上述问题交叉熵
l o s s = 0 ∗ l o g ( 0.1 ) + 1 ∗ l o g ( 0.8 ) + 0 ∗ l o g ( 0.1 ) loss=0*log(0.1)+1*log(0.8)+0*log(0.1) loss=0log(0.1)+1log(0.8)+0log(0.1)
对应一个大小为m的batch loos等于
l o s s b a t c h = − 1 m ∑ j = 1 m ∑ i = 1 n y j i l o g ( y j i ^ ) loss_{batch}=-\frac{1}{m}\sum_{j=1}^{m}\sum_{i=1}^{n}y_{ji}log(\hat{y_{ji}}) lossbatch=m1j=1mi=1nyjilog(yji^)

多个二分类的交叉熵问题

一个图像可能包含多个类别,可能同时包含猫、狗和人。

label 0 1 1
pred 0.2 0.8 0.1

每一个label可以看作是独立分布。交叉熵对每一个类别计算,这里每一个类别可以看作一个二项分布,上面提过可以简化为
l o s s = − y l o g ( y ^ ) − ( 1 − y ) l o g ( 1 − y ^ ) loss = -ylog(\hat{y})-(1-y)log(1-\hat{y}) loss=ylog(y^)(1y)log(1y^)
这样针对一个预测的loss为三个类别损失的和
l o s s 猫 = − 0 ∗ l o g ( 0.2 ) − ( 1 − 0 ) ∗ l o g ( 1 − 0.2 ) = − l o g ( 0.8 ) l o s s 狗 = − 1 ∗ l o g ( 0.8 ) − ( 1 − 1 ) ∗ l o g ( 1 − 0.8 ) = − l o g ( 0.8 ) l o s s 人 = − 1 ∗ l o g ( 0.1 ) − ( 1 − 1 ) ∗ l o g ( 1 − 0.8 ) = − l o g ( 0.1 ) l o s s 总 = l o s s 猫 + l o s s 狗 + l o s s 人 loss_猫=-0*log(0.2)-(1-0)*log(1-0.2)=-log(0.8)\\ loss_狗=-1*log(0.8)-(1-1)*log(1-0.8)=-log(0.8)\\ loss_人=-1*log(0.1)-(1-1)*log(1-0.8)=-log(0.1)\\ loss_总 = loss_猫+loss_狗+loss_人 loss=0log(0.2)(10)log(10.2)=log(0.8)loss=1log(0.8)(11)log(10.8)=log(0.8)loss=1log(0.1)(11)log(10.8)=log(0.1)loss=loss+loss+loss
可以看出,针对于人的预测概率很小,导致loss很大。
计算一个batch样本数为m,可能有n个类别的loss
l o s s b a t c h = − 1 m ∑ j = 1 m ∑ i = 1 n y j i l o g ( y j i ^ ) + ( 1 − y j i ) l o g ( 1 − y j i ^ ) loss_{batch}=-\frac{1}{m}\sum_{j=1}^{m}\sum_{i=1}^{n}y_{ji}log(\hat{y_{ji}})+(1-y_{ji})log(1-\hat{y_{ji}}) lossbatch=m1j=1mi=1nyjilog(yji^)+(1yji)log(1yji^)

从极大似然看交叉熵

了解一下 极大似然估计
先说结论:极大似然估计与最小化交叉熵损失其实是同一回事

对于离散随机变量,设 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn为X的取值, p 1 , p 2 , . . . , p n p_1,p_2,...,p_n p1,p2,...,pn为对应上述取值的概率。则离散 型随机变量X的概率分布为
P ( X = x i ) = p i , i = 1 , 2 , . . . , n , P(X=x_i) = p_i,i=1,2,...,n, P(X=xi)=pi,i=1,2,...,n,
且概率 P i P_i Pi满足 ∑ i = 1 n p i = 1 \sum_{i=1}^np_i=1 i=1npi=1。离散型随机变量X的概率分布函数为
F ( x ) = ∑ x i < n p i F(x)=\sum_{x_iF(x)=xi<npi

极大似然估计推导交叉熵

二分类

设二分类模型X={0,1},则有 P ( X = 0 , w ) = 1 − P ( X = 1 , w ) P(X=0,w)=1-P(X=1,w) P(X=0,w)=1P(X=1,w)
y为样品的真实类别,则有
f ( x ∣ w ) = [ 1 − P ( X = 1 , w ) ] 1 − y ∗ [ P ( X = 1 , w ) ] y f(x|w)=[1-P(X=1,w)]^{1-y}*[P(X=1,w)]^y f(xw)=[1P(X=1,w)]1y[P(X=1,w)]y
对于m次观察结果,则有
f ( X ∣ w ) = ∏ i = 1 m [ 1 − P ( X = 1 , w ) ] 1 − y i ∗ [ P ( X = 1 , w ) ] y i f(X|w)=\prod_{i=1}^{m}[1-P(X=1,w)]^{1-y_i}*[P(X=1,w)]^{y_i} f(Xw)=i=1m[1P(X=1,w)]1yi[P(X=1,w)]yi
写出似然函数
L ( w ∣ X ) = f ( X ∣ w ) L(w|X)=f(X|w) L(wX)=f(Xw)
取对数
l n L ( w ∣ X ) = ∑ i = 1 m [ ( 1 − y i ) l n ( 1 − P ( X = 1 , w ) ) + y i l n ( P ( X = 1 , w ) ) ] lnL(w|X)=\sum_{i=1}^m[(1-y_i)ln(1-P(X=1,w))+y_iln(P(X=1,w))] lnL(wX)=i=1m[(1yi)ln(1P(X=1,w))+yiln(P(X=1,w))]
则上式取得最大时,似然函数最大。
将上述 P ( X = 1 , w ) P(X=1,w) P(X=1,w)替换为二分类的预测值,添加负号则为 − [ y l n y ^ + ( 1 − y ) l n ( 1 − y ^ ) ] -[yln\hat{y}+(1-y)ln(1-\hat{y})] [ylny^+(1y)ln(1y^)],则该式(交叉熵)最小时,似然函数最大。

多分类

对于多项分布,设有n个类别,则有
f ( x ∣ w ) = ∏ C = 1 n P ( X = C , w ) y C f(x|w)=\prod_{C=1}^nP(X=C,w)^{y_C} f(xw)=C=1nP(X=C,w)yC
同样,对于m个样本,写出似然函数
L ( w ∣ X ) = f ( X ∣ w ) = ∏ i = 1 m ∏ C = 1 n P ( X = C , w ) y C L(w|X)=f(X|w)=\prod_{i=1}^m\prod_{C=1}^nP(X=C,w)^{y_C} L(wX)=f(Xw)=i=1mC=1nP(X=C,w)yC
对数似然
l n L ( w ∣ X ) = ∑ i = 1 m ∑ C = 1 n y i C l n P ( X = C , w ) lnL(w|X)=\sum_{i=1}^m\sum_{C=1}^{n}y_{iC}lnP(X=C,w) lnL(wX)=i=1mC=1nyiClnP(X=C,w)
上式乘上 − 1 m -\frac{1}{m} m1即为上面我们写的多分类交叉熵,可以看出当交叉熵最小时,似然函数取最大(有负号)。

关于极大似然估计和交叉熵的关系,查阅了很多资料,发现其实有很多角度去证明两种等价的。交叉熵损失函数的背后是有着严格的数学支撑的。

极大似然函数、最小二乘、交叉熵之间的联系
知乎第二个解答

梯度

博文重构,见另一篇文章 深度学习(二)梯度计算

本文参考

为什么交叉熵(cross-entropy)可以用于计算代价?
一文搞懂交叉熵
KL散度的含义与性质

你可能感兴趣的:(深度学习)