bp
從神經網絡的生物模型說起
?????????我們知道人大腦信息的傳遞、對外界刺激產生反應都由神經元控制的,人腦就是由上百億個的這樣神經元構成。這些神經元之間并不孤立而且聯系很密切,每個神經元平均與幾千個神經元相連接,因此構成了人腦的神經網絡。刺激在神經網絡中的傳播是遵循一定的規則的,一個神經元并非每次接到其他神經傳遞過來的刺激都產生反應。它首先會將與其相鄰的神經元傳來的刺激進行積累,到一定的時候產生自己的刺激將其傳遞給一些與它相鄰的神經元。這樣工作的百億個的神經元構成了人腦對外界進行的反應。而人腦對外界刺激的學習的機制就是通過調節這些神經元之間聯系以及其強度。當然,實際上以上說的是對人腦真正神經工作的一種簡化的生物模型,利用這種簡化的生物模型可以將它推廣至機器學習中來,并把它描述成人工神經網絡。BP神經網絡就是其中的一種,來看看具體對神經元的分析。
圖1 ?神經網絡中神經元示意圖
?????????神經元的積累的刺激是由其他神經元傳遞過來的刺激量和對應的權重之和,用?Xj?表示這種積累,Yi?表示某個神經元傳遞過來的刺激量,Wi?表示鏈接某個神經元刺激的權重,得到公式:
?????????Xj?= (y1?* W1)+(y2?* W2)+...+(yi?* Wi)+...+ (yn?* Wn)
?????????而當?Xj?完成積累后,完成積累的神經元本身對周圍的一些神經元傳播刺激,將其表示為??yj??得到如下所示:
?????????yj?= f(Xj)
?????????神經元根據積累后?Xj?的結果進行處理后,對外傳遞刺激?yj?。用?f?函數映射來表示這種處理,將它稱之為?激活函數。
?
BP神經網絡的構成
?????????分析完單個的神經元后,再來看看它們組成網絡后的情形,用圖形來說明是最直觀的方法,如圖2所示:
?
圖2 ?BP神經網絡示意圖
?????????第一區域的來說,它們相當于外界的刺激,是刺激的來源并且將刺激傳遞給神經元,因此把第一區域命名為輸入層。第二區域,表示神經元相互之間傳遞刺激相當于人腦里面,因此把第二區命名為隱藏層。第三區域,表示神經元經過多層次相互傳遞后對外界的反應,因此把第三區域命名為輸出層。
????簡單的描述就是,輸入層將刺激傳遞給隱藏層,隱藏層通過神經元之間聯系的強度(權重)和傳遞規則(激活函數)將刺激傳到輸出層,輸出層整理隱藏層處理的后的刺激產生最終結果。若有正確的結果,那么將正確的結果和產生的結果進行比較,得到誤差,再逆推對神經網中的鏈接權重進行反饋修正,從而來完成學習的過程。這就是BP神經網的反饋機制,也正是BP(Back??Propagation)名字的來源:運用向后反饋的學習機制,來修正神經網中的權重,最終達到輸出正確結果的目的!
?
BP神經網絡的數學推導
?????????從數學上對BP神經網絡模型進行分析,本文第一部分神經網的生物模型中可以得到關于BP神經網絡的第一個公式(1):
?
?????????對于神經元本身的輸出的激活函數,一般來說選取?Sigmoid 函數,那么可以得到第二個公式(2):
?
弱逼補充:為啥選擇這個激活函數呢?因為這個函數連續可導,平滑性質好,
具體看圖:
至于為啥不選擇其他同樣平滑的函數,who knows...目測是實踐中檢驗出來的。好下面接著看原作者的:
?????????通過以上兩個公式,可以分析出來BP神經網絡中輸出結果的計算過程。每個神經元收到刺激?yi??然后加權積累(權重?Wji??)完成后產生?xj?,再通過激活函數產生刺激?yj?,向下一層與它相連的神經元傳遞,依次類推最終輸出結果。
?????????我們再來分析如何利用向后反饋機制來修正神經元權重?Wji,這一部分數學推導需要運用到多元微分的數學內容。要修正?Wji ?就需要得到誤差量。具體來看,首先用?dj??來表示真實的正確結果,并且設誤差為?E?,那么( yj?- dj?)對應的就是?E?對于?yj?的微分增量,即?yj??減去( yj?- dj?)后就能得到正確值,得到公式(3):
?
接著補充:這里提到了個微分增量,我把數學忘完了。。。
建議百度百科,這里微分就相當于是E這個錯誤是和yi的值成函數關系,yi-di就是函數關系,yi是自變量,E是函數的結果,所以這么的一個表示就是微分。。。后面的公示也是同理嘞。
同時,下面的證明過程中,一定要注意下標呀。j表示的是當前層。i表示的是前一層,記住這個后面就容易理解。
?????????然后,明確目標,需要知道的是對于權重?Wji?的誤差量是多少也就是 ????的值。而由公式(1)中知道?Wji?與?xj?相關, 那么可以推導出公式(4):
?
?????????需要求得?Wji?的誤差量,轉換為需要求 ???的值了。它的推導如下:
?
?????????其中 ???的值,可以通過公式(2)求導得出來:
?
?????????所以最終得到的的誤差量的值為:
?
?????????以上公式需要注意下標:最后一個是?yi?,前面的都是?yj?。推到這里可以算是完成了運用神經網絡的輸出值?yj?和正確值?dj??對最后一層隱藏層?Wji?的修正,那么對其他隱藏層呢? 接著往下看。
?????????上面的推導過程由公式(3)開始,如果我們知道 ??(注意是?yi?,公式(3)中是?yj?),就可以 同理 推導求出其對應其他隱藏層需要修正的權重值誤差量了。推導如下:
?
?????????這樣所有的誤差量的都可以 同理 推導完成!
這步推到只推出了三個連乘的第一個,后面兩個值與那層的變量相關,隨意結果只是下標改改。
?????????最后一步修正?Wji?,就是加上下面變量了,設置一個?l?(0 到 1 之間)學習率。
為啥要乘上呢l呢,理解是一點點的去減少調整這個誤差,設置值太小,慢,設置值太大,步長就大,這l也應該是一個值得考慮的問題。
?????????至此,BP神經網絡反饋部分的數學推導算完成了,可以在自己的草稿紙上畫畫~
寫在后面:梯度下降有個問題是容易陷入局部最小值的問題。如果這個問題不了解的話,那可以回想回想一個3d平面,有若干坑,如果隨機點沿著下降最快的地方去跑,很可能跑到了一個小坑里面,卻沒有跑到真正的全局最小值的坑里。
從博文的評論中看到該問作者實現了這個神經網絡,但是沒有使用這個梯度下降的模型。呵呵,這個就算是理解什么是神經網絡,什么是從后面往前推導的過程。下面待學習的就是評論中提到的動量因子模型。
作者實現實現了動量因子模型,代碼:
http://www.cnblogs.com/jzhlin/archive/2012/07/30/bp_c.html
http://www.cnblogs.com/jzhlin/archive/2012/08/01/bp_c2.html
以及還要看的:
概率神經網絡 (PNN) ?http://www.cnblogs.com/jzhlin/archive/2012/07/28/bp.html
總結
- 上一篇: jvm内存结构_聊聊JVM内存结构
- 下一篇: 已跳过全部重新生成_2020年最新跳对公