大名鼎鼎的BackPropagation算法署穗,是如今神經網絡/深度學習的基礎優(yōu)化算法。
其實在1974年Paul Werbos就提出了利用backprop優(yōu)化求解神經網絡的可能性案疲,真正火起來是1986年Rumelhart和Hinton一起重新發(fā)現(xiàn),通過backpropgation算法可以有效地優(yōu)化求解神經網絡麻养。
隨著神經網絡的今年飛速發(fā)展,如今的深度學習鳖昌,背后的優(yōu)化策略就是基于這套簡單有效的BP算法。
關于BP算法的直觀解釋和理解许昨,可以參考下面的回答:
如何直觀地解釋 back propagation 算法?-胡逸夫的回答
感謝作者非常直觀莉恼、詳細地解釋了BP算法的原理,并給出了直觀的理解方式类垫。
但是我在瀏覽大量對于BP算法的解釋,都基本止步于此残家。
對于BP算法的解釋,其實已經很到位了坞淮,但是具體到神經網絡中的參數(shù)優(yōu)化陪捷,個人感覺作者還沒講完,因此很多人可能會對各層參數(shù)的優(yōu)化存在疑問市袖。
如上圖所示,我們假設輸入是a,b, 輸出是e酒觅,h(x),g(x),z(x)可以看做是中間的hidden layer。
那么可以得到: e = z(h(a,b),g(b))
通過作者推導的自頂而下的反向傳播舷丹,我們可以根據(jù)鏈式求導法則蜓肆,將求導的過程分割開來。
但是要注意的是仗扬,上圖中并沒有任何可學習的參數(shù)。
在神經網絡中穴豫,我們要學習的是各層的參數(shù),要更新的其實是各層的參數(shù)精肃,而神經網絡的輸入(這里可以看做是a,b)其實是固定的帜乞。
所以我們實際要調整的是各層的參數(shù)(weights,bias等),而這樣的過程并沒有在上圖中反應出來黎烈。
我們考慮各層有參數(shù)的情況匀谣,如下圖所示资溃。
這樣的情況才是我們神經網絡bp中經常遇到的,此時我們需要bp更新的是其中的參數(shù)w1,w2,w3,w4宝恶,而不是a,b.
此時我們考慮其中某一層的參數(shù)更新趴捅,如下圖所示:
在這一層中,我們實際要更新的參數(shù)是w3,
我們的bottom輸入是b,top輸出是d,
我們要得到的是整個網絡loss function關于w3的偏導综芥,然后根據(jù)w3=w3-lr x gradient對w3進行更新。
根據(jù)鏈式法則膀藐,我們發(fā)現(xiàn)其實top中我們已得到loss function關于top blob的偏導迟几。那么此時只要計算top blob關于要學習的參數(shù)的偏導,就可以根據(jù)鏈式運算得loss function關于要學習的參數(shù)的偏導类腮,就可以進行參數(shù)更新了蛉加。
在上圖中,我們的top blob是d,要學習的參數(shù)是w3. d與w3的關系是d=w3 x b+1
可以得到d關于w3的偏導是b厂抽,而b的取值我們根據(jù)前向傳播已知為1。
所以loss關于w3的偏導為3*1=3筷凤,這樣我們就可以根據(jù)bp進行w3的更新了。
同時我們計算該層function關于bottom的偏導藐守,繼續(xù)回傳蹂风,該層的bottom就可以作為前一層的top,這樣就實現(xiàn)了神經網絡中對各層參數(shù)的更新。
后續(xù)將簡單介紹以下Caffe中backwar部分的實現(xiàn)惠啄,未完待續(xù)任内。融柬。
話說簡書不支持數(shù)學公式真是反人類啊。粒氧。。