Stanford机器学习---第五讲. 神经网络的学习 Neural Networks learning

2021-06-06 07:11

阅读:526

技术分享

由上图我们得到了error变量δ的计算,以下我们来看backpropagation算法的伪代码:

技术分享

ps:最后一步之所以写+=而非直接赋值是把Δ看做了一个矩阵,每次在对应位置上做改动。

从后向前此计算每层δ,用Δ表示全局误差,每一层都相应一个Δ(l)。

再引入D作为cost function对參数的求导结果。下图左边j是否等于0影响的是是否有最后的bias regularization项。左边是定义,右边可证明(比較繁琐)。

技术分享





===============================

(三)、Backpropagation intuition

上面讲了backpropagation算法的步骤以及一些公式,在这一小节中我们讲一下最简单的back-propagation模型是如何learning的。

首先依据forward propagation方法从前往后计算z(j),a(j) ;

技术分享

然后将原cost function 进行简化,去掉下图中后面那项regularization项,

技术分享

那么对于输入的第i个样本(xi,yi),有

Cost(i)=y(i)log(hθ(x(i)))+(1- y(i))log(1- hθ(x(i)))


由上文可知,

技术分享


当中J就是cost。那么将其进行简化,临时不考虑g‘(zk) = ak(1-ak)的部分,就有:

技术分享

经过求导计算可得,对于上图有

技术分享

换句话说, 对于每一层来说,δ分量都等于后面一层全部的δ加权和,当中权值就是參数Θ





===============================

(四)、Implementation note: Unrolling parameters

这一节讲述matlab中怎样实现unrolling parameter。

前几章中已经讲过在matlab中利用梯度下降方法进行更新的根本,两个方程:

function [jVal, gradient] = costFunction(theta)
optTheta = fminunc(@costFunction, initialTheta, options)

与linear regression和logistic regression不同,在神经网络中。參数许多,每一层j有一个參数向量Θj和Derivative向量Dj。

那么我们首先将各层向量连起来。组成大vectorΘ和D,传入function,再在计算中进行下图中的reshape。分别取出进行计算。

技术分享

计算时。方法例如以下:

技术分享




===============================

(五)、Gradient checking


神经网络中计算起来数字千变万化难以掌握,那我们怎么知道它里头工作的对不正确呢?不怕,我们有法宝,就是gradient checking,通过check梯度推断我们的code有没有问题,ok?怎么做呢,看下边:

对于以下这个【Θ-J(Θ)】图,取Θ点左右各一点(Θ+ε),(Θ-ε),则有点Θ的导数(梯度)近似等于(J(Θ+ε)-J(Θ-ε))/(2ε)。技术分享

对于每一个參数的求导公式例如以下图所看到的:

技术分享

因为在back-propagation算法中我们一直能得到J(Θ)的导数D(derivative)。那么就能够将这个近似值与D进行比較。假设这两个结果相近就说明code正确,否则错误,例如以下图所看到的:

技术分享

Summary: 有下面几点须要注意

-在back propagation中计算出J(θ)对θ的导数D,并组成vector(Dvec)

-用numerical gradient check方法计算大概的梯度gradApprox=(J(Θ+ε)-J(Θ-ε))/(2ε)

-看是否得到同样(or相近)的结果

-(这一点很重要)停止check,仅仅用back propagation 来进行神经网络学习(否则会很慢,相当慢)

技术分享





===============================

(六)、Random Initialization


对于參数θ的initialization问题。我们之前採用所有赋0的方法。比方:

技术分享

this means all of your hidden units are computing all of the exact same function of the input. So this is a highly redundant representation. 由于一层内的全部计算都能够归结为1个。而这使得一些interesting的东西被ignore了。

所以我们应该打破这样的symmetry。randomly选取每个parameter,在[-ε,ε]范围内

技术分享





===============================

(七)、Putting it together

1. 选择神经网络结构

我们有非常多choices of network :

技术分享

那么怎么选择呢?

No. of input units: Dimension of features
No. output units: Number of classes
Reasonable default: 1 hidden layer, or if >1 hidden layer, have same no. of hidden units in every layer (usually the more the better)

2. 神经网络的训练

① Randomly initialize weights
② Implement forward propagation to get hθ(x(i)) for anyx(i)
③ Implement code to compute cost function J(θ)
④ Implement backprop to compute partial derivatives技术分享

技术分享

技术分享

技术分享

test:

技术分享


本章讲述了神经网络学习的过程,重点在于back-propagation算法,gradient-checking方法,希望可以有人用我之前这篇文章中的类似方法予以实现神经网络。

另外提供一篇作为Reference,供大家參考。


评论


亲,登录后才可以留言!