反向傳播算法(Back Propagation):
引言:
在邏輯回歸中,我們使用梯度下降法求參數方程的最優解。
這種方法在神經網絡中並不能直接使用,
因為神經網絡有多層參數(最少兩層),(?為何不能)
這就要求對梯度下降法做少許改進。
實現過程:
一、正向傳播
首先,同邏輯回歸,我們求出神經網絡輸出與實際值的“誤差”——COST:
這里先使用歐式距離而不是索夫曼函數作為輸出的cost:
展開之后:
(注意右邊的權重衰減項,既規則化)
二、反向傳播
對於第 層(輸出層)的每個輸出單元
,我們根據以下公式計算殘差:
對 的各個層,第
層的第
個節點的殘差計算方法如下
這里:
這里相當於把本層節點的殘差按照權重“投影”到上一層殘差的節點上(“反向傳播”就是這個意思)
在計算出各節點的殘差之后,參數的偏導如下計算:
然后就可以梯度下降去了!
梯度下降過程:
1、進行前饋計算,求的所有節點的輸出,求得cost;
2、進行反向傳播計算,求的所有節點殘差(第nl ~ 第2層)
3、利用公式求得cost對參數的偏導
4、更新偏導。
5、重復1~4知道cost差距小於預設值或重復次數大於預設值
(這里以上只講實現方法,省略所有證明。相關證明貼於最后。)
隨機初始化( Random Initialization):
在進行第一次前饋算法之前,神經網絡參數的值是多少呢?
全零初始化?這是不可以的!
如果選擇相同的參數進行初始化,
隱藏節點的出入必定相同(自己推推,更不用說輸出了)。
為了使得對稱失效,我們對神經網絡的參數進行隨機初始化,
既采用接近零的初始值進行初始化。
這個過程可以用matlab產生隨機矩陣的功能來實現。
初始化之后,讓我們一起下降吧!
用到的證明(殘差的計算):
1、
2、