问题提出
按定义(一般资料中的定义),softmax的似然函数为:
∏i∏kPk(xi)I(y(i)=k)
其中 k∈{1,2,⋯,K} , i∈{1,2,⋯,N} , Pk(xi) 按softmax概率定义有:
Pk(xi)=eθTkxi∑Kl=1eθTlxi
对似然函数取负对数,求匀值,引入正则项,得到目标函数/损失函数,如下:
J(θ)=−1N∑i∑k(I(y(i)=k)lneθTkxi∑Kl=1eθTlxi)+λ2∥θ∥22
这与网站上的一致,当然也是正确的。接下来是求导,如下:
∂J(θ)∂θj=−1N∑i(I(y(i)=j)∑Kl=1eθTlxieθTjxiPj(xi)|θTjxi)xi+λθj
其中 Pj(xi)|θTjxi 是 Pj(xi) 对 θTjxi 的导数,如下
Pj(xi)|θTjxi=eθTjxi∑Kl=1eθTlxi−(eθTjxi)2(∑Kl=1eθTlxi)2
整理得,
∂J(θ)∂θj=−1N∑i(I(y(i)=j)(1−Pj(xi)))xi+λθj
这与网站上的结果不一致。网站上的结果为:
∂J(θ)∂θj=−1N∑i(I(y(i)=j)−Pj(xi))xi+λθj
但是从推导过程来说好像没有什么错误,于是我开始怀疑网站上的结果是否正确。UFLDL Tutorial 中介绍过梯度检验方法。我按网站上的公式写目标函数和梯度进行验证,发现网站上的是对的,我认为正确的却不对,问题出在哪呢?
重新认识 softmax
按定义(一般资料中的定义),softmax 的似然函数为:
∏i∏kPk(xi)I(y(i)=k)
softmax 每次只能取一个值,有排它性。另一种等价定义为:
∏i∏k(eθTkXi)I(y(i)=k)∑KleθTjxi
对应的目标函数为:
J(θ)=−1N∑i((∑kI(y(i)=k)lneθTkxi)−ln∑lKeθTlxi)+λ2∥θ∥22
对这个目标函数求导为:
∂J(θ)∂θj=−1N∑i(I(y(i)=j)−Pj(xi))xi+λθj
事实上,对于第二种似然函数,如果考虑softmax 每次只能取一个值,有排它性,即
I(y(i)=k)
只有一个为1,其它全为0。上面的目标函数与下面这个等价:
J(θ)=−1N∑i∑k(I(y(i)=k)lneθTkxi∑Kl=1eθTlxi)+λ2∥θ∥22
总之, 网站上给的结论都是正确的。
问题出在哪?
∑KleθTlxi
是归一化因子,与抽样无关。
I(y(i)=k)
只应影响与抽样相关的项,不应影响归一化因子
∑KleθTlxi
。所以,
J(θ)=−1N∑i∑k(I(y(i)=k)lneθTkxi∑Kl=1eθTlxi)+λ2∥θ∥22
要先变成:
J(θ)=−1N∑i((∑kI(y(i)=k)lneθTkxi)−ln∑lKeθTlxi)+λ2∥θ∥22
再计算。