
人工神經網絡—【BP】反向傳播算法證明
第一步:前向傳播
【注】此BP算法的證明僅限sigmoid激活函數(shù)情況。本博文講道理是沒錯的,畢竟最后還利用代碼還核對了一次理論證明結果。
簡單的三層網絡結構如下
參數(shù)定義:
可見層定義為X,共有n個單元,下標用 i表示
隱藏層定義為B,共有p個單元,下標用 j 表示
輸出層定義為Y,共有q個單元,下標用 k表示
可見層到隱藏層權重矩陣為W,大小為 p*n
隱藏層到輸出層權重矩陣為V,大小為q*p
① 計算隱藏層各神經元激活值
代表所有可見層單元乘以連接到第j個隱單元的權重,再減去偏置或者閾值
②計算隱含層單元的輸出值
采用sigmoid函數(shù)即S型函數(shù)
③計算輸出層各神經元激活值
④計算輸出層單元的輸出值
第二步:逆向傳播
校正是從后往前進行的,所以稱為誤差逆?zhèn)鞑?,計算是從輸出層到隱藏層,再從隱藏層到輸入層。更新的是權重和偏置,稱為模型參數(shù)
兩層的權重和偏置的更新是類似的,下面以輸出層到隱藏層的權重和偏置更新為例。
采用平方和誤差衡量期望輸出與實際輸出的差別:
輸出層→隱藏層的更新
先對權重求梯度:
【注】上式中最后一個等號左邊第二項求導利用對sigmoid函數(shù)求導
接下來對偏置求梯度
隱藏層→輸入層的更新
【注】建議這一層的更新,讀者認真推導,這樣會對BP的更新有更深刻的印象
第四步:模型參數(shù)校正
這一步就非常簡單啦,直接用原始的模型參數(shù),減去現(xiàn)在的模型參數(shù)就行啦,其中會加入一個學習率η,控制梯度下降速度
第五步:一般性推導
【注】以下純?yōu)閭€人理解,與網絡上那些復雜點的公式可能有出入,實際情況有待考證..............
上面只是三層BP神經網絡的推導,看著已經很復雜了,這時候會產生一個想法:如果是很多層的BP神經網絡該如何去推導?難道是每一層都得從最后一層挨個朝前推導一次?這時候就得考察我們的歸納能力。這里有一個題外話,何為歸納?何為演繹?簡單點,歸納就是從特殊性到一般性,而演繹則是從一般到特殊。當然內中道理還有很多,就不說了。
如何去歸納,這里就得說到BP中經常遇到的一個詞語:鏈式求導。如果不知道具體定義也沒事,朝下看:
①從最后一個權重開始看:這個權重連接了中間隱層和最后的輸出層,求導過程是對輸出層的sigmoid激活函數(shù)求導,然后進一步得到的結果是:輸出誤差*輸出值*(1-輸出值)*(隱層值),換個方法說:權重右邊的輸出誤差*權重右邊的輸出*(1-權重右邊的輸出)*(權重左邊的輸出);——分割線——權重連接的右邊層的偏置更新就是去掉權重更新中乘以的權重左端值的那一參數(shù)(即權重連接的左層單元的值)。
②然后看倒數(shù)第二個權重:這個權重連接了原始輸出層和中間隱層,求導過程還是對輸出層的sigmoid激活函數(shù)求導,只不過求導對象是第二個權重,而不是①中的權重。接下來發(fā)現(xiàn)不好求導,需要按照求導法則變換,變成了最后的輸出層對隱層的輸出求導乘以隱層輸出對第二個權重的求導,可以發(fā)現(xiàn)這兩個都好求,因為他們都直接存在與被求導的激活函數(shù)(也就是分母的表達式)中。然后發(fā)現(xiàn)輸出層關于第二層權重的導數(shù)變成了:權重右邊某種值*權重右邊的輸出*(1-權重右邊的輸出)*(權重左邊的輸出)。發(fā)現(xiàn)與①很相似,只不過第一項有差別,然后觀察何為“權重右邊某式”,發(fā)現(xiàn)就是此層權重的后一層權重連接的層的偏置更新乘以連接到后一層的權重。
這樣總結出一個規(guī)律:
建立的一個BP網絡如下,注意,最后的偽層只是第n層的副本,實際的BP是沒有這一層的,此處只是為了方便理解罷了,原因繼續(xù)看下去:
如圖所示,W左邊連接層A,右邊連接層B,B層的下一層是C,B和C的連接權重為V,C的偏置更新為△c,B的偏置更新為△b,則按照歸納的結論可以得到下式:
其實這里的V是被轉置了的,因為V是從B到C的權重,那么從C的維度到B的維度,就必須通過轉置相乘。具體涉及到矩陣求導法則,后面有博客更新這一內容。
【注】有時候面試會經常問:權重可以初始化為零?為什么?直接看這兩個公式就能很清晰發(fā)現(xiàn)是不能的,因為這兩個公式的更新都與權重有關,如果初始權重為0的時候,這兩個梯度就都是0了。
但是突然想到當A是第n-1層的時候,并沒有對應的"C"層去計算第n-1層到第n層的連接權重,也就是最后一層的權重, 那么怎么辦?
方法一:
我們建立了第n層數(shù)據的副本,稱為偽層,那么此時C就是偽層了,對應的偽層偏置設置為:
對應的第n層到偽層的連接權重為主對角線為1,其它值都為0的矩陣.
這樣一來,我們可以輕松發(fā)現(xiàn),BP的更新步驟可以用一個遞歸來解決:
步驟1:建立一個偽層副本,偽層偏置設置為△c,偽層與輸出層(第n層)的連接權重為V
步驟2:從偽層往前推,建立一個層數(shù)為3的滑動窗口,從左到右依次稱為上面介紹過的A、B、C層
步驟3:套用上面ABC更新△W和△b的方法去計算權重與偏置梯度
步驟4:返回步驟2(即往前移動一層)
步驟5:每一層的更新后參數(shù)就是
方法二:
忽視方法一種的偽層, 因為我們發(fā)現(xiàn)除了最后一層的所有的偏置都能用相同的公式解決,那么我們怎么得到最后一層的偏置?簡單,直接轱轆上一節(jié)看《輸出層→隱藏層的更新》這一節(jié), 記住最后一層,也就是輸出層的偏置更新, 然后再去套那個三層的通用公式就OK了
【注】最近看了一個關于殘差項的博文:https://zhuanlan.zhihu.com/p/27664917,感覺文章的殘差項其實就是這里的偏置變化量,然后在這個博客的基礎上繼續(xù)推導(每層輸出相對于激活函數(shù)的導數(shù))就能得到我們的式子咯。所以本博客的結論(ABC三層遞歸求解)是無問題的
關于從sigmoid激活的三層BP到任意激活函數(shù)的三層BP到任意激活函數(shù)任意層的BP的證明請移步這里
驗證
說了這么多公式,還是一句話說得好: no can no bb, show me your code →__→
那么,就扒一扒matlab的deep learning toolbox里面的BP代碼,以sigmoid為例,對照第五步的那個三層遞推公式看:
偽層的建立其實就是鏈式求導的開端,偽層的△c就是那個減法公式:
nn.e = y - nn.a{n};
然后推導出最后一層的△c:
switch nn.output
case 'sigm'
d{n} = - nn.e .* (nn.a{n} .* (1 - nn.a{n}));
case {'softmax','linear'}
d{n} = - nn.e;
end
然后從倒數(shù)第二層開始
for i = (n - 1) : -1 : 2
計算我們的ABC三層推導中的B(1-B):
switch nn.activation_function
case 'sigm'
d_act = nn.a{i} .* (1 - nn.a{i});
case 'tanh_opt'
d_act = 1.7159 * 2/3 * (1 - 1/(1.7159)^2 * nn.a{i}.^2);
end
隨后計算△c*V*B(1-B),也就是當前層的偏置更新量△b:
if i+1==n % in this case in d{n} there is not the bias term to be removed
d{i} = (d{i + 1} * nn.W{i} + sparsityError) .* d_act; % Bishop (5.56)
else % in this case in d{i} the bias term has to be removed
d{i} = (d{i + 1}(:,2:end) * nn.W{i} + sparsityError) .* d_act;
end
至此上一層循環(huán)結束,計算得到了當前層的偏置更新量。
對于權重,可以發(fā)現(xiàn)是△c*V*B(1-B)*A,其實就是△b乘以當前層的上一層輸出就行了,直接在最后單獨開啟新的循環(huán)乘一下就行了:
for i = 1 : (n - 1)
if i+1==n
nn.dW{i} = (d{i + 1}' * nn.a{i}) / size(d{i + 1}, 1);
else
nn.dW{i} = (d{i + 1}(:,2:end)' * nn.a{i}) / size(d{i + 1}, 1);
end
end
數(shù)據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關鍵? 在循環(huán)神經網絡(RNN)家族中,長短期記憶網絡(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據分析師報考條件詳解與準備指南? ? 在數(shù)據驅動決策的時代浪潮下,CDA 數(shù)據分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據透視表中兩列相乘合計的實用指南? 在數(shù)據分析的日常工作中,數(shù)據透視表憑借其強大的數(shù)據匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據分析師:連接數(shù)據與業(yè)務的價值轉化者? ? 在大數(shù)據與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預測分析中的應用:從數(shù)據查詢到趨勢預判? ? 在數(shù)據驅動決策的時代,預測分析作為挖掘數(shù)據潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據查詢結束后:分析師的收尾工作與價值深化? ? 在數(shù)據分析的全流程中,“query end”(查詢結束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據分析師考試:從報考到取證的全攻略? 在數(shù)字經濟蓬勃發(fā)展的今天,數(shù)據分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據背后的時間軌跡? 在數(shù)據分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據類型:時間維度的精準切片? ? 在數(shù)據的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據分析中的核心應用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據分析師認證考試中,Python 作為數(shù)據處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據趨勢與突變分析的有力工具? ? ? 在數(shù)據分析的廣袤領域中,準確捕捉數(shù)據的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據分析師認證作為國內權威的數(shù)據分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應對策略? 長短期記憶網絡(LSTM)作為循環(huán)神經網絡(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學方法在市場調研數(shù)據中的深度應用? 市場調研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學方法則是市場調研數(shù) ...
2025-07-07CDA數(shù)據分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據已成為企業(yè)決策、行業(yè)發(fā)展的核心驅動力,數(shù)據分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據分析師考試作為衡量數(shù)據專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉日期:解鎖數(shù)據處理的關鍵技能? 在數(shù)據處理與分析工作中,數(shù)據格式的規(guī)范性是保證后續(xù)分析準確性的基礎 ...
2025-07-04CDA 數(shù)據分析師視角:從數(shù)據迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據已成為企業(yè)決策的核心驅動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據分析師:開啟數(shù)據職業(yè)發(fā)展新征程? ? 在數(shù)據成為核心生產要素的今天,數(shù)據分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03