BP反向傳播矩陣推導圖示詳解​

2021-02-15 機器學習算法與自然語言處理

轉載自 | PaperWeekly

©PaperWeekly 原創 · 作者|孫裕道

學校|北京郵電大學博士生

研究方向|GAN圖像生成、情緒對抗樣本生成

背景介紹

BP(反向傳播)是有 Geffrey Hinton 在 1988 年發表的論文《Learningrepresentations by back-propagating errors》中首次被提出來。

該論文從題目到內容到參考文獻一共 2 頁半,Hinton 也藉此工作榮獲 2018 年的圖領獎。在深度學習領域,BP 的重要程度在怎麼強調也不為過,本文會從矩陣的視角對 BP 進行詳細推導,為了更好地理解 BP 的工作原理,本文也畫了大量的示意圖幫助理解。

本文的公式經過自己很多次的推導打磨,盡力做到準確無誤,每一張圖也是反覆的捉摸力求精準表達。本文的閱讀難度確實很大,但是因為其重要,我覺得反覆抄寫下面的推導,也會有很多收穫。

引言

在吳恩達的斯坦福機器學習的講義中關於 BP 原理的介紹只給出了最後的 BP 矩陣的推導結果,略去了中間的推導過程。本文會對略去的推導過程進行補全。為了減少閱讀阻礙,BP 矩陣證明過程會從預備知識開始慢慢鋪展開來,其中最難啃的部分就是矩陣形式的鏈式法則。本文文章結構和的各個章節的內容如下:

section 3 是一些預備知識介紹了矩陣求導的細節,如果想要看懂之後的 BP 矩陣推導這部分的兩個小節一定要看明白

section 4 是關於 4 層無激活函數的 BP 推導細節section 5 是關於 L 層無激活函數的 BP 推導細節section 6 是關於 4 層含激活函數的 BP 推導細節section 7 是關於 L 層含激活函數的 BP 推導細節section 8 是對吳恩達機器學習講義中關於 BP 章節結果的驗證

預備知識

3.1 推導形式1

已知,

3.2 推導形式2

 

▲ 圖1:4層無激活函數的前向傳播過程

圖 1 表示的是 4 層無激活函數神經網絡的前向傳播過程,其中損失函數如下所示:

根據公式(13),(14),(15)將 4 層無激活函數的 BP 原理可以形象地表示為圖 2,其中圖中虛線框表示為各個層權重參數的梯度,可以發現各層的權重參數梯度由前一層網絡的前饋計算值與後一層網絡傳播的誤差信息整合而來。

▲ 圖2:4層無激活函數的BP原理圖

L層無激活函數的神經網絡

圖 3 表示的是 L 層無激活函數神經網絡的前向傳播過程,其中損失函數如下所示:根據公式(20)將 L 層無激活函數的 BP 原理可以形象地表示為圖 4 所示:

圖 5 表示的是 4 層含激活函數神經網絡的前向傳播過程,其中損失函數如下所示:令

根據公式(25),(26),(27)將 4 層含激活函數的 BP 原理可以形象地表示為圖 6,跟 section4 中的 4 層無激活函數 BP 原理示意圖的差異在於後向傳播的誤差信息需要多乘一個對角矩陣

圖 7 表示的是 L 層含激活函數神經網絡的前向傳播過程,其中損失函數如下所示:根據公式(32)將 L 層含激活函數的 BP 原理可以形象地表示為圖8所示:

驗證BP矩陣推導

本節主要是對吳恩達機器學習講義中(ML-AndrewNg-Notes: Coursera)關於 BP 原理結論部分的驗證,所以本文的主要目的是驗證吳中的關於 BP 結論與本文的 section 4 之間的結論是否一致。由於符號和表示形式的差異,將吳中關於 BP 原理部分的描述用藍色字體表示(該部分在),將驗證過程用紅色字體表示。

▲ 圖9:吳恩達機器學習講義中的網絡結構

從最後一層的誤差開始計算,誤差是激活單元的預測

其中

因為第一層是輸入變量,不存在誤差,有了所有的誤差表達式之後,便可以計算各個層權重的偏導數為:

其中,

證明

其中,

下載1:四件套

在機器學習算法與自然語言處理公眾號後臺回復「四件套」

即可獲取學習TensorFlow,Pytorch,機器學習,深度學習四件套!


下載2:倉庫地址共享

在機器學習算法與自然語言處理公眾號後臺回復「代碼」

即可獲取195篇NAACL+295篇ACL2019有代碼開源的論文。開源地址如下:https://github.com/yizhen20133868/NLP-Conferences-Code

重磅!機器學習算法與自然語言處理交流群已正式成立

群內有大量資源,歡迎大家進群學習!

額外贈送福利資源!深度學習與神經網絡,pytorch官方中文教程,利用Python進行數據分析,機器學習學習筆記,pandas官方文檔中文版,effective java(中文版)等20項福利資源

獲取方式:進入群後點開群公告即可領取下載連結

