资料参考于NG的深度学习网站:http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/,实现课程中的练习题目
Softmax Regression
Softmax原理
softmax是Logistic Regression的泛化,其属于广义线性回归模型,具体的证明推导可以参见该博客;
由上面的证明可以得到损失函数:
J(θ)=−[∑i=1m∑k=1K1{y(i)=k}logeθ(k)⊤x(i)∑Kj=1eθ(j)⊤x(i)]
梯度为:
∇θ(k)J(θ)=−∑mi=1[x(i)(1{y(i)=k}−P(y(i)=k|x(i);θ))]
其中:
P(y(i)=k|x(i);θ)=eθ(k)⊤x(i)∑Kj=1eθ(j)⊤x(i)
Softmax实现
维度
因为实现过程中使用的都是向量运算,所以首先注明在实现过程中的各变量的维度。
(n指的是加上常数项+1后的特征个数)
(k指减去最后一项-1后的分类个数)
1.
θ维度:n∗k
2.
X维度:n∗m
3.
g维度:n∗k
4.
f:常数
5.
概率矩阵P:k∗m
6.
构造矩阵A:k∗m
实现过程
1.首先求 P(y(i)=k|x(i);θ)
b=theta'*X;
b(size(b,1)+1,:)=0;
a=exp(b);
sum_col = sum(a);
P=bsxfun(@rdivide,a,sum_col);
2.构造一个矩阵A( k∗m ),其中 Akm=1 表示第m个样本的分类为k;
A = zeros(num_classes,m);
I = sub2ind(size(A),y,1:size(A,2));%search for the position
A(I) = 1;
3.计算 J(θ) 的取值
P_log=log(P);
f=-sum(P_log(I));%I表示位置
4.计算梯度
g = - X*(A(1:size(A,1)-1,:)-P(1:size(A,1)-1,:))';
g=g[:]
5.最后使用minfunc函数求解 θ 的值
——2017.2.11