交叉熵到logistic和softmax

来源:互联网 发布:android多线程编程 编辑:程序博客网 时间:2024/05/29 12:10

交叉熵到logistic和softmax

面试的时候被问到了softmax的问题,答的不大好,整理一下。
参考了以下作者的答案ke1th、Daniel的学习笔记、qian99、 u010223750
交叉熵在神经网络中作为损失函数。

1均方误差—线性回归

先看一下均方误差,均方误差是最常见的损失函数
损失函数如下:

J(z)=12||ay||22

求导:
Jz=ay

求导结果作为梯度下降的参数更新。

2交叉熵

交叉熵刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。假设概率分布p为期望输出,概率分布q为实际输出,H(p,q)为交叉熵,有以下两种形式:

H(p,q)=x(p(x)logq(x)+(1p(x))log(1q(x))

H(p,q)=xp(x)logq(x)

两种交叉熵,对应logistic和softmax回归
logistic回归主要是两类问题,一位(0/1)就能表示两种情况,属于二项分布。softmax用于多分类问题。
2.1二分类logistic回归
sigmoid函数:

a=σ(z)=11+exp(z)

sigmoid导数:
a=z(1z)

把a看作y=1的概率值:p(y=1|x)=a
似然函数:
(z)=ay(1a)1y

log似然:
L(z)=ylna+(1y)ln(1a)

最大化似然L(w)等价最小化L(w)
J(z)=ylna(1y)ln(1a)

损失函数求偏导:
Jz=Jaaz=(ya+1y1a)a(1a)=ay
偏导结果为预测值与目标值的残差

2.2多分类softmax
softmax函数:

ai=expzikexpzk

交叉熵:
J(z)=iyilnai

求偏导:
Jzi=Jajajzi

其中前面部分易知:
Jaj=jyiaj

后面部分求ajzi
i=j
ajzi=expzikexpzizi=expzikexpzkexpziexpzikexpzk2=ai(1ai)

ij
ajzi=expzjkexpzizi=0kexpzkexpzjexpzikexpzk2=ajai
代入可得:
Jzi=aiyi

三种损失函数的求导有一样的结果,具体和指数族分布和广义线性模型有关具体见指数分布族

==========================
tips:softmax再具体编写的时候,为了避免expxi过大,会用xixmax代替xi

贴上python实现的logistic和softmax简单例子欢迎学习交流

原创粉丝点击