反向傳播( backpropagation ),可以這樣直觀理解!

2022-01-10 程式設計師zhenguo
0 回顧

本系列是 史丹福大學自然語言處理-cs224課程的筆記4:神經網絡的反向傳播的直觀解釋,前 4 篇筆記如下:深度學習和自然語言處理:介紹;史丹福大學NLP-cs224課程筆記2:詞向量;一文了解Word2vec之Skip-Gram訓練網絡的3種技術;TensorFlow 實戰 3層網絡求解嵌入詞向量,附代碼詳解

接下來,這門課程講解的是 TensorFlow 的相關知識,鑑於之前對 TensorFlow的推送,已經基本覆蓋了本課程所講,不再重複,對於想了解這部分的小夥伴可以參考如下,在公眾號後臺回覆: dl,可以找到詳細、快速入門 TF 的PPT,回復 12 找到 TF 的已推筆記。

提到神經網絡,不會不說反向傳播 ( backpropagation ),正是靠著 BP 才調整並找到了合適的節點間的權重參數,既然這麼重要,再好好理解下 BP ,下面借鑑本課程中推薦的關於 BP 的閱讀材料,在這裡整理成筆記,分享給大家。

1 BP 簡介

BP 是一種通過遞歸應用l鏈式法則計算梯度的方法。 對這個過程的理解對於我們高效地開發,設計,調試神經網絡是直觀重要的。

BP 問題本質上是研究 f 在 x 處的偏導。我們之所以對這個問題感興趣是因為某個對應於具體問題的神經網絡,f 對應著 損失函數 L , 輸入 x 包括訓練數據和神經網絡的權重參數。

例如,損失函數可能是 SVM 損失函數,輸入的訓練數據 (xi ,yi),i=1…N ,權重參數分別為 W,b. 記住,就像是在機器學習中,我們通常認為訓練數據是給定且固定的,權重參數認為是我們可以改變被我們控制的。因此,儘管我們能容易地利用反向傳播計算在每一個輸入樣本點 xi 的梯度,但是,實際上我們只計算在參數W,b 的梯度,進一步去更新參數W,b .

2 梯度簡介

從簡單談起,考慮函數 f (x,y)=xy. 求各自的偏導過程如下:

這個求偏導的過程告訴我們, 一個函數對於某個變量的變化率等於如下極限:

如果 x=4, y=−3 則 f(x,y) = −12 ,因此,∂f / ∂x = −3.  這個式子告訴我們,假如我們增加 x 一點,那麼整個表達式將會減少這個量的 3 倍。

值得一提的是, ∇f  這個標記的含義是偏微分的向量,因此,我們得到: ∇f=[∂f / ∂x,∂f / ∂y]=[ y,x ].  儘管梯度從技術角度講是一個向量,但是我們經常稱為 對 x 的梯度,而不是更準確的術語:對 x 的偏微分。

3 鏈式法則

讓我們考慮一個稍顯複雜的表達式,f (x,y,z)=(x+y) z. 為了更直觀地理解反向傳播,我們將這個表達式拆成兩部分,將 (x+y) 標記為 q  , 因此  f=qz.  更多地,我們知道如何計算這兩個表達式的偏導:

∂f / ∂q = z

∂f / ∂z = q 

因為 q = (x+y) ,所以,

∂q / ∂x=1

∂q / ∂y=1

鏈式法則 ( chain rule ) 告訴我們正確的連結這些梯度表達式的方法是通過相乘來做,因此,   

∂f/ ∂x=∂f /∂q*∂q /∂x

編碼實現:

# set some inputs

x = -2;

y = 5;

z = -4

# perform the forward pass

q = x + y # q becomes 3

f = q * z # f becomes -12# perform the backward pass (backpropagation) in reverse order:# first backprop through f = q * z

dfdz = q # df/dz = q, so gradient on z becomes 3

dfdq = z # df/dq = z, so gradient on q becomes -4# now backprop through q = x + y

dfdx = 1.0 * dfdq # dq/dx = 1. And the multiplication here is the chain rule!

dfdy = 1.0 * dfdq # dq/dy = 1

將這個過程可視化的圖形顯示如下:

前向傳播 ( forward pass ) 計算開始於輸入端,結束到輸出端,圖中綠色表示,輸入分別為: x = -2, y = 5, z = -4 , 因此, q = 3, q 乘以 -4 後 f 得到 -12 .

反向傳播( backward pass ) 卻開始於輸出端,然後遞歸地應用鏈式規則計算梯度,圖中紅顏色所示,f 增加 1,表現在 q 上就是使得 它變小 4, 使得 z 增加 3,q 節點還沒有傳播到輸入端,所以 q 繼續向後傳播影響到 x, y, 根據 q 對 x 和 y 的梯度公式, 得到 x 變化 -4,  y 也會變化 -4. 

一個複雜點的例子:

將上個式子鏈式分解為如下:

可視化正向傳播,反向傳播,規則和上個例子一致,綠色代表輸入值,紅色代表改變量。大家不妨詳細分析一下!

相關連結

[1] Derivatives, Backpropagation, and Vectorization

