天天看點

李宏毅機器學習筆記——反向傳播算法

  1. 前向傳播 forward propagation 過程:目前饋神經網絡接收輸入 并産生輸出 時,資訊前向流動。 輸入 提供初始資訊,然後資訊傳播到每一層的隐單元,最終産生輸出
  2. 反向傳播算法 back propagation 允許來自代價函數的資訊通過網絡反向流動以便計算梯度。
  • 反向傳播并不是用于學習整個神經網絡的算法,而是僅用于計算梯度的算法。 神經網絡的學習算法是随機梯度下降這類基于梯度的算法。
  • 反向傳播不僅僅适用于神經網絡,原則上它适用于計算任何函數的導數。
  1. 計算圖 computational graph :
  • 圖中的每個節點代表一個變量 (可以是标量、向量、矩陣或者張量)。
  • 操作: operation 為一個或者多個變量的簡單函數。
  • 多個操作組合在一起可以描述一個更複雜的函數。
  • 一個操作僅傳回單個輸出變量 (可以是标量、向量、矩陣或者張量)。
  • 如果變量 是變量 通過一個操作計算得到,則在圖中繪制一條從 到

鍊式法則

  1. 反向傳播算法是一種利用鍊式法則計算微分的算法。
  2. 在一維的情況下,鍊式法則為:
  3. 在多元情況下,設: 為 到 的映射且滿足 為 到 的映射且滿 足 。則有:

    使用向量記法,可以等價地寫作:

    其中: 為 的 階雅可比矩陣, 為 對 的梯度, 為 對 的梯度:

張量鍊式法則

  1. 鍊式法則僅可以作用于向量,也可以應用于張量:
  • 首先将張量展平為一維向量。
  • 然後計算該向量的梯度。
  • 然後将該牱度重新構造為張量。
  1. 記 為 對張量 的梯度。 現在有多個索引 (如:二維張量有兩個索引),可以使用單個變量 來表 示 的索引元組(如 表示: 一個二維張量的系引,每個次元三個元素)。

    這就與向量中的系引方式完全一緻: 。

    奴:

    則有:

  2. 設 ,用單個變量 來表示 的索引元組。則張量的鍊式法則為:

    如:

    則有:

反向傳播算法

  1. 反向傳播算法:
  • 輸入:
  • 計算圖
  • 初始化參數向量

    。 輸出:

  • 運作計算
  • 給出一個 grad_table 表,它存儲的是已經計算出來的偏導數。

    對應的表項存儲的是偏導數

  • 初始化 grad_table
  • 沿着計算圖 計算偏導數。周遊 從
  • 計算 。其中: 是已經存儲的 grad_table[ui , 為實時計算的。

    圖 中的邊 定義了一個操作,而該操作的偏導隻依賴于這兩個變量,是以可以實時求 解

  • 存儲 _able
  • 逅回
  1. 反向傳播算法計算所有的偏導數,計算量與 中的邊的數量成正比。

    其中每條邊的計算包括計算偏導數,以及執行一次向量點積。

  2. 上述反向傳播算法為了減少公共子表達式的計算量,并沒有考慮存儲的開銷。這避免了重複子表達式的指數 級的增長。

    。 某些算法可以通過對計算圖進行簡化進而避免更多的子表達式。

    。 有些算法會重新認算這些子表達式而不是存儲它們,進而節省記憶體。

參考

繼續閱讀