反向傳播演算法

反向傳播是對多層人工神經網路進行梯度下降的演算法，也就是用鏈式法則以網路每層的權重為變數計算損失函式的梯度，以更新權重來最小化損失函式。動機.任何監督式學習演算法的目標是找到一個能把一組輸入最好地對映到其正確的輸出的函式。例如一個簡單的分類任務，其中輸入是動物的影象，正確的輸出將是動物的名稱。一些輸入和輸出模式可以很容易地透過單層神經網路。每升高一層就學習越來越多的抽象特徵，如上文提到的用來影象分類。每一層都是從它下方的層中找到模式，就是這種能力建立了獨立於為多層網路提供能量的外界輸入的內部表達形式。反向傳播演算法的發展的目標和動機是找到一種訓練的多層神經網路的方法，於是它可以學習合適的內部表達來讓它學習任意的輸入到輸出的對映。概括.反向傳播演算法主要由兩個階段組成：激勵傳播與權重更新。第1階段：激勵傳播.每次迭代中的傳播環節包含兩步：第2階段：權重更新.對於每個突觸上的權重，按照以下步驟進行更新：這個比例將會影響到訓練過程的速度和效果，因此成為「訓練因子」。梯度的方向指明瞭誤差擴大的方向，因此在更新權重的時候需要對其取反，從而減小權重引起的誤差。第 1 和第 2 階段可以反覆迴圈迭代，直到網路對輸入的響應達到滿意的預定的目標範圍為止。演算法.數學推導.假設多層人工神經網路的第 formula_1 層是由線性運算元 formula_2 和啟用函式 formula_3 所構成，也就是說，第 formula_1 層的輸入是 formula_5 維實數向量formula_6輸出則為formula_7 維實向量formula_8換句話說，第 formula_9 層的輸出 formula_10 就是第 formula_1 層的輸入。而 formula_12 和 formula_10 的具體(以第 formula_14 分量表示)遞迴關係為formula_15 上式通常會簡寫為formula_17若這個多層人工神經網路總共有 formula_18 層，也就是說，formula_19 是最一開始的輸入，而 formula_20 是最後一層的輸出，那跟損失函式 formula_21 是以最後一層輸出 formula_20 的各分量 formula_23 (與真實值)為變數。依據上面的遞迴關係，可以把 formula_21 進一步的轉成以第 formula_18 層的輸入 formula_26 與權重因子 formula_27 為變數的函式 formula_28formula_29 由此可以歸納到 formula_32 的情況(注意到前幾層的權重因子不會消失在表示式中)formula_33 那這樣如果假設適當的可微分條件，由鏈式法則會有以下的遞迴關係 ( 若取 formula_36 和 formula_37 )formula_38formula_39這樣就可以依據這個遞迴關係進行梯度下降，因為計算上是由 formula_23 對 損失函式 formula_21 的偏微分出發，一層層向後遞推出前面各層的權重因子梯度，所以被稱為反向傳播。注意到可將輸入設為formula_42並多加一行權重因子 formula_43 為偏移，就可以把有偏移的多層網路納入剛剛討論的範圍內。實際範例.三層網路演算法：初始化網路權值doforEach 訓練樣本 exprediction = neural-net-output(network, ex) "// 正向傳遞"actual = teacher-output(ex)計算輸出單元的誤差 (prediction - actual)計算 formula_44 對於所有隱藏層到輸出層的權值 "// 反向傳遞"計算 formula_45 對於所有輸入層到隱藏層的權值 "// 繼續反向傳遞"更新網路權值 "// 輸入層不會被誤差估計改變"until 所有樣本正確分類或滿足其他停止標準return 該網路這個演算法的名稱意味著誤差會從輸出結點反向傳播到輸入結點。嚴格地講，反向傳播演算法對網路的可修改權值計算了網路誤差的梯度。 這個梯度會在簡單中經常用來求最小化誤差的權重。通常“反向傳播”這個詞使用更一般的含義，用來指涵蓋了計算梯度以及在隨機梯度下降法中使用的整個過程。在適用反向傳播演算法的網路中，它通常可以快速收斂到令人滿意的極小值。直觀理解.學習作為一個最佳化問題.在給出反向傳播演算法的數學推導之前，我們舉一個例子來培養關於神經元的真實輸出與正確輸出間的直觀感受。考慮一個有兩個輸入單元、一個輸出單元、沒有隱藏單元的簡單神經網路。每個神經元都使用輸入的加權作為。在訓練之前，我們將隨機分配權重formula_46。之後神經元根據訓練例項進行學習。在此例中，訓練集為 (formula_47, formula_48, formula_49)，其中 formula_47 與 formula_48 是網路的輸入，formula_49 為正確輸出。為了衡量期望輸出 formula_49 與實際輸出 formula_55 之間的差異，一個常用的方法是採用平方誤差測度：formula_59,其中 formula_60 為誤差。舉例來講，考慮單一訓練例項的網路：formula_61，輸入 formula_47 與 formula_48 均為1，正確輸出 formula_49 為 0。現在若將實際輸出 formula_55 畫在x軸，誤差 formula_60 畫在 formula_55 軸，得出的是一條拋物線。拋物線的極小值對應輸出 formula_55，最小化了誤差 formula_60。對於單一訓練例項，極小值還會接觸到 formula_70 軸，這意味著誤差為零，網路可以產生與期望輸出 formula_49 完全匹配的輸出 formula_55。因此，把輸入對映到輸出的問題就化為了一個找到一個能產生最小誤差的函式的最佳化問題。然而，一個神經元的輸出取決於其所有輸入的加權總和：formula_73,其中 formula_74 和 formula_75 是從輸入單元到輸出單元相連的權重。因此，誤差取決於輸入到該神經元的權重，也是網路要學習最終需要改變的。若每個權重都畫在一個水平的軸上，而誤差畫在垂直軸上，得出的就是一個拋物面。反向傳播演算法的目的是找到一組能最大限度地減小誤差的權重。尋找拋物線或任意維度中的任何函式的極大值的方法有若干種。其中一種方法是透過求解方程組，但這依賴於網路是一個線性系統，而目標也需要可以訓練多層非線性網路。在反向傳播中使用的方法是梯度下降法。運用類比理解梯度下降法.梯度下降法背後的直觀感受可以用假設情境進行說明。一個被卡在山上的人正在試圖下山最大的方向前進。使用此方法，他會最終找到下山的路。不過，要假設山的陡度不能透過簡單地觀察得到，而需要複雜的工具測量，而這個工具此人恰好有。需要相當長的一段時間用儀器測量山的陡峭度，因此如果他想在日落之前下山，就需要最小化儀器的使用率。問題就在於怎樣選取他測量山的陡峭度的頻率才不致偏離路線。在這個類比中，此人代表反向傳播演算法，而下山路徑表示能使誤差最小化的權重集合。山的陡度表示誤差曲面在該點的斜率。他要前行的方向對應於誤差曲面在該點的梯度。用來測量陡峭度的工具是微分是演算法的學習速率。制一節中對此型別“爬山”演算法的限制的討論。歷史.弗拉基米爾·瓦普尼克引用在他的書《支援向量機》中首次發表反向傳播演算法。在1969年Arthur E. Bryson和何毓琦將其描述為多級動態系統最佳化方法。 直到1974年以後在神經網路的背景下應用，並由Paul Werbos、David E. Rumelhart、傑弗裡·辛頓和Ronald J. Williams的著作，它才獲得認可，並引發了一場人工神經網路的研究領域的“文藝復興”。在21世紀初人們對其失去興趣，但在2010年後又擁有了興趣，如今可以透過GPU等大型現代運算器件用於訓練更大的網路。例如在2013年，頂級語音識別器現在使用反向傳播演算法訓練神經網路。