【李宏毅机器学习笔记】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. 两者相乘就是最后的结果 
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值