另外一个复杂公式

转载至:http://blog.csdn.net/WangCaihua321/article/details/47298363

前言
关于softmax回归,有比较多的资料,本来没有必要再写一次的。下面是一些网址:
1)http://deeplearning.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92
2)http://ufldl.stanford.edu/wiki/index.php/Softmax_Regression
3)http://blog.csdn.net/acdreamers/article/details/44663305
4)http://www.cnblogs.com/fanyabo/p/4060498.html
还有很多, 不一一列出。

softmax 中的导数是怎样得到的?
为什么对网站上给出的目标函数直接求导是不对的?
为了解答这些问题,我决定写这篇文章。

注: 如果你认为我是错的,请让我知道,先谢过了。


问题提出
按定义(一般资料中的定义),softmax的似然函数为:

ikPk(xi)I(y(i)=k) ∏ i ∏ k P k ( x i ) I ( y ( i ) = k )

其中 k{1,2,,K} k ∈ { 1 , 2 , ⋯ , K } , i{1,2,,N} i ∈ { 1 , 2 , ⋯ , N } , Pk(xi) P k ( x i ) 按softmax概率定义有:
Pk(xi)=eθTkxiKl=1eθTlxi P k ( x i ) = e θ k T x i ∑ l = 1 K e θ l T x i

对似然函数取负对数,求匀值,引入正则项,得到目标函数/损失函数,如下:
J(θ)=1Nik(I(y(i)=k)lneθTkxiKl=1eθTlxi)+λ2θ22 J ( θ ) = − 1 N ∑ i ∑ k ( I ( y ( i ) = k ) ln ⁡ e θ k T x i ∑ l = 1 K e θ l T x i ) + λ 2 ‖ θ ‖ 2 2

这与网站上的一致,当然也是正确的。接下来是求导,如下:
J(θ)θj=1Ni(I(y(i)=j)Kl=1eθTlxieθTjxiPj(xi)|θTjxi)xi+λθj ∂ J ( θ ) ∂ θ j = − 1 N ∑ i ( I ( y ( i ) = j ) ∑ l = 1 K e θ l T x i e θ j T x i P j ( x i ) | θ j T x i ) x i + λ θ j

其中 Pj(xi)|θTjxi P j ( x i ) | θ j T x i Pj(xi) P j ( x i ) θTjxi θ j T x i 的导数,如下
Pj(xi)|θTjxi=eθTjxiKl=1eθTlxi(eθTjxi)2(Kl=1eθTlxi)2 P j ( x i ) | θ j T x i = e θ j T x i ∑ l = 1 K e θ l T x i − ( e θ j T x i ) 2 ( ∑ l = 1 K e θ l T x i ) 2

整理得,
J(θ)θj=1Ni(I(y(i)=j)(1Pj(xi)))xi+λθj ∂ J ( θ ) ∂ θ j = − 1 N ∑ i ( I ( y ( i ) = j ) ( 1 − P j ( x i ) ) ) x i + λ θ j

这与网站上的结果不一致。网站上的结果为:
J(θ)θj=1Ni(I(y(i)=j)Pj(xi))xi+λθj ∂ J ( θ ) ∂ θ j = − 1 N ∑ i ( I ( y ( i ) = j ) − P j ( x i ) ) x i + λ θ j

但是从推导过程来说好像没有什么错误,于是我开始怀疑网站上的结果是否正确。UFLDL Tutorial 中介绍过梯度检验方法。我按网站上的公式写目标函数和梯度进行验证,发现网站上的是对的,我认为正确的却不对,问题出在哪呢?


重新认识 softmax
按定义(一般资料中的定义),softmax 的似然函数为:

ikPk(xi)I(y(i)=k) ∏ i ∏ k P k ( x i ) I ( y ( i ) = k )

softmax 每次只能取一个值,有排它性。另一种等价定义为:
ik(eθTkXi)I(y(i)=k)KleθTjxi ∏ i ∏ k ( e θ k T X i ) I ( y ( i ) = k ) ∑ l K e θ j T x i

对应的目标函数为:
J(θ)=1Ni((kI(y(i)=k)lneθTkxi)lnlKeθTlxi)+λ2θ22 J ( θ ) = − 1 N ∑ i ( ( ∑ k I ( y ( i ) = k ) ln ⁡ e θ k T x i ) − ln ⁡ ∑ l K e θ l T x i ) + λ 2 ‖ θ ‖ 2 2

对这个目标函数求导为:
J(θ)θj=1Ni(I(y(i)=j)Pj(xi))xi+λθj ∂ J ( θ ) ∂ θ j = − 1 N ∑ i ( I ( y ( i ) = j ) − P j ( x i ) ) x i + λ θ j

事实上,对于第二种似然函数,如果考虑softmax 每次只能取一个值,有排它性,即 I(y(i)=k) I ( y ( i ) = k ) 只有一个为1,其它全为0。上面的目标函数与下面这个等价:

J(θ)=1Nik(I(y(i)=k)lneθTkxiKl=1eθTlxi)+λ2θ22 J ( θ ) = − 1 N ∑ i ∑ k ( I ( y ( i ) = k ) ln ⁡ e θ k T x i ∑ l = 1 K e θ l T x i ) + λ 2 ‖ θ ‖ 2 2

总之, 网站上给的结论都是正确的。


问题出在哪?
KleθTlxi ∑ l K e θ l T x i 是归一化因子,与抽样无关。 I(y(i)=k) I ( y ( i ) = k ) 只应影响与抽样相关的项,不应影响归一化因子 KleθTlxi ∑ l K e θ l T x i 。所以,

J(θ)=1Nik(I(y(i)=k)lneθTkxiKl=1eθTlxi)+λ2θ22 J ( θ ) = − 1 N ∑ i ∑ k ( I ( y ( i ) = k ) ln ⁡ e θ k T x i ∑ l = 1 K e θ l T x i ) + λ 2 ‖ θ ‖ 2 2

要先变成:
J(θ)=1Ni((kI(y(i)=k)lneθTkxi)lnlKeθTlxi)+λ2θ22 J ( θ ) = − 1 N ∑ i ( ( ∑ k I ( y ( i ) = k ) ln ⁡ e θ k T x i ) − ln ⁡ ∑ l K e θ l T x i ) + λ 2 ‖ θ ‖ 2 2

再计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值