注意:請大家添加時修改備註為 [學校/公司 + 姓名 + 方向]

例如 —— 哈工大+張三+對話系統。

號主,微商請自覺繞道。謝謝!

推薦閱讀:

Tensorflow 的 NCE-Loss 的實現和 word2vec

多模態深度學習綜述:網絡結構設計和模態融合方法匯總

awesome-adversarial-machine-learning資源列表

相關焦點

  • Numpy編寫BP傳播過程全解
    引言BP反向傳播矩陣推導圖示詳解一文中在矩陣視角下對 BP 的原理進行了詳細的介紹
  • 反向傳播(BP)算法的數學原理
    本文詳細介紹神經網絡損失函數的梯度計算方法,即反向傳播算法(簡稱BP算法)。這篇論文介紹了一系列神經網絡模型,證實了反向傳播算法在這些神經網絡中高效的訓練/學習性能,使得利用神經網絡解決一系列過去無解的難題成為可能。直到現在,BP算法仍然是訓練神經網絡模型的基礎算法。BP算法涉及大量的數學推導,如果對數學不感興趣但又想學習神經網絡,完全可以把BP算法看做一個黑盒來用,而不必關心其推導細節。
  • 乾貨 | 深度學習之CNN反向傳播算法詳解
    要套用DNN的反向傳播算法到CNN,有幾個問題需要解決:1)池化層沒有激活函數,這個問題倒比較好解決,我們可以令池化層的激活函數為σ(z)=z,即激活後就是自己本身。這樣池化層激活函數的導數為1.2)池化層在前向傳播的時候,對輸入進行了壓縮,那麼我們現在需要向前反向推導δl−1,這個推導方法和DNN完全不同。
  • 算法推導:反向傳播算法
    13.3.1 反向傳播算法推導如下圖所示為一個神經網絡的結構圖,由於本文主要探討激活函數在反向傳播過程中的作用,因此不會帶入數值進行計算,而是以兩個權重的更新為案例進行公式的推導,分別為如何通過反向傳播算法更新和的值。
  • 人人都能看懂的LSTM介紹及反向傳播算法推導(非常詳細)
    LSTM的變種以及前向、反向傳播目前所描述的還只是一個相當一般化的 LSTM 網絡。但並非所有 LSTM 網絡都和之前描述的一樣。事實上,幾乎所有文章都會改進 LSTM 網絡得到一個特定版本。差別是次要的,但有必要認識一下這些變種。
  • 神經網絡反向傳播的數學原理
    和接下來介紹矩陣、向量求導的維數相容原則利用維數相容原則快速推導反向傳播編程實現前向傳播、反向傳播卷積神經網絡的反向傳播快速矩陣、向量求導這一節展示如何使用鏈式法則、轉置、組合等技巧來快速完成對矩陣對於矩陣、向量求導:如何證明經過維數相容原則調整後的結果是正確的呢?直覺!簡單就是美...快速反向傳播神經網絡的反向傳播求得 「各層」 參數
  • 【強基固本】卷積神經網絡(CNN)反向傳播算法
    現在我們想把同樣的思想用到CNN中,很明顯,CNN有些不同的地方,不能直接去套用DNN的反向傳播算法的公式。2)池化層在前向傳播的時候,對輸入進行了壓縮,那麼我們現在需要向前反向推導 從上面可以看出,問題1比較好解決,但是問題2,3,4就需要好好的動一番腦筋了,而問題2,3,4也是解決CNN反向傳播算法的關鍵所在。
  • AI從入門到放棄:BP神經網絡算法推導及代碼實現筆記
    我們的方法是:訓練一個能根據誤差不斷自我調整的模型,訓練模型的步驟是:正向傳播:把點的坐標數據輸入神經網絡,然後開始一層一層的傳播下去,直到輸出層輸出結果。反向傳播(BP):就好比戰士去靶場打靶,槍的擺放位置(輸入),和靶心(期望的輸出)是已知。
  • 詳解Batch Normalization及其反向傳播
    (注意BN的線性變換和一般隱藏層的線性變換仍有區別,前者是element-wise的,後者是矩陣乘法。)反向傳播再來用反向傳播求梯度。實現參考cs231n的assignment2,我們將Batch Normalization分成正向(只包括訓練)和反向兩個過程。
  • OpenGL矩陣變換的數學推導
    這些矩陣當中最重要的就是模型矩陣(Model Matrix)、視圖矩陣(View Matrix)、投影矩陣(Projection Matrix),本文也只分析這3個矩陣的數學推導過程。這三個矩陣的計算OpenGL的API都為我們封裝好了,我們在實際開發時,只需要給API傳對應的參數就能得到這些矩陣,下面帶大家來看看究竟是怎樣計算得到的。
  • 知識卡片 反向傳播中的梯度
    前言:本文介紹神經網絡中通過反向傳播計算梯度的原理,並通過代碼演示計算正向和反向傳播中的矩陣相乘得出梯度。正向傳播計算出來的結果,誤差較大,因此通過反向傳播不斷迭代修改參數,使得誤差降低。 反向傳播從輸出層傳到輸入層,逐層自頂向下計算損失函數,計算神經元權值的梯度,作為修改神經元的依據。當誤差達到期望值時,或者迭代次數超過預設的閾值時學習結束。
  • 誤差反向傳播算法淺解
    本文主要內容:神經網絡應用梯度下降的直觀理解反向傳播算法的學習過程反向傳播算法推導總結探討本文靈感來源參考文獻直觀理解考慮一個有兩個輸入單元、一個輸出單元、沒有隱藏單元的簡單神經網絡。反向傳播算法推導為了最小化誤差E,最終歸結為優化問題。前面說過,反向傳播算法的目的是找到一組能最大限度地減小誤差的權重,在反向傳播中使用的方法是梯度下降法。這樣我們就需要計算誤差函數E對權重的偏導。由上文,誤差函數對權重w_ij的偏導數是三個偏導數的乘積:
  • 反向傳播算法的工作原理(2)
    反向傳播算法根據前述方程,下面以算法的形式,顯示地寫出反向傳播算法:研究一下這個算法,你就會明白為什麼它被稱為反向傳播。在網絡中反向操作似乎很奇怪,但是如果你考慮反向傳播的證據,反向傳播源於這樣一個事實:代價函數是網絡輸出的函數。為了了解代價是如何隨先前的權重和偏差而變化的,我們需要反覆應用鏈式規則,在各個層中反向操作以獲得可用的表達式。為什麼說反向傳播是一種快速算法?為什麼說反向傳播是一種快速算法?為了回答這個問題,我們思考一下計算梯度的另一種方法。
  • RNN系列教程之三 | 基於時間的反向傳播算法和梯度消失問題
    前一部分中,我們介紹了如何在Python和Theano框架下實現RNN,但還未深入了解時序反向傳播算法(BPTT)是如何計算梯度的。這周,我們將簡單介紹BPTT,並解釋其與傳統反向傳播的區別。我們還將了解梯度消失問題,這也是推動LSTM(長短時記憶)和GRU(門控循環單元)(目前在NLP和其他領域最流行且有效模型)發展的原因。
  • 深度學習之DNN與反向傳播算法總結
    在深度神經網絡(DNN)模型與前向傳播算法中,我們對DNN的模型和前向傳播算法做了總結,這裡我們更進一步,對DNN的反向傳播算法(Back Propagation,BP)做一個總結。在了解DNN的反向傳播算法前,我們先要知道DNN反向傳播算法要解決的問題,也就是說,什麼時候我們需要這個反向傳播算法?
  • CS231N 04: 反向傳播和損失函數
    其中,前向傳播從輸入計算到輸出(綠色),反向傳播從尾部開始,根據鏈式法則遞歸地向前計算梯度(顯示為紅色),一直到網絡的輸入端。然而如此複雜的運算並不必要,因為我們不需要一個明確的函數來計算梯度,只需知道如何使用反向傳播計算梯度即可。
  • 反向傳播算法最全解讀,機器學習進階必看!
    目前網絡上關於反向傳播算法的教程已經很多,那我們還有必要再寫一份教程嗎?答案是『需要』。為什麼這麼說呢?我們教員Sanjeev最近要給本科生上一門人工智慧的課,儘管網上有很多反向傳播算法的教程,但他卻找不到一份令他滿意的教程,因此我們決定自己寫一份關於反向傳播算法的教程,介紹一下反向傳播算法的歷史背景、原理、以及一些最新研究成果。
  • 學界 Andrej Karpathy:你為什麼應該理解反向傳播
    這些學生必須在原始的 numpy 的每一層中實現前向和反向傳播。然而,一些學生在黑板上留下這些抱怨。「在現實世界中,框架(比如 TensorFlow)會自動計算反向傳播,為什麼我們還一定要寫它們?」這看起來非常合理,如果課程結束後你永遠不會寫反向傳播,為什麼還要練習呢?難道是因為我們自己的興趣而折磨學生嗎?
  • Mini-patch:從零開始的反向傳播(附詳細代碼)
    文章將重點介紹mini-patch逐步實現的反向傳播算法。有許多教程和博客詳細介紹了反向傳播算法,以及演算和代數背後的所有邏輯。因此,我將跳過這一部分,並在數學和使用Python的實現中切入方程式。關於為什麼我們應該從頭開始實現一個算法,即使幾乎所有框架都已經可以使用它,這也是一個長期存在的普遍問題。
  • 大腦與反向傳播(Backpropagation and the brain)--上篇
    深層人工神經網絡中的反向傳播算法解決了此問題,但它一直被視為生物學問題。儘管如此,神經科學的最新發展和人工神經網絡的成功重新激發了人們對反向傳播是否能夠幫助我們理解皮質學習的興趣。反向傳播算法通過反饋連接傳遞誤差信號來計算突觸的更新值,從而快速學習。儘管反饋連接在皮質中無處不在,但很難看到它們如何傳遞反向傳播公式所需的誤差信號。