Standord Machine Learning notes-week5

Neural Networks:Learning(神经网络:学习)

Cost function(代价函数)

神经网络是最强大的学习算法之一,这周和以下几周课程将会讲述在给定训练集下,为神经网络拟合参数的学习算法。现在从讨论神经网络的代价函数开始讲起。

神经网络(分类)


如图所示,假设存在这样一个神经网络,有m个训练样本(x(i),y(i))L表示这个神经网络结构的总层数。sl第l层的神经元的数量,这其中不包括L层的bias

现在讨论两种分类问题:(1)y只能取0或1,只有1类,1个输出单元;(2)多类别的分类问题,有K个输出(K>=3)。

第一行是逻辑回归的代价函数,这里并没有把偏差项theta0正则化。对于神经网络,我们的代价函数是这个式子的一般化形式。这里不仅只有一个逻辑回归输出单元,取而代之的是K个,h(x)是一个K维向量,i表示选择了神经网络的第i个元素。对k从1到K进行了求和,这是对K个输出单元的求和。代价函数的第二项是正则化项。这里要做的就是把所有theta(ji)的值都相加。这里要除去那些对应于偏差值的项,对于i=0的项要加入其中,当我们计算神经元的激励值时,所有下标i=0的项(Bias)都要加入到正则化项里,因为我们不想正则化这些项,并把这些项设为0。但这只是我们合理的假设,如果i从0加到sl,也依然成立,并且不会有太大差异,但是如果不把偏差项正则化可能更常见一些。

Backpropagation algorithm(反向传播)

让代价函数最小化的算法——反向传播算法。

为了能使用梯度下降或者其他高级的算法,我们需要做的就是写好一个可以通过输入一个参数theta,然后计算J(theta)和对应的偏导项。这节主要讲如何计算偏导项。

Gradient computation(梯度计算)

从只有一个训练样本(x,y)说起。
首先由前向传播,计算一下在给定输入的时候,假设函数是否会真的输出结果。

具体来说,a(1)就是第一层的激励值,也就是输入层;a(2)是隐藏层的激励值g是sigmoid函数。这里实现了把前向传播向量化,从而可以计算每一层神经元的激励值。

接下来为了计算偏导项,引入一种叫做反向传播(backpropagation)算法

Gradient computation(梯度计算):反向传播算法

反向传播算法从直观上说,就是对每个结点,我们计算这样一项thetaj(l),代表第l层的第i个结点的误差。这项捕捉了在这个神经结点的激励值的误差。

具体来说,右边这个有四层的神经网络结构做例子。要计算delta(4)就要先计算delta(3)delta(2)g'(z(3)实际上是在输入值为z(3)的时候所求的导数。

这里没有delta(1),因为第一层对应输入层,那只是表示我们在训练集观察到的,所以不会存在误差。那么这个例子中的误差只有第二层和第三层。

反向传播这个名字源于我们从输入层开始计算delta项,然后我们返回上一层计算第三层隐藏层的delta,然后不断反向计算。所以,我们是类似于把输入层的误差反向传播给第三层,第二层。

最后通过复杂的数学推导,我们可以得到J(theta)的偏导数项(PPT最后一行)。

如果有多个训练样本:

先初始化,然后便利所有训练样本。对于第一个循环,我们取训练样本(x(i),y(i)),取a(1)=x(1),也就是输入层的激励函数,