從下往上看--新皮層資料的讀後感 第八部分 BackPropagation--飄搖的指引

PS:不需要看公式。

這是Bryson and Ho在1969年搞出來一種針對General feed-forward networks(FNN)的開環網路的參數調整規則-它是調參規則。網路結構是前饋網路,別被這個名字給忽悠了。簡單的說它只是使用輸出逆向引導參數在搜索空間的調整方向。信息傳遞是正向進行的,所以在網路結構它和普通的Forward Propagation是完全一致的。區別在訓練的具體方法而不是網路結構和信息流向。BP是FNN的基礎訓練方法 ,所以在理解更複雜的演算法之前我們需要來看看這裡面具體都在做什麼事情,以了解其局限和解決問題的具體內容。下面通過BP的實際例子逐步建立對優化器的認識。

第一步,選個網路,這裡網路可以是多層的,層數不影響我們的分析思路,連接形式為MLP的Full connection。

第二步:先確定神經元激活函數為tan-sigmoid,為啥選tan-sigmoid?要求導唄,另外我們還希望它有一部分負增益特性。(其實別的激活函數也是可以的,只是需要用一些工程方法修正不連續節點的問題)

第二部分:構建目標函數,

首先把傳遞函數拿過來,直接拷貝前面一節的公式即可。Hw,b(x)就是最後我們要找的網路傳遞函數. 基本的BP模型中定義objective function叫做cost function.(別問我為啥他們總換名字)。這個cost function是這麼定義的 J= sum(e*e)/2,e是H(x)-y. 也就是新的輸出和已知輸入的方差和。

第三步:鏈式求導:

把傳遞函數寫出來以後,套用cost function(objective function、loss都是它),就可以得到一個最小/最大xxx開頭的公式,這裡定義的是最小平方和。一看到MAX、MIN基本搜索過程就來了。而W-在一組輸入的情況下一定是在某個曲面上移動的。J是個連續函數。呃。。。想起來了SVM直接按照求導原則的來嘛,這裡求導是鏈式的,一層套一層,沒法用=0直接算極點。具體過程我就不寫了,把最後的結果直接寫出來:

所以這裡得到delta E對應的 delta Wi.這有什麼用呢(delta對應三角形,打不出來)?看圖。

最後得到的delta Wi可引導我們具體的迭代過程中確定的上下文中的W調整的方向。注意這個W面只是前後兩層的,不是全局的W空間。結合梯度方法,這就能幫助我們在參數空間內有原則的簡化搜索步驟(定性了,不需要到處亂找)。求導過程是從外由內,這就是所謂的後向傳播BP,所以這裡不會引導數據流反向傳遞形成信息循環。在這裡仍然需要結合梯度或其他的參數搜索方法。BP僅僅是訓練過程中通過cost function的輸出反向影響調整參數的方向和具體的步長。到這裡我們基本可以總結出使用BP演算法為指導的工作步驟。

上圖只是在信息上匯總了這寫信息,不代表信息的傳遞,參考一下即可。再次自己加深一下,不管有沒有BP,整套解決問題的框架是沒有變化,BP只是優化了搜索。回答上一節幾個基本問題的「自選」問題是和第五章中的工作框架是整套可實施的設計必經的過程。使用演算法到具體問題的過程也是細化回答這些問題,按邏輯框架層疊的過程。正饋神經網路本質給我們的是一套數值標定的計算框架,而具體的方法則是具體尋找參數的過程。

第一:BP搜索出的網路是最優的么? 答案:不一定,它只是引導,走向局部的最優。

第二:BP搜索出的網路是唯一的么? 答案: 不是

第三:BP的網路初始化具體方法是什麼?答案:隨機

總結下:BP通過鏈式求導獲得了搜索方向的指引,與SVM式的直接求解是不同的。BP不能走出搜索的基本框架。

另外上文沒有詳細的推導鏈式求導的過程,需要的自己去補充一下即可。鏈式求導計算在這裡引入了另外一個天然局限,由於求導過程是層層傳導的。在網路層次上,每次計算用到delta值輸入,會沿著網路從右往左傳遞。傳遞一次,由於求導過程數值上這個delta就會變小。到一定層次後(一般5-7層),基本這個參數的就變得很接近零了。使得BP在靠輸入層的方向上參數得不到有效調整。這就是為何傳統的正向網路叫淺度網路,實在是做不深啊。

(小技巧:國內的書都叫誤差傳遞,這很迷惑人,會區分不開輸入誤差、雜訊、和輸出方差. 其實兩套語言系統不一樣,常常會導致直接看中文材料是覺得雲里霧裡,現在90後翻譯的材料都做的特別好-遇到名詞不翻譯,這樣回查資料有準確的關鍵字)。

對比SVM,BP這種思路存在應用本質上的不同。FNN-BP過程提供了一套引導參數搜索方向的辦法,最終形成的系統與對現實系統的認識和建模過程沒有直接關係。更多是「嘗試」出一套最後的模型。對SVM框架而言,對分類而言kernel的選擇對結果是決定性的,能否正確的認識系統產生樣本的分布特性來決定kernel的選擇(往往使用假設的分布函數來構建kernel)。 FNN-BP在實際的過程中反覆調整synpase的連接強度,而這種調節方法與生物特性沒有任何借鑒或是「行為」的相符。如果只是應用而言,100%不需要學習生物學上的神經特性。猶如老中醫的偏方,反正就是能治病,至於為啥就別扯有用沒用的。SVM優化只有在新的支持向量SV出現後才需要優化原模型,也就是有一套關鍵樣本SV的篩選方法,而BP無法判斷關鍵樣本,在一個新的樣本進來以後訓練就必須進行。

BP在實際用起來演算法簡單,也有明確的數學指引。在正向網路這個分支中算是基礎性的事實標準。同時求導傳遞損失的特性它也約束了正向網路往更複雜的層次上進一步發展。期間有諸多的優化方法用於改進,不過這些改進已與這次讀書的目的無關了我就直接忽略掉。下面我們再繼續看另外幾個有趣網路。


推薦閱讀:

知識布局-神經網路-數學原理
當Node.js遇上OpenCV深度神經網路
韓國有家公司挺牛!號稱開發出了全球第一款量產的神經元晶元?
CS231n Assignment3
圖像識別鑒黃之二「阿里綠網VS網易易盾VS圖普科技」

TAG:神經網路 | 認知科學 |