softmax回归是logistic回归的一般化形式,可将样本分为k类,其假设函数如下:
代价函数为
梯度公式
将其带入梯度下降等算法中,来最小化 ,如 ()
softmax回归有一个特点,就是它的参数是冗余的。
有时会添加一个权重衰减项来修改代价函数,变成这样
相应导数是这样
实际应用中要考虑清楚是使用softmax回归还是使用K个二元分类器,根据类别之间是否互斥来确定。
实验:
MATLAB FUNCTIONS:
SoftmaxCost.m
%YOUR CODE HERE
M = bsxfun(@minus, theta*data,max(theta*data, [], 1));
M = exp(M);
p = bsxfun(@rdivide, M, sum(M));
cost = -1/numCases * groundTruth(:)' * log(p(:)) + lambda/2 * sum(theta(:).^2);
thetagrad = -1/numCases * (groundTruth - p) * data' + lambda*theta;
SoftmaxPredict.m
% YOUR CODE HERE
[nop, pred] = max(theta * data);
sparse:
生成一个稀疏矩阵,比如说sparse(A, B, k),,其中A和B是个向量,k是个常量。这里生成的稀疏矩阵的值都为参数k,稀疏矩阵位置值坐标点有A和B相应的位置点值构成。
full:
生成一个正常矩阵,一般都是利用稀疏矩阵来还原的。
SoftmaxCost.m
%YOUR CODE HERE
M = bsxfun(@minus, theta*data,max(theta*data, [], 1));
M = exp(M);
p = bsxfun(@rdivide, M, sum(M));
cost = -1/numCases * groundTruth(:)' * log(p(:)) + lambda/2 * sum(theta(:).^2);
thetagrad = -1/numCases * (groundTruth - p) * data' + lambda*theta;
SoftmaxPredict.m
% YOUR CODE HERE
[nop, pred] = max(theta * data);
0 初始化常量与参数
输入图片大小是28*28,共有10类。
1 载入数据
60000张训练图像及其标签,权重参数是7840维的,表明网络只有输入层与输出层,没有隐层。
2 实现softmaxCost
将
3梯度检查
这个在调试的时候用较小的量来做即可,正式运行的时候可以不要。
4学习参数
用minFunc学习,迭代100次,返回学到的最优参数。
5测试
10000张测试图像,测试的正确率92.64%。