當前位置:
首頁 > 最新 > 什麼是反向傳播演算法

什麼是反向傳播演算法

神經網路的快速發展離不開底層數學演算法的演進。反向傳播演算法作為神經網路中學習的主力,最初是在20世紀70年代引入的,但其重要性直到1986年由一篇著名的論文才得到充分的重視,其作者是DavidRumelhart,GeoffreyHinton和RonaldWilliams。該論文描述了幾種神經網路,而其中反向傳播比其他早期的學習方法快得多,從而可以使用神經網路來解決以前不能解決的問題。

說到神經網路,大家看到這個圖應該不陌生:

其對應的表達式如下:

上面式中的Wij就是相鄰兩層神經元之間的權值,它們就是深度學習需要學習的參數,也就相當於直線擬合y=k*x+b中的待求參數k和b。

這是典型的三層神經網路的基本構成,LayerL1是輸入層,LayerL2是隱含層,LayerL3是隱含層,我們現在手裡有一堆數據,輸出也是一堆數據,現在要他們在隱含層做某種變換,讓你把數據灌進去後得到你期望的輸出。如果你的輸出和原始輸入不一樣,那麼就是很常見的人工神經網路了,相當於讓原始數據通過一個映射來得到我們想要的輸出數據,也就是我們今天要講的話題。和直線擬合一樣,深度學習的訓練也有一個目標函數,這個目標函數定義了什麼樣的參數才算一組「好參數」,不過在機器學習中,一般是採用成本函數(cost function),然後,訓練目標就是通過調整每一個權值Wij來使得成本達到最小。成本函數也可以看成是由所有待求權值Wij為自變數的複合函數,而且基本上是非凸的,即含有許多局部最小值。成本函數受到網路中的權重和偏見改變而改變,為此,我們需求出成本函數對每一個權值Wij的偏導數。而反向傳播是而正是用來求解這種多層複合函數的所有變數的偏導數的利器。簡單的理解,它就是複合函數的鏈式法則,但其在實際運算中的意義比鏈式法則要大的多。

舉例

我們以斯坦福深度學習課程:CS231n針對視覺識別的卷積神經網路的官方課程的一個例子來舉例:

輸入值w0=2.0,x0=-1, w1=-3, x1=-2, w2=-3,通過它們的複合關係圖我們可以算得各個分部分的值已經最終值為0.73。

運用反向傳播演算法後計算各層偏導數的流程如下:

首先我們把最後的1/x轉成f(z)=z的函數形式,對其求導可得1,所以我們從1開始往回推。

反向推一步,輸入值為z=1/x=1.37,而根據複合函數的鏈式法則,需要乘以函數f(z)=f(1/x)的微分值,得到前一步的微分值為-0.53。

同樣的鏈式法則繼續反嚮往前推,得到前一步的微分值同樣為-0.53。

繼續往前,得到微分值為負數-0.20。

繼續往前,得到微分值為正數0.20。

接著往前,可以得到最終的一個參數w2的微分值為0.20。

而w0和x0的微分值分別為-0.20和0.40。

同樣w1和x1的微分值也能算得分別為-0.40和-0.60。

代碼

使用python來實現反向傳播演算法非常簡單,短短二十多行代碼就能實現其演算法,代碼如下:

從以上例子可以看到,您可以將反向傳播演算法視為提供了計算所有這些路徑的速率因子之和的方法。換句話說,反向傳播演算法提供了一種非常巧妙的方法可以跟蹤權重(和偏差)的微小擾動如何通過網路傳播,到達輸出,最終影響成本函數的結果。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

2017年最後一篇推送,仍然與技術有關盤點深度學習論文年度之「最」

TAG:全球大搜羅 |