【Day 15】反向传播(Backpropagation)

  • 比Gradient Descent更有效率的演算法

连锁律(Chain Rule)

反向传播(Backpropagation)

  • 计算Loss对某一项参数 https://chart.googleapis.com/chart?cht=tx&chl=w 的偏微分。

根据Chain Rule可以把 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%20%7B%5Cpartial%20C%7D%7B%5Cpartial%20w%7D 写成 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w%7D%20%5C%20%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D,而计算 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w%7D 的过程我们称为正向传递(Forward pass),计算 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D 的过程我们称为反向传递(Backward pass)

正向传递(Forward pass)

  • 计算 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w%7D

从计算结果可以发现,https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w%7D 只要看 https://chart.googleapis.com/chart?cht=tx&chl=w 前面接的是什麽,https://chart.googleapis.com/chart?cht=tx&chl=w 的微分就是什麽。

要计算Neural Network里面的每一个weight对它的Activation function的输入 https://chart.googleapis.com/chart?cht=tx&chl=z 的偏微分,就只要把输入丢进去,然後去计算每一个Neuron的输出就可以了,这个步骤我们就称之为正向传递(Forward pass)

反向传递(Backward pass)

  • 计算 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D

假设Activation function是Sigmoid function,https://chart.googleapis.com/chart?cht=tx&chl=z 通过Sigmoid function得到 https://chart.googleapis.com/chart?cht=tx&chl=a,接着 https://chart.googleapis.com/chart?cht=tx&chl=a 会乘上一个weight再加上一些value得到 https://chart.googleapis.com/chart?cht=tx&chl=z'https://chart.googleapis.com/chart?cht=tx&chl=a 还会在乘上另一个weight再加上一些value得到 https://chart.googleapis.com/chart?cht=tx&chl=z''
https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D 经过Chain Rule写成 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20a%7D%7B%5Cpartial%20z%7D%20%5C%20%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20a%7D,其中 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20a%7D%7B%5Cpartial%20z%7D 就是这个Sigmoid function的微分。

https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20a%7D 经过Chain Rule写成 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20z'%7D%7B%5Cpartial%20a%7D%20%5C%20%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z'%7D%20%2B%20%5Cfrac%7B%5Cpartial%20z''%7D%7B%5Cpartial%20a%7D%20%5C%20%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z''%7D,而我们可以很容易看出 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20z'%7D%7B%5Cpartial%20a%7D%20%3D%20W_3%2C%20%5Cfrac%7B%5Cpartial%20z''%7D%7B%5Cpartial%20a%7D%20%3D%20W_4,但我们不知道 https://chart.googleapis.com/chart?cht=tx&chl=z'%2Cz''https://chart.googleapis.com/chart?cht=tx&chl=C 的关系,所以先假设我们知道 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z'%7D%2C%20%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z''%7D 的值。

而有了 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z'%7D%2C%20%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z''%7D 我们就可以算出 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D 得出下图的式子。

我们可以将那个式子画成像是Neuron一样,而根据前向传递我们知道了 https://chart.googleapis.com/chart?cht=tx&chl=z,所以 https://chart.googleapis.com/chart?cht=tx&chl=%5Csigma'(z) 是一个常数。

第一个Case:假设橘色的这两个Neuron是Output layer,那今天你要算 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z'%7D%2C%20%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z''%7D 就相对简单。

第二个Case:假设橘色的这两个Neuron不是Output layer,那根据前面学的我们想要算出前面的偏微分,就必须要先知道後面的偏微分,就等於是我们就要一直往後看下一个layer直到Output layer。

但是其实我们只需要换一个方向,从Output layer开始算回去的做法就叫做反向传递(Backward pass),我们可以建另外一个反向的Neural Network,它的Activation function需要先算完Forward pass之後才算的出来,其他都跟一般的Neural Network计算一样,就可以算出 https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D

总结


参考资料

李宏毅老师 - ML Lecture 7


<<:  Day 13: Structural patterns - Composite

>>:  #14 Automation (2)

[DAY1]什麽是聊天机器人?

聊天机器人主要分为两种类型: 以工作为导向 (宣告式) 的聊天机器是专注於执行一项功能的单一用途程序...

框架在手,工作我有:MockK的简介?真的只是简介⋯⋯

随着考试的日子越来越接近,系里的气氛也越来越紧张。 「这麽一观察,系里选修这门课的人还真多。」诗忆看...

【Day7】使用Django 产生 excel报表

之前因为可能因为需要使用收集的资料作分析,所以做了一个使用 Django来生成excel档案的功能,...

Day15 - this&Object Prototypes Ch3 Objects - Iteration 开头

搭配 in 的 for 回圈会搜寻物件中所有 property 为 enumerable 者 而使...

建立 Google App Script 专案(1)

什麽是 Google App Script (GAS)? 引述 Google 官方文件 的说明: 想...