【李宏毅机器学习笔记】7、反向传播(Backpropagation)

 

【李宏毅机器学习笔记】1、回归问题(Regression)

【李宏毅机器学习笔记】2、error产生自哪里?

【李宏毅机器学习笔记】3、gradient descent

【李宏毅机器学习笔记】4、Classification

【李宏毅机器学习笔记】5、Logistic Regression

【李宏毅机器学习笔记】6、简短介绍Deep Learning

【李宏毅机器学习笔记】7、反向传播(Backpropagation)

【李宏毅机器学习笔记】8、Tips for Training DNN

【李宏毅机器学习笔记】9、Convolutional Neural Network(CNN)

【李宏毅机器学习笔记】10、Why deep?(待填坑)

【李宏毅机器学习笔记】11、 Semi-supervised

【李宏毅机器学习笔记】 12、Unsupervised Learning - Linear Methods

【李宏毅机器学习笔记】 13、Unsupervised Learning - Word Embedding(待填坑)

【李宏毅机器学习笔记】 14、Unsupervised Learning - Neighbor Embedding(待填坑)

【李宏毅机器学习笔记】 15、Unsupervised Learning - Auto-encoder(待填坑)

【李宏毅机器学习笔记】 16、Unsupervised Learning - Deep Generative Model(待填坑)

【李宏毅机器学习笔记】 17、迁移学习(Transfer Learning)

【李宏毅机器学习笔记】 18、支持向量机(Support Vector Machine,SVM)

【李宏毅机器学习笔记】 19、Structured Learning - Introduction(待填坑)

【李宏毅机器学习笔记】 20、Structured Learning - Linear Model(待填坑)

【李宏毅机器学习笔记】 21、Structured Learning - Structured SVM(待填坑)

【李宏毅机器学习笔记】 22、Structured Learning - Sequence Labeling(待填坑)

【李宏毅机器学习笔记】 23、循环神经网络(Recurrent Neural Network,RNN)

【李宏毅机器学习笔记】 24、集成学习(Ensemble)

------------------------------------------------------------------------------------------------------

【李宏毅深度强化学习】视频地址:https://www.bilibili.com/video/av10590361?p=13

课件地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html

-------------------------------------------------------------------------------------------------------

使用反向传播(Backpropagation)原因

经过前面几篇笔记的介绍,知道可以用gradient descent来更新参数,使Loss Function最小化。

但是面对Neural Network可能上百万的参数,做gradient descent会很困难。所以需要引入反向传播(Backpropagation)使gradient descent 做得更有效率一点

链式法则(Chain Rule)

反向传播(Backpropagation)就用到链式法则(Chain Rule)的知识,没有涉及其他高深的知识。

反向传播(Backpropagation)

 C^n是估测出来的y和target值y\hat之间的距离,Loss Function则是所有 C^n 的累加。

对Loss Function求w的偏微分结果如图所示,等于。接下来就主要讲怎么解这个偏微分。

为方便讲解,取网络中的红色三角形标识的区域进一步讲解。

以图中的部分网络为例,根据链式法则可以知道,偏微分 

计算的过程叫做Forward pass,因为这一项是从网络由前往后计算得出的(等下就知道为什么是由前往后)。

计算的过程叫做Backward pass,因为这一项是从网络由后往前计算得出的(等下就知道为什么是由后往前)。

Forward pass

Forward pass就是计算  。以图中的例子,其实可以知道,这个偏微分的结果是可以口算的。

它都会等于weight前面的输入 x1,x2 。

举个更具体的例子,如图,每一个 都会等于前面weight的输入值。

Backward pass

 就不像前面Forward pass那么简单,因为 z 后面还要经过很多过程才能得到 C 。

但是不管那么多,先把  写成 

由于 z 通过sigmoid函数得到 a,所以 代表 sigmoid函数的微分。

然后还剩下 这一项怎么算呢?

 使用链式法则可以写成如图所示。

由于现在不知道网络后面又有怎样的过程,所以有两项是我们现在还不知道的。

这两项的计算方法等下再讲,现在先假设我们知道这两项的值,这样就能算出  的值,如下

 这个就是  的结果。

 把Backward pass的过程用另一种方式展现出来,如图所示,更能体现Backward pass由后往前的特点。

其中是一个常数,因为在Forward pass的过程就已经算出 z ,所以在z算出来的情况下,再经过sigmoid函数也仍然是一个固定的值。

所以在Backward pass由后往前的过程中,在三角形那里,做的运算并不是通过一个非线性函数,而是直接乘上一个常数 。

 

刚才为了简便,先假设了 这两项未知的值是已知,然后就能算出  。

下面来具体讲下如何计算那两项的结果。 

第一种情况:后面接的就已经是Output Layers

那很直接, 的计算结果就如图所示。

第二种情况:后面不是Output Layers,还有很多层

其实原理和前面例子的计算一样。

z对C的微分,取决于 z 后一层 的 z'对C的微分 和 z''对C的微分。

所以,如果 z' 和 z'' 后面还有很多层,那就一直往后推下去。直到最后一层,这时计算方法就如刚才的第一种情况那样可以直接算出来。然后再反推回来,知道最后一层就可以求倒数第二层,知道倒数第二层又可以求倒数第三层……

按刚才的方法来看,感觉挺复杂的。为了算第一层要算后面的每一层直到output layer,再反推回第一层。

所以为了使计算更有效率,就把刚才的顺序颠倒过来,直接从output layer开始算起,这样就发现每一层都能直接秒算。

以上图为例子,本来为了算出,需要先算出,……直到最后一层。

但现在从output layer开始算,只要算出,就能秒算出前面的,立刻变得有效率了。

总结

  1. 由前往后,做Forward Pass,算出 
  2. 由后往前,做Backward Pass,算出
  3. 两者相乘就是最后的结果 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值