訓練神經網路的目標是 優化代價函式,使得代價函式找到乙個 全域性最小值或者區域性最小值。不管使用何種梯度下降演算法(bgd, sgd ,adam),都需要先算出各個引數的梯度。反向傳播的作用: 就是快速算出所有引數的偏導數。
求導數通常可以分為兩類,一類是直接用定義,第二類是公式法(包括鏈式法)。
定義法:
定義法求導數存在問題: 當引數較多時(如:100萬),計算乙個樣本所有的引數就需要計算 100萬次 c(w+&) , 和一次 c(w) ,計算量太大。所以導數定義法行不通。
若直接將 公式展開求導又太複雜,所以選擇用 鏈式求導法則 求所有引數的偏導。
反向傳播主要依賴於鏈式法則, y是復合函式:
反向傳播正是用到了鏈式法則。
反向傳播的優點在於:盡力用一次前向傳播和一次反向傳播,就同時計算出所有引數的偏導數。反向傳播計算量和前向傳播差不多,並且有效利用前向傳播過程中的計算結果,前向傳播的主要計算量 在 權重矩陣和input vector的乘法計算, 反向傳播則主要是 矩陣和input vector 的轉置的乘法計算。例子如下:
前向傳播 計算出 q =w.*x , 和 f(q) = q12 + q22+…+qn**2, 反向傳播先計算 f 對q 的偏導, 再計算 q 對w的偏導,得到f 對w的梯度。 利用了 前向傳播計算的q。
總結一下:路徑上所有邊相乘,所有路徑相加。
一般情形如下:
兩種求導模式:前向模式求導( forward-mode differentiation) 反向模式求導(reverse-mode differentiation)
前向模式:先求x對y的影響,再求y對z的影響
後向模式: 先求y對z的影響,再求x對y的影響。
這樣看起來 前向模式求導和反向模式求導,除了求導順序不同,好像沒什麼不同,那為什麼要用反向模式求導,而不用前向模式求導呢?
求導順序不同, 求導複雜度也不同
舉例說明:
如果用前向求導模式:關於b向前求導一次
反向模式:
前向模式,一次只能求出 e對b的偏導, 而反向模式 可以同時 求出 e 對a 和b的偏導。使用前向模式求偏導,需要多次才能求出所有引數的偏導,而反向傳播一次就夠了
卷積神經網路反向傳播推導
以tensorflow的卷積神經網路為例 卷積 池 卷積 池 全連線 softmax c1層 卷積神經網路的輸入是28 28的矩陣 a 經過f1 個5 5的卷積核k1 i i 1,2,f1 的卷積生成f1 個24 24大小的feature maps c1 i co nv2 a,k1 i,v alid...
神經網路學習引入 反向傳播
反向傳播技術是神經網路的核心技術之一。如果乙個運算我們能夠使用計算圖表式出來,那麼我們就能夠利用反向傳播的方法,即從後往前遞迴地呼叫鏈式法則來計算梯度。乙個簡單的函式f x y,z x y zf x,y,z x y z f x,y,z x y z的計算圖如下所示。假設輸入為 x 2,y 5,z 4,...
神經網路及反向傳播演算法
神經元是構成神經網路的基本單元,模擬生物神經元的結構和特性,接受輸入訊號並且產生輸出。輸入訊號要進行加權和啟用函式,然後才輸出神經元的活性值。啟用函式用來增強網路的表示能力和學習能力,需要連續可求導 允許少數點不可導 的非線性函式。可導的啟用函式可以直接利用數值優化的方法來學習網路引數 反向傳播演算...