簡介:本文主要介紹了簡單二分神經網絡的公式推導過程。html
歡迎探討,若有錯誤敬請指正 算法
如需轉載,請註明出處 http://www.cnblogs.com/nullzx/網絡
定義一個名爲n的列表函數
n[i]表示第i層的節點數 i從0開始學習
L = len(n)-1表示神經網絡的層數,網絡的層數從第0層開始spa
W[i]的維度爲(n[i], n[i-1]) i從1開始.net
b[i]的維度爲(n[i], 1) i從1開始3d
X表示訓練樣本矩陣,每一個訓練樣本有d個特徵,有m個訓練樣本,因此X的維度是(d, m) 即n[0] = d htm
「*」表示對應元素相乘,表示第i個樣本的真實值,表示第i個樣本的預測值,也就是神經網絡最後一層的輸出。
對於二分類的神經網絡來講,最後一層的激活函數通常都是sigmoid函數
sigmoid函數由下列公式定義
從圖中可知,最後一層的輸出爲0~1之間,能夠看作機率。咱們能夠把二分神經網絡當作一個機率模型,輸入爲一些特徵,輸出爲機率,並且知足二項分佈
表示真實值爲0時,神經網絡預測準確的機率,咱們能夠將上面的分段函數寫成一個表達式
因此上式表示了神經網絡預測準確的機率。
當前有m個樣本,那麼like表示了這m個樣本同時預測準確的機率
咱們的目的就是讓like取最大值,因爲對數函數ln(x)是一個單調函數,因此當like函數取最大值時,ln(like)必定取得最大值
ln(like)取得最大值等價於下面的值取得最小。
而這個就是損失函數,初始化時w和b隨機,咱們經過隨機梯度降低法,獲得w和b使得損失函數最小。
另外一方面,咱們還能夠經過信息論的角度推導交叉熵
L表示最後一層,從最後一層開始,由損失函數逐步向後求導
通常狀況下
sigmoid的導數能夠用自身表示:
必定是維度 (1, m)一個樣本對應一列(也就是一個數值),
假設已經知道了 ,它的維度是(n[i], m),則能夠推出三點:
1) ,它的維度是(n[i], m) 乘以(n[i-1], m)T
它的維度是(n[i+1], n[i]).T乘以(n[i+1], m)
同理還能夠繼續推出
*表示對應元素相乘,而就是激活函數的求導,這樣就能夠繼續向下求導了
k表示學習速度
對於上圖神經網絡的而言的一個訓練樣本而言,在求導的過程當中咱們應該把當作一個有關的超多元函數
咱們從最後一層開始反向傳播
注意最後推導出來的結果是兩個矩陣的乘法
繼續向前一層進行反向傳播
維度(3,1)
由於
展開可得
如今將成本函數當作由這12個自變量的函數(爲啥是12個,由於每個都是一個1行4列的向量)
這矩陣正好能夠表示成
維度(3,1)乘 維度(4,1)T 造成一個(3,4)的矩陣
如今將成本函數當作由這4個自變量的函數(爲啥是4個,由於是一個4行1列的向量)
這個矩陣剛好能夠表示成
通用形式:
對於m個樣本而言,咱們求得的某個參數的導數是m樣本分別對這個參數求導的平均值。至此反向傳播過程推導推導完畢。
[1]. 淺談神經網絡算法