Softmax Regression
Logistic regression通常用来解决二分类问题,解决多分类问题通常就要用到softmax regression。给定一个样例x,假设我们想要计算出x属于k
∈{1,2,3...K}
的概率
P{y=k|x}
可以使用如下的公式:
hθ(x)=⎡⎣⎢⎢⎢⎢⎢P(y=1|x;θ)P(y=2|x;θ)⋮P(y=K|x;θ)⎤⎦⎥⎥⎥⎥⎥=1∑Kj=1exp(θ(j)Tx)⎡⎣⎢⎢⎢⎢⎢exp(θ(1)Tx)exp(θ(1)Tx)⋮exp(θ(1)Tx)⎤⎦⎥⎥⎥⎥⎥
其中 θ1,θ2...θk∈Rn 是模型的参数,其中 1∑kj=1exp(θ(j)Tx) 是标准化项,使得所有类的概率相加等于1, θ 是一个n*k的系数矩阵,具有如下形式:
[θ1θ2⋯θK]
Cost function
在cost function中使用指示函数,1{true} = 1,1{false} = 0,cost function具有如下形式:
J(θ)=−[∑i=1m∑k=1K1{yi=k}logexp(θ(k)Txi)∑Kj=1exp(θ(j)Txi)]
对每一个 θl 求导, l∈{1,2...K}
∂J(θ)∂θl=−∑i=1m[∂∑Kk=11{yi=k}logexp(θ(k)Txi)∑Kj=1exp(θ(j)Txi)∂θl]
当l=k时
∂1{yi=k}logexp(θ(k)Txi)∑Kj=1exp(θ(j)Txi)∂θl={yi=k}∑Kj=1exp(θ(j)Txi)exp(θ(k)Txi)∗xi∗exp(θ(k)Txi)∗∑Kj=1exp(θ(j)Txi)−xi∗exp(θ(k)Txi)∗exp(θ(k)Txi)∑Kj=1exp(θ(j)Txi)2=xi∗(1−exp(θ(k)Txi)∑Kj=1exp(θ(j)Txi))=xi∗(1−P(yi=k|xi;θ)=xi∗(1{yi=k}−P(yi=k|xi;θ))
当 l≠k 时
∂1{yi=k}logexp(θ(k)Txi)∑Kj=1exp(θ(j)Txi)∂θl={yi=k}∑Kj=1exp(θ(j)Txi)exp(θ(k)Txi)∗0−xi∗exp(θ(k)Txi)∗exp(θ(k)Txi)∑Kj=1exp(θ(j)Txi)2=xi∗(0−exp(θ(k)Txi)∑Kj=1exp(θ(j)Txi))=xi∗(0−P(yi=k|xi;θ))=xi∗(1{yi=k}−P(yi=k|xi;θ))
所以
∂J(θ)∂θl=−∑i=1m[xi∗(1{yi=k}−P(yi=k|xi;θ))]
Softmax Regression参数特点
Softmax Regression回归所求得参数是一个冗余的参数集,把得到的每一个参数
θl
同时减去
φ
,并不影响预测结果,此时
θl
都变成了
θl−φ,l∈{1,2,3..K}
,数学推导如下:
P(yi=k|xi;θ)=exp((θ(k)−φ)Txi)∑Kj=1exp((θj−φ)xi)=exp(θ(k)Txi)exp(φTxi)∑Kj=1exp(θ(j)Txi)exp(φTxi)=exp(θ(k)Txi)∑Kj=1exp(θ(j)Txi)
为了避免求得的是一个冗余的参数集,可以考虑在cost function中加入一个正则化项,加入正则项后的cost function和导数表达式如下:
J(θ)=−[∑i=1m∑k=1K1{yi=k}logexp(θ(k)Txi)∑Kj=1exp(θ(j)Txi)]+λ/2∑i=1k∑j=1mθ2ij
∂J(θ)∂θl=−∑i=1m[xi∗(1{yi=k}−P(yi=k|xi;θ))]+λθl
最后exercise练习如下:
yLabel = full(sparse(y, 1:m, 1));
yLabel = yLabel(1:num_classes-1,:);
M = exp(theta'*X);
p = bsxfun(@rdivide,M,sum(M));
f = - yLabel(:)'*log(p(:));
g = - X*(yLabel - p)';
g = g(:,1:num_classes - 1);