Machine Learning(5)—Lessons by Andrew Ng

来源:互联网 发布:js设置placeholder颜色 编辑:程序博客网 时间:2024/06/15 20:09

终于学习到了一个久仰大名的算法—神经网络算法(Neural Networks)!

Neural Networks的必要性

之前我们已经学习过linear regression和logistic regression,为什么还需要neural networks呢。举个例子:
这里写图片描述
在此图中,想要将两者分开,显然不太容易。如果使用logistic regression,需要添加很多x1和x2的非线性features,如:
这里写图片描述
这是对于仅有x1和x2的情况,一旦features的数量比较多时,非线性的features数量将会十分庞大,一方面十分容易over-fitting,一方面计算成本也过高。因此对于实际的机器学习问题,并不适合用logistic regression和linear regression去实现非线性的hypothesis。

Neural Networks模型建立

neural networks的建立就是为了模仿人类的大脑,这是我们目前所知的最棒的学习系统。因此神经网络的模型模仿了神经元。如图所示:
这里写图片描述
我们都知道,神经元有树突轴突,负责输入输出电信号,再传递给其他神经元。于是neural networks就建立了类似的多层的具备输入输出的网络。如图:每一个圆圈就类比着一个神经元,具有input(x1,x2,x3)和output(h(x))。
这里写图片描述
有时候输入会再加上一项x0,称为bias unit,基本默认为1:
这里写图片描述
其中这里写图片描述表示h(x)依然应用的是sigmoid function,这是一个neuron with sigmoid activation function。而之前总是被称为parameter的θ,也可以称为weights。
以上是一个最简单的神经网络的模型,接下来我们看一下稍微复杂的更普遍的结构:
这里写图片描述
在这里有三层,input layer,hidden layer,output layer。其实hidden layer中的每一项a1,a2,a3都是上一个最简模型中的output。

Neural Networks运算

这里写图片描述
如图所示,一般input layer中的x1,x2,x3……就是来自training sets中的features,将其与θ组合,代入sigmoid activation function后得到的就是第二层的几个单元:a1,a2,a3,其实hidden layer就是第一层的输出(预测)。之后将a1,a2,a3当作输入,重复上一步,就得到了下一步的输出,在这个只有三层的神经网络中,也就是整个网络的输出(最后的结果)。
由于神经网络的层次性,这里的表示方式一定要区分清楚。比如上标表示的都是第几层,而下标表示的则是某一层的第几个单元。重点是θ的维度:行数为下一层的单元个数,列数为本层的单元个数。因为针对下一层的每个单元,都是上一层的每个单元与θ进行线性组合后得到的。因此θ的每一行表示的是组成该单元的那几个θ值。
一般情况下bias unit会被添加进来,就用z表示θ与x的组合:
这里写图片描述

Multi-class Classification

多类的分类问题对应的神经网络应该有multiple output units,最终的output layer不只有一个单元。用向量表示h(x)就应该是一个列向量:
这里写图片描述
分到哪一类里,那一类别对应的output unit就为1(事实上,output unit并不是直接输出1,而是哪一个output unit的输出最大,表示那个类别的可能性就最大,就将其分到那个类别里,然后人工地生成类似上图的列向量)。

Cost Function

neural networks的cost function形式和logistic regression很像:
这里写图片描述
其中K = number of output units/classes。
和logistic regression的cost function相比:
这里写图片描述
神经网络的增添了一个求和,是针对于每一个输出单元的。因为输出不仅仅有一个,我们取了最大的那个作为分类训练的结果,则其他所有的类别都被视为错误的,就会产生cost。
需要注意的是:神经网络cost function的第二部分正则化中,有三重的累加,其中的i并不是指training sets的个数。

Backpropagation Algorithm的引出

得到cost function后,就应该通过求出梯度使其为零,进而得到使cost function最小的合适的θ值。
在神经网络中,我们会使用一个叫做backpropagation的算法,来得到梯度。由于这个算法略微复杂,当时找了一些参考资料,综合理解了一下,打算在下一篇文章中详细介绍。

阅读全文
0 0