Andrew Ng的deep learning tutorial 中 Softmax分类器求梯度的过程省略了,他直接给出
Δθ(k)J(θ)=−∑i=1mx(i)((y(i)=k)−exp(θ(k)Tx(i)∑Kj=1exp(θ(j)x(i)))(*)
但一眼无法看出结果,所以自己求了一下,几次算错。网上查的时候也有人很少有人推导或推错。折腾一下终于知道怎么推了。推导过程如下:
J(θ)=−⎡⎣⎢⎢∑i=1m∑k=1K{y(i)=k}logexp(θ(k)⊤x(i))∑Kj=1exp(θ(j)⊤x(i))⎤⎦⎥⎥(1)
P(y(i)=k|x(i);θ)=exp(θ(k)⊤x(i))∑Kj=1exp(θ(j)⊤x(i))(2)
把(2)代入(1)得:J(θ)=−∑i=1m∑j=0K(y(i)=j)⎡⎣⎢⎢θ(j)x(i)−log∑p=1Kexp(θ(p)Tx(i))⎤⎦⎥⎥
可以看出,根据j值的两种可能,所求得的导数不同。接下来分类讨论:I.当j=k时:
J(θ)=−∑i=1m⎡⎣⎢⎢θ(k)x(i)−log∑p=1Kexp(θ(p)Tx(i))⎤⎦⎥⎥∂J(θ)∂θ(k)=−∑i=1mx(i)(1−P(y(i)=k|x(i);θ))(3)
II:当j≠k时,为使过程清晰不妨设j=q,则J(θ)=−∑i=1m⎡⎣⎢⎢θ(q)x(i)−log∑p=1Kexp(θ(p)Tx(i))⎤⎦⎥⎥
∂J(θ)∂θ(k)=−∑i=1mx(i)(−P(y(i)=k|x(i);θ))(4)
.
综合式(3)(4)可得出结果式(*) 。附上andrew ng softmax回归的链接 http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/。