http://cs231n.github.io/optimization-2/

點擊以下標題查看相關內容: 

關於算法channel

算法channel是一個提供系統入門,工程與學術相結合的原創乾貨公眾號,包括基礎算法,機器學習,深度學習,NLP,工具庫使用等10餘個頻道,如果你對算法和人工智慧感興趣,歡迎在公眾號後臺點擊「交流群」。

相關焦點

  • 大腦與反向傳播(Backpropagation and the brain)--上篇
    大腦與反向傳播(Backpropagation and the brain)Timothy P. Lillicrap, Adam Santoro, Luke Marris, Colin J. 深層人工神經網絡中的反向傳播算法解決了此問題,但它一直被視為生物學問題。儘管如此,神經科學的最新發展和人工神經網絡的成功重新激發了人們對反向傳播是否能夠幫助我們理解皮質學習的興趣。反向傳播算法通過反饋連接傳遞誤差信號來計算突觸的更新值,從而快速學習。儘管反饋連接在皮質中無處不在,但很難看到它們如何傳遞反向傳播公式所需的誤差信號。
  • 重磅推薦:大腦與反向傳播(Backpropagation and the brain)--下篇
    該假設的主要創新點在於,它避免了傳播活動性和誤差導數。與之不同的是,NGRAD基於這樣的思想,即來自目標的更大的空間或時間範圍的高層活動可以推動較低層次的活動,使它們的值與高層活動或理想輸出更加匹配。而且,在較低級別活動中引起的變化可用於對局部可用信號計算類似反向傳播的權重更新。因此,它的基本思想是自上而下驅動的活動可以驅動學習,而不需要在各層之間保留誤差信息。
  • 誤差反向傳播算法淺解
    本文主要內容:神經網絡應用梯度下降的直觀理解反向傳播算法的學習過程反向傳播算法推導總結探討本文靈感來源參考文獻直觀理解考慮一個有兩個輸入單元、一個輸出單元、沒有隱藏單元的簡單神經網絡。反向傳播算法推導為了最小化誤差E,最終歸結為優化問題。前面說過,反向傳播算法的目的是找到一組能最大限度地減小誤差的權重,在反向傳播中使用的方法是梯度下降法。這樣我們就需要計算誤差函數E對權重的偏導。
  • CS231N 04: 反向傳播和損失函數
    其中,前向傳播從輸入計算到輸出(綠色),反向傳播從尾部開始,根據鏈式法則遞歸地向前計算梯度(顯示為紅色),一直到網絡的輸入端。phew對前向傳播變量進行緩存:在計算反向傳播時,前向傳播過程中得到的一些中間變量非常有用。在實際操作中,最好代碼實現對於這些中間變量的緩存,這樣在反向傳播的時候也能用上它們。
  • 重磅推薦:大腦與反向傳播(Backpropagation and the brain)--上篇
    大腦與反向傳播(Backpropagation and the brain)Timothy P. Lillicrap, Adam Santoro, Luke Marris, Colin J. 深層人工神經網絡中的反向傳播算法解決了此問題,但它一直被視為生物學問題。儘管如此,神經科學的最新發展和人工神經網絡的成功重新激發了人們對反向傳播是否能夠幫助我們理解皮質學習的興趣。反向傳播算法通過反饋連接傳遞誤差信號來計算突觸的更新值,從而快速學習。儘管反饋連接在皮質中無處不在,但很難看到它們如何傳遞反向傳播公式所需的誤差信號。
  • 春節充電系列:李宏毅2017機器學習課程學習筆記07之反向傳播(Back Propagation)
    :李宏毅2017機器學習課程學習筆記06之深度學習入門課件網址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html視頻網址:https://www.bilibili.com/video/av15889450/index_1.html李宏毅機器學習筆記7 反向傳播
  • 【CS224n筆記】 L4 Backpropagation andComputationGraphs
    Backpropagation我們幾乎已經向你們展示了反向傳播:求導並使用(廣義)鏈式法則另一個技巧:在計算較低層的導數時,我們重用對較高層計算的導數,以使計算最小化2. Computation Graphs and Backpropagation我們把神經網絡方程表示成一個圖
  • 一文弄懂神經網絡中的反向傳播法——Back Propagation
    反向傳播法其實是神經網絡的基礎了,但是很多人在學的時候總是會遇到一些問題,或者看到大篇的公式覺得好像很難就退縮了,其實不難,就是一個鏈式求導法則反覆用。如果不想看公式,可以直接把數值帶進去,實際的計算一下,體會一下這個過程之後再來推導公式,這樣就會覺得很容易了。說到神經網絡,大家看到這個圖應該不陌生:
  • 大腦中的反向傳播_湃客_澎湃新聞-The Paper
    這樣一個誤差函數可以告訴我們:這個網絡目前表現如何?我們應該如何調整其中的神經元連接來減少誤差?當前,「backprop」(即back propagation,反向傳播之簡稱)是機器學習領域最常用、最成功的深度神經網絡訓練算法。用backprop訓練的網絡在最近的機器學習浪潮中佔據著中流砥柱的地位,承擔上了語音和圖像識別、語言翻譯等任務。
  • 知識卡片 反向傳播中的梯度
    前言:本文介紹神經網絡中通過反向傳播計算梯度的原理,並通過代碼演示計算正向和反向傳播中的矩陣相乘得出梯度。 反向傳播中的梯度 反向傳播(backpropagation)中的梯度
  • 卷積神經網絡(CNN)反向傳播算法推導
    首先我給大家介紹一下我分析delta誤差反向傳播過程的簡單方法,如果神經網絡l+1層某個結點的delta誤差要傳到l層,我們就去找前向傳播時l+1層的這個結點和第l層的哪些結點有關係,權重是多少,那麼反向傳播時,delta誤差就會乘上相同的權重傳播回來。
  • 學界 Andrej Karpathy:你為什麼應該理解反向傳播
    所以,讓我們來看一些非常清楚的例子,這是一種相當直觀的方式。帶有前向傳播(黑色)和反向傳播(紅色)的 Batch Norm 層的計算圖在 S 型函數上的梯度消失從這裡開始會很簡單。但如果是這樣,S 型非線性函數的局部梯度 z*(1-z) 在兩種情況下都會是 0(梯度消失),使得 x 和 W 的梯度都是 0。在鏈式反應下,之後的反向傳播相乘之後得到的都會是 0。
  • 你真的理解反向傳播嗎?面試必備
    反向傳播問題經常出現,不少人碰到時仍覺得十分棘手。最近,Medium上的一位機器學習初學者Ryan Gotesman,在學習吳恩達老師廣受歡迎的Machine Learning課程時,遇到一些困難。Ryan眼中的學習過程是這樣的:線性回歸,檢查,邏輯回歸,檢查,梯度下降,檢查,檢查,再檢查……接著,Ryan又學習了神經網絡和模型訓練的相應算法,即反向傳播。
  • 徹底解決梯度爆炸問題,新方法不用反向傳播也能訓練ResNet
    機器之心報導參與:思、一鳴反向傳播是深度學習算法中必不可少的組成部分,但是其固有的梯度爆炸(消失),計算速度慢等問題一直困擾著學界。近日,紐西蘭維多利亞惠靈頓大學的研究者提出了一種新型的算法,可以讓深度學習在不依賴反向傳播的情況下進行收斂,徹底解決了梯度爆炸問題。同時,研究者表示,只需要額外訓練單層的網絡就可以達到圖像分類中的 SOTA 性能。
  • 用反向傳播算法解釋大腦學習過程?Hinton等人新研究登Nature子刊
    機器之心報導魔王、Jamin、杜偉反向傳播可以解釋大腦學習嗎?近日 Hinton 等人的研究認為,儘管大腦可能未實現字面形式的反向傳播,但是反向傳播的部分特徵與理解大腦中的學習具備很強的關聯性。在機器學習中,誤差反向傳播(backprop)是深度神經網絡訓練中最常用的算法,也是這些神經網絡中最成功的學習步驟。反向傳播算法描述見下圖:反向傳播算法的核心是對整個網絡所有可能的路徑重複使用鏈式法則。
  • 反向傳播(BP)算法的數學原理
    但是學習BP算法的數學原理,並非無用,相反對我們深入理解神經網絡訓練的底層原理有著非常重要的幫助。反向傳播算法的核心是求解損失函數C關於任一網絡權重w(或偏置b)的偏微分∂C/∂w (或∂C/∂b)。該偏微分表達式表示損失函數C的值隨權重w或偏置b值變化而變化的變化率。很多時候雖然偏微分表達式看起來非常複雜,但反向傳播算法為偏微分表達式中每項的物理含義提供了自然、直觀和優美的解釋。
  • 深度學習基礎之反向傳播算法
    介紹反向傳播算法(Back Propagation)的文章有很多,但講得通俗易懂的很少,有的只給出公式推導,很難理解,有的雖然給出了例子,但介紹得過於複雜
  • 神經網絡篇——從代碼出發理解BP神經網絡
    一提到反向傳播算法,我們就不自覺的想到隨機梯度下降、sigmoid激活函數和最讓人頭大的反向傳播法則的推導,即便是把反向傳播神經網絡的原理學了一遍,也還是一頭霧水,在這裡推薦一本小編認為把BP神經網絡講的最通透的教材《Python神經網絡編程》。
  • 反向傳播算法的工作原理(2)
    其它兩個方程(BP3)和(BP4),也可以遵循鏈式法則進行證明。此處從略。反向傳播算法根據前述方程,下面以算法的形式,顯示地寫出反向傳播算法:研究一下這個算法,你就會明白為什麼它被稱為反向傳播。在網絡中反向操作似乎很奇怪,但是如果你考慮反向傳播的證據,反向傳播源於這樣一個事實:代價函數是網絡輸出的函數。為了了解代價是如何隨先前的權重和偏差而變化的,我們需要反覆應用鏈式規則,在各個層中反向操作以獲得可用的表達式。為什麼說反向傳播是一種快速算法?為什麼說反向傳播是一種快速算法?為了回答這個問題,我們思考一下計算梯度的另一種方法。