如何用DBN做回歸——對我之前提問的解答以及用DBN做回歸的

之前在知乎上問了一個問題,關於用theano構建的DBN網路怎麼樣接收浮點數輸入,然而沒有人回答,那麼看來要麼是這個問題比較簡單,要麼是這個問題比較少人做,要麼是這個問題比較困難。無論如何,我總算將整個DBN跑通了。而在網路上搜索,對於用神經網路做回歸的本來就比較少,而用DBN做回歸的更是沒有搜索到相關的資料。理論上DBN等的神經網路都可以用於回歸分析,接下來是對DBN做回歸的概述等。但先聲明:DBN並不適合用來做回歸分析。

二十秒看全文:

1. DBN輸入改成浮點數或者整數浮點數都接受的情況;

2. 改造RBM的free_energy function, 可見層神經元的抽樣模式,將binary_RBM改造成continuous RBM;

3. 改在cost_function尤其是reconstruct_cost;

4. 用keras來做BP吧!

5. DBN為什麼不適用於回歸。

以下是正文:

1. 原本DBN的設計是為了給黑白圖片進行分類的,也就是一般來說,輸入的數據本應全部是零一(好吧,這裡不寫0和1就是為了逼強迫症,我是獅子座。),並且標籤數據只能是整數,因為在後續的BP演算法中,利用了標籤(也就是labels或者y)的索引來計算負對數似然函數(neg_log_likelihood)。我們要如何去改呢? !!!!開始正題:

###將y=ivector(y)改成y=dvector(y)或者之類的允許y是浮點數的(其實X的輸入呢暫時還沒發現需要修改,因為後面會修改RBM。)###

2.將原本的binary RBM(也就是theano deeplearning官網掛的RBM默認的形式)改成我們需要的輸入連續數據的continuous RBM,也是高斯-伯努利 RBM。修改的時候需要花點功夫去看看論文和公式,實際上的修改需要你們自己去摸索,這樣才有學習的意義,我不會將代碼貼上來的,但是我會說需要修改的方向。!!!!開始正題:

###

1.修改v_bias_term,主要是v_sample除以標準差σ(這裡是按照論文公式,實際上下面會講到,抽樣的時候v_sample就已經除以這個標準差了,不用再除),基本上就是按照論文公式來,什麼論文?哦哦,自己去搜,關鍵詞:continuous RBM,或者GBRBM。最後返回的值也需要修改成相應的值。

2.在從隱藏層返回到可見層抽樣時(也是擬合可見層數據的過程,不知道怎麼表達。)就是sample_v_given_h的時候,抽樣方法原本是binomial,這裡改成normal。(這裡的抽樣和隱藏層的數據沒有什麼關係,因此還是只是修改了可見層)。加入高斯轉換的可見層是一種對這個網路的緩衝(因為原本這個網路的接受的值是不連續的,加入了高斯以後可以進行緩衝,實際上DBN整體網路架構還是按照分類來做,這也是DBN不適合回歸的理由之一。)

###

3.修改reconstruct_cost。在theano那個DBN代碼中,默認用了reconstruct_cost當做cost,演算法是用了binary cross entropy。這個演算法是用來查看兩個數據分布的相似程度的,就是衡量KL散度的。那麼我們需要修改的就是將這個修改成為多分類的categorical cross entropy或者直接用RMSE(均方根誤差),因為這裡是RBM網路為了擬合X的分布進行cost的運算,因此不強求只用RMSE。

以上三點就是RBM的修改草稿了,我知道可能會有很多bug,歡迎聯繫之處,不,一定要聯繫指出。

4.用keras來做BP吧。因為在deeplearning官網上的代碼的BP用finetune來標明,而實際上它的validation的函數還是test的函數都是基於分類來寫的,要求的y(或者labels)必須是整數,否則得出來的結果它就報告是正確率零。雖然這並沒有什麼關係,畢竟finetune時候用到的函數也不是上面的驗證函數。用keras的另一個好處是可以控制神經網路中更多的因素,以達到更好的訓練回歸效果。

5.為什麼DBN不適用於回歸?

首先是其原本就是對輸入的X擬合併且初始化權值後,再進行BP的,而原本DBN的設計就是針對二值數據的,即便後續加入了高斯轉換,如果維度較高,那麼最終這樣的緩衝的效力就會大大減小。當然,對於一些低維度的數據,效果還是可以的。

其次,對於高維度的數據,我們訓練的時候會發現,無論cost用多分類的cross entropy還是RMSE(注意數據需要先用sigmoid將數據壓到0到1之間,再比較,因為網路和函數本身會對從隱層抽樣的數據進行sigmoid運算),即便這個cost已經比原本的二值cross entropy小了很多,但是依然會十分地大,最終從RBM中得到的權值由於損失過大,權值要麼有零,要麼絕對值很大以彌補這個損失,那麼對於後續進行BP演算法來說,會發生除零錯誤,最終無法訓練甚至得不到結果。

或者換句話說,DBN只適合低維度的回歸。但效果如何?不知道。

參考資料:

1. deeplearning DBN 官方文檔

--------

最後,有問題一定和我說,我還要那它或者其他網路搞事呢!!另外,我是個學生物的(手動微笑)。


推薦閱讀:

一文徹底搞懂BP演算法:原理推導+數據演示+項目實戰(上篇)
讀取腦磁波,神經網路知道你在「猶豫不定」
GAN之父:讓機器擁有天賦 我還在對付利用AI作惡的人
無人駕駛汽車決策規則提取演算法和換道策略匯總
Michael Nielsen對交叉熵的解釋(三)

TAG:生物信息學 | 神經網路 |