- 前向傳播 forward propagation 過程:目前饋神經網絡接收輸入 并産生輸出 時,資訊前向流動。 輸入 提供初始資訊,然後資訊傳播到每一層的隐單元,最終産生輸出
- 反向傳播算法 back propagation 允許來自代價函數的資訊通過網絡反向流動以便計算梯度。
- 反向傳播并不是用于學習整個神經網絡的算法,而是僅用于計算梯度的算法。 神經網絡的學習算法是随機梯度下降這類基于梯度的算法。
- 反向傳播不僅僅适用于神經網絡,原則上它适用于計算任何函數的導數。
- 計算圖 computational graph :
- 圖中的每個節點代表一個變量 (可以是标量、向量、矩陣或者張量)。
- 操作: operation 為一個或者多個變量的簡單函數。
- 多個操作組合在一起可以描述一個更複雜的函數。
- 一個操作僅傳回單個輸出變量 (可以是标量、向量、矩陣或者張量)。
- 如果變量 是變量 通過一個操作計算得到,則在圖中繪制一條從 到
鍊式法則
- 反向傳播算法是一種利用鍊式法則計算微分的算法。
- 在一維的情況下,鍊式法則為:
-
在多元情況下,設: 為 到 的映射且滿足 為 到 的映射且滿 足 。則有:
使用向量記法,可以等價地寫作:
其中: 為 的 階雅可比矩陣, 為 對 的梯度, 為 對 的梯度:
張量鍊式法則
- 鍊式法則僅可以作用于向量,也可以應用于張量:
- 首先将張量展平為一維向量。
- 然後計算該向量的梯度。
- 然後将該牱度重新構造為張量。
-
記 為 對張量 的梯度。 現在有多個索引 (如:二維張量有兩個索引),可以使用單個變量 來表 示 的索引元組(如 表示: 一個二維張量的系引,每個次元三個元素)。
這就與向量中的系引方式完全一緻: 。
奴:
則有:
-
設 ,用單個變量 來表示 的索引元組。則張量的鍊式法則為:
如:
則有:
反向傳播算法
- 反向傳播算法:
- 輸入:
- 計算圖
-
初始化參數向量
。 輸出:
- 運作計算
-
給出一個 grad_table 表,它存儲的是已經計算出來的偏導數。
對應的表項存儲的是偏導數
- 初始化 grad_table
- 沿着計算圖 計算偏導數。周遊 從
-
計算 。其中: 是已經存儲的 grad_table[ui , 為實時計算的。
圖 中的邊 定義了一個操作,而該操作的偏導隻依賴于這兩個變量,是以可以實時求 解
- 存儲 _able
- 逅回
-
反向傳播算法計算所有的偏導數,計算量與 中的邊的數量成正比。
其中每條邊的計算包括計算偏導數,以及執行一次向量點積。
-
上述反向傳播算法為了減少公共子表達式的計算量,并沒有考慮存儲的開銷。這避免了重複子表達式的指數 級的增長。
。 某些算法可以通過對計算圖進行簡化進而避免更多的子表達式。
。 有些算法會重新認算這些子表達式而不是存儲它們,進而節省記憶體。