Machine Learning - Andrew Ng 笔记(3)

Neural Networks

为什么需要神经网络算法?

Non-Linear Hypotheses

如上图,我们需要对复杂的样本进行分类,那么Linear的肯定不能满足我们的要求,但是如果使用Non-Linear的会产生过多的特征,(上图假设原特性有100个的话,如果是二次多项式展开,那么特性会膨胀到将近5000个)过多的特征将会导致overfitting,而Neural Networks恰好可以解决这个问题,这就是学习Neural Networks的动机.

Model Representation I

神经网络算法是用来模拟人类大脑行为的算法,具体来说就是模拟人类神经元的工作流程,神经树突作为输入(对应特性),神经细胞作为计算,神经轴作为输出(对应h_\theta(x)的值),如下图:

Neural Network

其中Layer1被称为Input Layer,Layer2被称为Hidden Layer, 等被称为activation function(sigmoid是一种常见的激活函数),Layer3被称为output layer, 被称为bias unit.
Neural Network

为的原因:是layer j 映射到 layer (j+1)的函数的参数,想象,加上bias unit之后,X是一个的矩阵,是一个的矩阵,那么可以推导出必须要是一个的矩阵.

Model Representation II

recap

a=g(z)

在这里我们用sigmoid函数作为layer2的激活函数,可以得到上面的表达式,继续精简,将vector x看作,则有,

vectorization

z^{(j)}=\Theta^{(j-1)}a^{(j-1)}
a^{(j)}=g(z^{(j)})
假设j+1层是output layer,那么有:
h_\Theta^{(x)}=a^{(j+1)}=g(z^{(j+1)})

Neural Network architecture

forward propagation

Neural Network做的事情就是,把原始的特征x_1,x_2...x_n经过\Theta^{(1)}处理的输出作为layer 2的输入,layer 2的新特征a_1,a_2...a_{n_2}经过\Theta^{(2)}的处理得到输出作为layer 3的输入,依次往前传播.仔细观察最后一层(如上图layer4),layer3 -> layer4的处理如果使用的激活函数是sigmoid函数的化,实际上就是之前讲过的logistic regression,只是不同的是他不再局限于使用原始的特征,而是通过中间的hidden layers加工后的新特征当作新特征,这样做的好处就是可以得到更灵活的h_\Theta(x)(对比本笔记最开始那张图中僵硬的x的多项展开式).

Examples and Intuitions

OR
NOR

Multiclass Classification

One vs all

之前讨论的分类问题都是binary的,实际情况中可能如上图所示,结果并不是binary的,解决的办法还是和之前logistic regression一样使用one vs all的思想,此时我们最后一层返回的不是一个标量,而是一个向量:


y

以上4种情况分别对应行人,汽车,摩托车,卡车.

Cost Function

Neural Networking的代价函数如下:

Neural Networking Cost Function

其中:
L = 网络中layer的数量
= 第层中unit的数量(不包含bias unit)
K = output layer中unit的数量?
对比logistic regression的代价函数(如下),可以发现两者之间的形式相同:
Logistic Regression Cost Function

  • "[","]"中的值都是某个样本在某种预测下的代价,只不过对于Neural Networking来说,output layer的unit可能有多个,所以需要全部累加
  • regularization部分做的都是将所有\theta^2相加(除了\theta_0),只不过对于Neural Networking来说,\Theta^{(i)}是一个矩阵而已
    Cost part & Regularization part

Backpropagation Algorithm

Backpropagation算法就是用在Neural Networking中用来求梯度的算法,之后我们可以通过梯度下降或者其他advanced optimization methods来求出最优的\theta使得J(\theta)最小.
该算法分两个阶段,第一步forward propagation求a^{(j)}

forward propagation

第二步back propagation
back propagation

Backpropagation Intuition

Error

Compute Error

从数学形式上来看,BP算法和FP类似,只不过是换了个方向:
FP


BP


可以看到FP和BP计算时形式几乎一致,只不过FP时from left to right依次计算,BP是from right to left依次计算(注意:\delta_1^{(4)}=a_1^{(4)} - y^{(i)},上图有误)

Unrolling Parameters

上文中我们得到了costFunction的定义,也有了partial derivative,所以我么可以和之前一样用fminunc()方法来costFunction的局部最优解,fminunc()定义如下:

fminunc

可以看到fminunc函数需要传入的参数都是vector,但是在Neural networking中,无论是(多个vector),还是(partial derivative)都是matrices,所以我们需要unrolling操作将上两者转换成vector给到fminunc函数.
unrolling

如上图,thetaVector将作为initalTheta给到fminunc函数,用于fminunc函数的costFunction基本如下:
costFunction

上图中,由thetaVec还原得到我们可以使用reshape函数,如下:
reshape

Gradient Checking

backprop算法会有些bug使得我们在运算的过程中出现J(\Theta)确实在下降但是实际上Neural Networking没有正常在工作.
所以一般来说我们需要实现Gradient Checking来校验backprop算法是否正确工作,实现细节如下:
首先对于J{(\Theta)}来说,求导公式如下:

derivative of cost function

因为是一个matrix,我们将其unrolling成vector之后可以方便的循环求出对于矩阵中每个的偏导数,如下:
partial derivative

最后如果backprop算法求得的gradVecgradApprox则证明backprop在正常工作.在校验过bakprop算法正确性之后我们就可以将计算过程中的Gradient Checking功能关闭,因为他实在是太慢了.

Random Initialization

对于Neural Networking来说,在优化J(\Theta)的时候,无论是用fminunc还是其他优化算法,初始的\Theta不能设置为相同(比如zeros(m*n)直接丢到fminunc中去),因为这样会导致hidden layer中每一个激活函数计算的值都是一样,不仅如此,每一层的\delta值也会一样,J(\Theta)对每一个\Theta_{i,j}^{(l)}求偏导值也一样,这意味着即使更新过\Theta之后\Theta中的元素依然会保持一致.所以我们需要使用Random Initialization,如下:

Random Initialization

注意:

  • 这里的\epsilon和Gradient Checking中的没有关系
  • rand(x,y)返回的矩阵元素在(0,1)之间,所以可以确保经过处理之后的-\epsilon<\Theta<\epsilon

Putting it Together

梳理下Neural Networking全过程:
1.构建一个网络架构,input layer unit num?hidden layer num/unit num?output layer num.

Pick a network architecture

2.训练Neural network,初始化,对于每一个样本计算,实现代价函数,实现backprop,使用gradient checking校验backprop是否正常工作,使用比如fminunc求出最优
for loop

Neural networking intuition

注意:不同于之前的,Neural Network的代价函数是非凸的(non-convex),即很可能无法到达global minimum,不过local minimum也ok.

总结

做过ex4的练习之后,发现完成一个NN算法要经过以下几个主要步骤:
1.可以使用vectorization形式计算forward propagation部分
2.之后对于每个样本,我们去求每一个\delta^{(l)},并且在每一次循环中修改\Delta^{(l)}
3.循环结束之后对\Delta^{(l)}进行regularization,即是D^{(l)}
以上过程要谨记\Delta^{(l)}\Theta^{(l)}矩阵形式是一致的
4.再得到D^{(l)}之后我们需要使用Gradient Checking去校验BP是否正常工作.
5.至此我们已经得到了正确的costFunction和grad,之后在使用fminunc获得最优\Theta,这样一来NN算法就完整了
6.之后就是给训练集之外的数据看看classification的准确性之类的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容