首页 > 其他 > 详细

UFLDL学习笔记(3)

时间:2014-01-21 09:59:36      阅读:433      评论:0      收藏:0      [点我收藏+]

最近在学习UFLDL Tutorial,这是一套关于无监督学习的教程。在此感觉Andrew Ng做的真的是非常认真。下面把我的代码贴出来,方便大家学习调试。所有代码已经过matlab调试通过。


第三章 Softmax Regression

这一章讲的是用softmax(实际就是logistic回归的多类版)来进行mnist手写数字的分类。我们知道,logistic和softmax只能做线性的分类。这章的数学求导真是让我呕血啊!花了整整一天无果,最后在Yuli的启发下发现了bug,这个待会讲。softmax是一个概率模型,如下图。其中输出的和为1。

bubuko.com,布布扣

softmax分类模型

代码编写

首先要从UFLDL上把mnist下好,这个不多说了。代码中softmaxCost.m和softmaxPred.m是要自己填写的。

softmaxCost.m 计算损失函数和梯度。很简短,但我debug了很久很久。。。代码:

X = data;
Y = groundTruth;
W = theta;
sampleN = numCases;

% 主要部分
P = exp(W*X) ./ repmat(sum(exp(W*X)),numClasses,1); %预测概率
cost = -1/sampleN * sum(sum(Y.*log(P)));            %损失函数
thetagrad = -1/sampleN * (Y-P)*X‘;                  %权值梯度
softmaxPred.m 预测函数。代码:
result = theta*data;        %测试结果
[tmp,pred] = max(result);   %pred保存识别图片结果序号
运行结果

准确率92.270%。可以看到如此简单的模型已经有了一个不错的结果。

数学细节

由于这一章真的是呕心沥血才调通,虽然主要代码才三行,但所以我必须要马克一下细节。主要是求导的地方让我头大了很久很久。。。

首先输出概率可以写成

bubuko.com,布布扣(1)

y为输出向量,比如说y={0,0,1,0,0}

写成exponential family的形式为

bubuko.com,布布扣bubuko.com,布布扣(2)

UFLDL上没有给出推导,我简要总结如下,可跳过不影响阅读。

bubuko.com,布布扣

我们定义损失函数为负最大似然函数/N

bubuko.com,布布扣(3)

其中p如(2)中定义。那么只需要E对w求导即可得到梯度了。好了就是这个地方卡了我超久!演算了很多草稿纸放在matlab上还是不对。最后受网友Yuli的启发终于发现了bug。UFLDL上没有给出过程推导,现在我来推导它。作为UFLDL的补充。

(3)式可以写成

bubuko.com,布布扣(4)

对wj求导有

bubuko.com,布布扣(5)

其中

bubuko.com,布布扣

上两式推导不难,省略。将该两式代入(5)得

bubuko.com,布布扣

至此就和UFLDL上的结果一样了!大功告成!

我之前犯的错误是(5)式没有对右边的项求导,只考虑了左边的项,因此错了。


小结

这一章代码量很少,但是想把每个公式都推一边还是不容易的。


UFLDL学习笔记(3)

原文:http://blog.csdn.net/richard2357/article/details/18221899

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!