吴恩达Machine Learning第四周作业——神经网络

这周讲的是神经网络,作业是根据已有的数据集(20*20像素的图片对应一个数字)去识别数字。

引入神经网络的原因主要是因为线性回归和逻辑回归的时间复杂度较高,对于特征数一旦比较大的,不仅容易耗时很多,而且可能过拟合。此时科学家们就根据人脑的工作原理去模拟这个过程来解决实际问题。每一层神经网络的推导和我们之前的线性回归的过程非常类似。

我们的作业是一个多分类的问题,因此解决的方案就是

具体到作业里,all_theta代表的是所有线性回归分类器的参数,其中第i行代表的是第i个特征(也就是识别出来的是数字i)的参数矩阵。这项工作是在oneVsAll.m完成的,也就是把每一行都用fmincg来训练出的参数theta保存到all_theta里。

在predictOneVsAll.m里,我们的任务主要是预测对于例子X,最后的预测结果p。X是一个5000400的矩阵,即有5000个例子,400个特征。首先我们为例子增加了一列为全1的截距项(当然是为了之后计算的便利)即5000401这样的矩阵,然后我们乘上all_theta(10401)的转置,得到500010的矩阵,其代表的是每一个例子i预测值为j的概率。所以我们就需要提取出每一行的最大的那一列的下标,这就是最后我们需要的值。然后为了求这出这个值,可以很容易的就用matlab自带的这个非常牛逼的max功能。即[a b]=max(A) a = 数值 b = 位置,然后在max里我们需要求的是第i行的最大值,这个用max( ans, [], 2) 就好了。这个2代表的是取最大值的维度,其中1是求每一列的最大值,2是求行的最大值。具体语法可以查看help max。

  1. 如何序列化,序列化的意义是什么呢?

首先说一下为什么要序列化,对于同样的一个计算Cost函数的任务,我是按照for循环来无脑计算的,然后跑500次迭代、需要很久的时间(大概好几秒),而之后我参考了网上的写法,基本就是瞬间出解。因为MATLAB在编译的时候对矩阵运算做了优化,因此其速度会大大提升。

至于如何序列化,比如题目中对损耗函数和梯度的计算公式如下:

《吴恩达Machine Learning第四周作业——神经网络》

如果像我一样无脑写for循环,大概就是下面

序列化的写法:

其实思路挺清晰的,关键点就在于矩阵计算时,计算的次序以及需不需要转置等问题,.*就是乘值。这种抽象能力需要锻炼。回想起今天早上研究方法论老师在讲摘要的重要性时说的,“抽象总结概括是一个非常重要的能力,在今后的工作中尤为明显”。

  1. 最后的输出层代表的值是为数字i出现的概率吗?

我在做quiz的时候出现了一个这样的选项:
《吴恩达Machine Learning第四周作业——神经网络》

当时有点蒙,在做完题后有了理解。题目说的3层相当于就只有如下的三层:1个输入层、1个中间层、1个输出层,其中输出层即为a3,然后它问我们输出层的所有值加起来是否为1?

对应到我们的编程题,我们的神经网络同样也只有三层(即代表隐藏层只有1层,最简单的模型)然后第一层显然就是X(即5000400的读入数据,5000个例子,400个特征),第二层是500025,即有25个单元,第三层是输出层,5000*10,这个是10就是对应的1-10(10代表的是数字0) 然后第三层的1-10的和为1吗?我选取了5行如下,并且随便算了一下每一行的值的和,大概在1.03左右,所以这是为什么呢?其实主要还是由于sigmoid函数将解空间固定在[-1,1]内,因此最可能出现的那个值接近1,而其它的值接近0,所以其最后加起来可能和1差不多,但并不会等于1。如果要和为1,则需要我们进行归一化,此时这个值也就代表了每个数字预测出现的概率。所以那个选项是错误的。

0.0001 0.0017 0.0025 0.0000 0.0094 0.0040 0.0055 0.0004 0.0065 0.9957
0.0005 0.0024 0.0034 0.0000 0.0065 0.0018 0.0116 0.0024 0.0020 0.9957
0.0001 0.0032 0.0255 0.0000 0.0040 0.0103 0.0004 0.0623 0.0055 0.9280
0.0001 0.0080 0.0178 0.0001 0.0006 0.0115 0.0019 0.0047 0.0008 0.9941
0.0001 0.0015 0.0038 0.0001 0.0226 0.0009 0.0047 0.0014 0.0021 0.9928

可读的博文:
https://blog.csdn.net/gaoxin1076/article/details/8948871

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注