1. 程式人生 > >什麽是反向傳播(第二篇)

什麽是反向傳播(第二篇)

圖片 ont epm 什麽是 put 回來 課程 之前 idea

作者韓小雨

類比幾個人站成一排,第一個人看一幅畫(輸入數據),描述給第二個人(隱層)……依此類推,到最後一個人(輸出)的時候,畫出來的畫肯定不能看了(誤差較大)。

反向傳播就是,把畫拿給最後一個人看(求取誤差),然後最後一個人就會告訴前面的人下次描述時需要註意哪裏(權值修正)。

不知明白了沒有,如果需要理論推導(其實就是鏈式法則+梯度下降法),可以參考1986年的bp算法的論文。(20141202, 補上論文題目: Learning representations by back-propagating errors, David E. Rumelhart, Geoffrey E. Hinton & Ronald J. Williams, 1986.

1.什麽是反向傳播及背景

眾所周知,在深度學習中我們使用反向傳播算法進行訓練。可能在任意一門深度學習課程中,反向傳播都是必學的內容。我們使用反向傳播計算每個參數的梯度,從而能夠使用各種梯度下降方法SGDAdamRMSProp等來更新參數。基本上可以說反向傳播算法是深度學習算法的基礎。目前所有的深度學習應用,都基於反向傳播算法進行訓練。

但是,我們人類的大腦是這樣學習的嗎?

誠然現在的神經科學還無法告訴我們真正的答案,但我們憑我們的常識想想,我們大腦真正的神經網絡會需要這樣先前向傳播一下,再反向傳播一下然後更新神經元?這未免太不科學了。直觀的想象我們大腦的神經元應該都是單獨的個體,通過與周圍的神經元交流來改變自己。但是對於反向傳播算法,這種方法最大的缺點就是更新速度。前面的神經元需要等著後面的神經網絡傳回誤差數據才能更新,要是以後搞個

10000+層的神經網絡,這顯然就太慢了。所以,

能不能異步的更新參數?

甚至,每個參數能夠同時更新?

或者差一點,只要前向傳播一下就能更新參數?

這些問題要是能解決那就是game changing了。

那麽現在DeepMind又開掛了,最新2016818號出來的問題第一次解決了上面的問題。

文章題目:Decoupled Neural Interfaces using Synthetic Gradients

文章鏈接:https://arxiv.org/pdf/1608.05343.pdf (本文圖片都引用自文章)

2 What is the idea?

如果我們陷入在反向傳播的思維中,我們就完全無法想象如果沒有從後面傳回來梯度誤差,我們該怎麽更新參數。

DeepMind打破這種思路,如果不傳回來,我們可以

合成梯度!也就是Synthetic Gradients

也就是我們可以預測梯度。如果我們預測得準確,那麽就可以直接更新了。

看上圖,一般的反向傳播如圖b所示,從後到前依次傳遞梯度(綠色的線),然後更新參數。那麽這裏,我們使用一個M來預測梯度(藍色的線),然後更新參數。我們傳給M當前層的輸出,然後M返回給我們梯度。

就用神經網絡來預測!

也就是每一層的神經網絡對應另一個神經網絡M,每個M來調控每一層的神經網絡更新,這套方法稱為 Decoupled Neural Interfaces(DNI), 也就是將神經網絡分解訓練的意思。

那麽不管是

MLPCNN還是RNN或者其他各種結構的神經網絡,因為都是以層為單位,都可以使用神經網絡來合成梯度,也就是都可以使用這樣的方法來實現訓練。

3 合成梯度的M神經網絡是如何訓練的?

技術分享技術分享

合成梯度的M神經網絡用來輸出估計的梯度誤差。那麽要訓練M就需要有一個梯度誤差來做目標,但是這裏沒有完全的反向傳播,如何得到真實的梯度誤差?作者采用一個tradeoff

技術分享

利用下一層神經網絡的估計梯度誤差來計算本層的梯度誤差,並利用這個誤差作為目標訓練M。如上圖所示。

4 看結果

技術分享

上圖是MNIST的訓練,采用全連接網絡FCN或者CNN進行訓練。從結果上可以看到,DNI特別是cDNI(就是將數據的標簽作為神經網絡M的輸入)效果蠻好的(略低於反向傳播),但是訓練速度比原來采用反向傳播的快,特別看上面的曲線橙色部分,比灰色的反向傳播快了非常多。

從上面的結果可以看出,采用DNI進行訓練相比反向傳播竟然速度快,效果好。要是預測梯度的神經網絡能提前訓練好,估計又能快不少吧!

技術分享

上面這圖是針對RNN的訓練,一個是Repeat Copy復制任務,一個是語言模型的訓練。因為RNN的梯度計算面臨無窮的循環,所以一般采用一定的時間間隔來計算梯度。那麽這裏,DNI的效果遠遠超過了BPTTBack Propagation Through Time). 速度兩倍以上。

從上面的結果可以看出,采用DNI進行訓練相比反向傳播竟然速度快,效果好。要是預測梯度的神經網絡能提前訓練好,估計又能快不少吧!

5 One More Thing

DeepMind不僅僅做到不需要反向傳播,甚至更進一步,連前向傳播也不用,直接異步更新每一層的參數。怎麽做的?

不僅僅預測梯度,我們還預測輸入!

這樣做對於MNIST的訓練也能達到2%的誤差,只是慢了一點。估計主要的慢是在IM的模型訓練上。這裏4層隱藏層就有6個額外的神經網絡了。

6 這個成果意味著什麽?神經網絡模塊化了。

每一層網絡都可以看成獨立的一個模塊,模塊與模塊之間相互通信,從而實現學習。而學習訓練不再需要同步,可以異步。也就是說每個模塊都可以獨立訓練。Paper中也做了異步訓練的實驗,可以隨機的訓練神經網絡中的不同層,或者有兩個神經網絡需要相互配合的,都可以異步訓練。這是這個成果最大的意義,將能夠因此構建出完全不一樣的神經網絡模型,訓練方式發生完全的改變。

7 存在的問題

大家都可以註意到,雖然這個idea能夠使主神經網絡不再使用反向傳播算法,但是IM的神經網絡都是依靠反向傳播算法進行更新!也就是反而多了好多個小的神經網絡。但是這個方法如果不考慮IM(主要是M)的訓練,那麽顯然將會非常的快。那麽,I比較難,涉及到具體的輸入,但是有沒有可能能夠預訓練M呢?或者換一個角度思考,我們人類大腦的神經元是否是相互獨立,每一個神經元都有自己的一套學習機制在裏面,能夠自主改變?這些很值得我們思考。

8 一點感想

因為神經網絡什麽都能學習,所以用神經網絡來更新神經網絡也不足為怪。之前的最前沿:讓計算機學會學習Let Computers Learn to Learn - 智能單元 - 知乎專欄就是使用神經網絡來做梯度更新的工作。這裏是使用神經網絡來合成梯度。所以,如果把上一篇的成果結合進來,神經網絡大部分都是神經網絡自己在訓練了!

這是深度學習基本學習機制的大變革,一步一步邁向人類的大腦!

技術分享

補充:DeepMind官網給出了一個介紹DNI的博客:https://deepmind.com/blog#decoupled-neural-interfaces-using-synthetic-gradients

你下面為大家展示板向傳播的實際應用。

技術分享技術分享

技術分享

文章來自知乎 百度

什麽是反向傳播(第二篇)