反向傳播算法(BP算法)是目前用來訓練人工神經(jīng)網(wǎng)絡的最常用且最有效的算法。作為谷歌機器學習速成課程的配套材料,谷歌推出一個演示網(wǎng)站,直觀地介紹了反向傳播算法的工作原理。
反向傳播算法對于快速訓練大型神經(jīng)網(wǎng)絡來說至關重要。本文將介紹該算法的工作原理。
簡單的神經(jīng)網(wǎng)絡
如上圖,你會看到一個神經(jīng)網(wǎng)絡,其中包含一個輸入節(jié)點、一個輸出節(jié)點,以及兩個隱藏層(分別有兩個節(jié)點)。
相鄰的層中的節(jié)點通過權重相關聯(lián),這些權重是網(wǎng)絡參數(shù)。
激活函數(shù)
每個節(jié)點都有一個總輸入x、一個激活函數(shù)f(x)以及一個輸出y=f(x)。
f(x)必須是非線性函數(shù),否則神經(jīng)網(wǎng)絡就只能學習線性模型。
常用的激活函數(shù)是S 型函數(shù):
誤差函數(shù)
目標是根據(jù)數(shù)據(jù)自動學習網(wǎng)絡的權重,以便讓所有輸入?的預測輸出?
接近目標?
為了衡量與該目標的差距,我們使用了一個誤差函數(shù)常用的誤差函數(shù)是?
正向傳播
首先,我們?nèi)∫粋€輸入樣本并更新網(wǎng)絡的輸入層。
為了保持一致性,我們將輸入視為與其他任何節(jié)點相同,但不具有激活函數(shù),以便讓其輸出與輸入相等,即
現(xiàn)在,我們更新第一個隱藏層。我們?nèi)∩弦粚庸?jié)點的輸出y,并使用權重來計算下一層節(jié)點的輸入x。
然后,我們更新第一個隱藏層中節(jié)點的輸出。 為此,我們使用激活函數(shù)f(x)。
使用這兩個公式,我們可以傳播到網(wǎng)絡的其余內(nèi)容,并獲得網(wǎng)絡的最終輸出。
誤差導數(shù)
反向傳播算法會對特定樣本的預測輸出和理想輸出進行比較,然后確定網(wǎng)絡的每個權重的更新幅度。 為此,我們需要計算誤差相對于每個權重的變化情況。
獲得誤差導數(shù)后,我們可以使用一種簡單的更新法則來更新權重:
其中,是一個正常量,稱為“學習速率”,我們需要根據(jù)經(jīng)驗對該常量進行微調(diào)。
[注意] 該更新法則非常簡單:如果在權重提高后誤差降低了 (),則提高權重;否則,如果在權重提高后誤差也提高了 (
),則降低權重。
其他導數(shù)
為了幫助計算,我們還為每個節(jié)點分別存儲了另外兩個導數(shù),即誤差隨以下兩項的變化情況:
反向傳播
我們開始反向傳播誤差導數(shù)。 由于我們擁有此特定輸入樣本的預測輸出,因此我們可以計算誤差隨該輸出的變化情況。 根據(jù)我們的誤差函數(shù),我們可以得出:
現(xiàn)在我們獲得了,接下來便可以根據(jù)鏈式法則得出?
。
其中,當f(x)是 S 型激活函數(shù)時,
一旦得出相對于某節(jié)點的總輸入的誤差導數(shù),我們便可以得出相對于進入該節(jié)點的權重的誤差導數(shù)。
根據(jù)鏈式法則,我們還可以根據(jù)上一層得出。此時,我們形成了一個完整的循環(huán)。
接下來,只需重復前面的 3 個公式,直到計算出所有誤差導數(shù)即可。
結(jié)束。
-
神經(jīng)網(wǎng)絡
+關注
關注
42文章
4811瀏覽量
103046 -
算法
+關注
關注
23文章
4702瀏覽量
94968
原文標題:谷歌官方:反向傳播算法圖解
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
MapReduce的誤差反向傳播算法

淺析深度神經(jīng)網(wǎng)絡(DNN)反向傳播算法(BP)

PyTorch教程5.3之前向傳播、反向傳播和計算圖

評論