BP 算法之向后傳導


 

0. 前言

上一篇文章我們從十分直觀的角度理順了 BP 算法的流程,總結起來,一次 BP 權值調整的過程是這樣的:

  1. 輸入向量從輸入節點依次向后傳播,我們可以計算出 the activation of all the hidden and output units

  2. 計算每個輸出節點的殘差

  3. 輸出節點的殘差依次向前傳播,由此可以求得各個隱層的殘差

  4. 由隱層的殘差可以求得隱層左側權重的更新

雖然我們理順了過程,但是殘留下來的問題太多了。比如,這里的 “殘差” 究竟是什么,為什么由 “殘差” 乘以前一節點的 activation 的值累加起來就可以求得權重的更新。這其中說白的就是 partial derivatives 的 chain rule 的應用,在數學推導上非常簡單,在很多資料和博客里面都有推導和介紹。但是如果我們用另一種思維來圖解向后傳導的原理,也是非常意思和有啟發性的事情。OK, 我們從最基礎的 chain rule 開始說起。

1. Chain Rule

Chain rule (鏈式法則)是復合函數的求導法則,首先看一下最簡單的形式:

若h(x)=f(g(x)),則h’(x)=f’(g(x))g’(x)

很簡單哈,但是用一個流程圖來表示,事情就開始變得有點意思了:

視野擴大一點,我們假設這兩個變換只是一連串變換中的兩個:


All needed information is local!!!
也就是說,要求某一個節點上的導數,你需要的信息僅僅是在你后面的那個節點的導數與節點本身函數變換的導數之間的乘積。

如果把這個思想放到 LR 中,LR 的 Loss function (label 為 1 ,損失函數為概率的負對數)不就是一個復合函數嗎?表示成一個流程圖就是:

前面我們談過 logistic regression 的問題,回想一下,我們無非就是想求得第一層與第二層之間的連線 (weights) 的偏導來進行梯度下降以訓練模型的,試試用圖來表示是個什么樣子呢?


PS:可以看到,我們之前的 LR Model 只包含了前面兩個框,輸出概率 p 就 OK 了。但是在訓練模型計算梯度的時候,我們並不關注輸出的是什么,我們關注的是你的 Loss Function. 建立的是直接由輸出到 Loss Function 的框架, 比我們之前的模型多一個計算損失函數的節點。

2. F-PROP / B-PROP

反向傳導的思想可以讓我們重新認識線性分類器 LMS (上篇文章有介紹) 和 LR 。但是 BP 算法和它們稍稍有點不同,不同點在於隱層的特性(隱層的值是一個變量, LR 的輸入是一個常量)。下面畫了一個圖,這里我偷了一下懶,並沒有非線性的 sigmoid function 單獨分離開來,虛線所畫的紅色框框就是我們下面要討論的東東:


注: hidden units (圖中為 x) 是一個變量,連接的 weights (圖中為 ) 也是一個變量

兩個變量,對 x 和 theta 分別求偏導就 OK 了,求 x 的偏導的時候把 theta 當成一個常量,由於二者是相乘關系,得到的就是 theta, 對 theta 求偏導得到 x,這就解釋了之前為什么要乘以權重或者 x 的問題。

用模型來表示存在兩個變量下求偏導的情況,在 F-PROP 階段:

在 B-PROP 階段:

3. 總結

在 BP 算法中,我們 backpropagation 的殘差其實是對偏導或者導數的計算。當然,在數學上,你也可以對每個權重利用 chain rule 進行偏導計算,得到每個權重的 update, 但是這樣顯然有很多重復計算, 而 BP 在一定程度上解決了這個問題。歸根結底, backpropagation technique provide a computationally efficient method for evaluating such derivatives.

 

 


參考資料:

[1]: NEURAL NETS FOR VISION CVPR 2012 Tutorial on Deep Learning
[2]: PRML chapter 05, Bishop

[3]: BP 算法之一種直觀的解釋

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM