Machine Learning week 5 Neural Networks Learning

来源:互联网 发布:杭州行知小学划区 编辑:程序博客网 时间:2024/06/06 18:58

Neural Networks Learning

Cost Function

这里定义一些新的符号

L表示总共的layer数量,如下图,L=4

s带下标l,表示第l层的units个数,比如layer2有5个unit, 不包含bias unit

下面以binary classification和multi class classification为例子:

binary classification: 最终只有一个output,记作h(x),也就是说h(x)是实数空间的一个数字

multi classification:结果会有若干个output,整体作为一个向量,那么这里的h(x)就是k维空间向量中的一个向量。




理解上面lambda注意s是不包含bias unit的,每一层的bias unit都要排除

Back propagation Algorithm

我们的目标是让J取得最小值,如果使用octave系统自带的优化的求解方法的话,要计算下面2个东西,J 和 Gradient



从最后一层开始一次向前分别定义每一层的“error”,第一层除外,因为作为input layer是没有error的,其实这里的“error”和我们真正要计算的偏导数有一个对应的关系,如下:



下面的Δ要给每个layer都计算一次,而且要把1-m个trainning example计算到的Δ累加起来。Δ和对应layer的Θ矩阵是一样大小的




Backpropagation intuition

从x input前向计算到z,然后使用sigmoid函数得到第一层的activation value,依次计算到后面的a,可以看得出来下面图中最下面的公式对应图片中的关系。这里先有个图像化的感知。


看一下下面,后向计算delta,画线的方式,然后看一下右边的手写公式,现在有些理解后向传播了吧。


Unrolling parameters

octave内置的优化的方法,如fminunc,要求的输入的gradient,theta,都是vector类型的,而我们这里的theta,每一层都是一个矩阵,如何把神经网络中的theta fit到内置的优化方法中呢?


我们下面看一下如何处置这样的问题


看一下,下面计算顺序,这就是我们将来计算的一个顺序啦,当然还有一块内容没包含进来


Gradient Checking

这里之所以需要做这件事,是因为有的时候虽然你计算的cost functions的值确实是在减少,但是theta可能取错了方向,所以这个时候需要检查你的计算梯度的方法是不是正确的。
这里计算的时候采用了2-sides的估计方法,略比1-side的方法要精确。
ξ取得越小当然越精确,但是太小了会在计算的时候出现一些问题,这里老师选取10^(-4)


如果真的要计算的话,如下


循环计算出来估计值,然后和Dvec比较,如果很接近的话,我们就可以很有信心的认为我们的计算是正确的

但是计算估计值的时候要计算改变单个theta后J的value,相当于一次完全的前向计算过程,很有很大的计算量


那么现在我们更新一下我们整个计算过程


Random Initialization

我们计算的开始是需要初始化Θ的,假如我们把所有的θ都初始化为0,会发生什么呢?



会发生下面的事情,首先是a1 = a2, 然后反向计算δ也都相等,相应的偏导数都相等,然后更新的θ也都相等,那么最终计算的每层hidden layer的hidden unit也都相等,那么其实最终hidden unit只得到一个feature,而并非是神经网络的本意。


那么我们这里初始化采用随即初始化的方法,实际上这里的ξ是有一个经验取法的,参考后面的programming excercise部分,下面是给每个theta进行初始化的过程。


Put it together

要做一个神经网络,第一件事情就是要决定做一个什么样的network,下面有一些建议,比如说hidden unit的个数是input 或者 output的倍数。


下面我们总结如何训练一个神经网络



注意实际上神经网络的cost function并不是一个凹函数,所以很有可能我们只得到局部最优解,不过一般局部最优解也会是一个比较优秀的结果。


可以看得出来,选取不同的theta有可能最终带来不同的结果




Autonomous Driving





原创粉丝点击