1. 程式人生 > >淺談深度學習(Deep Learning)的基本思想和方法

淺談深度學習(Deep Learning)的基本思想和方法

深度學習(Deep Learning),又叫Unsupervised Feature Learning或者Feature Learning,是目前非常熱的一個研究主題。

本文將主要介紹Deep Learning的基本思想和常用的方法。

一. 什麼是Deep Learning?

實際生活中,人們為了解決一個問題,如物件的分類(物件可是是文件、影象等),首先必須做的事情是如何來表達一個物件,即必須抽取一些特徵來表示一個物件,如文字的處理中,常常用詞集合來表示一個文件,或把文件表示在向量空間中(稱為VSM模型),然後才能提出不同的分類演算法來進行分類;又如在影象處理中,我們可以用畫素集合來表示一個影象,後來人們提出了新的特徵表示,如SIFT,這種特徵在很多影象處理的應用中表現非常良好,特徵選取得好壞對最終結果的影響非常巨大。因此,選取什麼特徵對於解決一個實際問題非常的重要。

然而,手工地選取特徵是一件非常費力、啟發式的方法,能不能選取好很大程度上靠經驗和運氣;既然手工選取特徵不太好,那麼能不能自動地學習一些特徵呢?答案是能!Deep Learning就是用來幹這個事情的,看它的一個別名Unsupervised Feature Learning,就可以顧名思義了,Unsupervised的意思就是不要人蔘與特徵的選取過程。因此,自動地學習特徵的方法,統稱為Deep Learning。

二. Deep Learning的基本思想

假設我們有一個系統S,它有n層(S1,...Sn),它的輸入是I,輸出是O,形象地表示為: I =>S1=>S2=>.....=>Sn => O,如果輸出O等於輸入I,即輸入I經過這個系統變化之後沒有任何的資訊損失,保持了不變,這意味著輸入I經過每一層Si都沒有任何的資訊損失,即在任何一層Si,它都是原有資訊(即輸入I)的另外一種表示。現在回到我們的主題Deep Learning,我們需要自動地學習特徵,假設我們有一堆輸入I(如一堆影象或者文字),假設我們設計了一個系統S(有n層),我們通過調整系統中引數,使得它的輸出仍然是輸入I,那麼我們就可以自動地獲取得到輸入I的一系列層次特徵,即S1,..., Sn。

另外,前面是假設輸出嚴格地等於輸入,這個限制太嚴格,我們可以略微地放鬆這個限制,例如我們只要使得輸入與輸出的差別儘可能地小即可,這個放鬆會導致另外一類不同的Deep Learning方法。上述就是Deep Learning的基本思想。

三.Deep Learning的常用方法

a). AutoEncoder

最簡單的一種方法是利用人工神經網路的特點,人工神經網路(ANN)本身就是具有層次結構的系統,如果給定一個神經網路,我們假設其輸出與輸入是相同的,然後訓練調整其引數,得到每一層中的權重,自然地,我們就得到了輸入I的幾種不同表示(每一層代表一種表示),這些表示就是特徵,在研究中可以發現,如果在原有的特徵中加入這些自動學習得到的特徵可以大大提高精確度,甚至在分類問題中比目前最好的分類演算法效果還要好!這種方法稱為AutoEncoder。當然,我們還可以繼續加上一些約束條件得到新的Deep Learning方法,如如果在AutoEncoder的基礎上加上L1的Regularity限制(L1主要是約束每一層中的節點中大部分都要為0,只有少數不為0,這就是Sparse名字的來源),我們就可以得到Sparse AutoEncoder方法。

b). Sparse Coding

如果我們把輸出必須和輸入相等的限制放鬆,同時利用線性代數中基的概念,即O = w1*B1 + W2*B2+....+ Wn*Bn, Bi是基,Wi是係數,我們可以得到這樣一個優化問題:

                                                                                    Min |I - O| 

通過求解這個最優化式子,我們可以求得係數Wi和基Bi,這些係數和基礎就是輸入的另外一種近似表達,因此,它們可以特徵來表達輸入I,這個過程也是自動學習得到的。如果我們在上述式子上加上L1的Regularity限制,得到:

                                                                                    Min |I - O| + u*(|W1| + |W2| + ... + |Wn|)

這種方法被稱為Sparse Coding。

c) Restrict  Boltzmann Machine (RBM)

假設有一個二部圖,每一層的節點之間沒有連結,一層是可視層,即輸入資料層(v),一層是隱藏層(h),如果假設所有的節點都是二值變數節點(只能取0或者1值),同時假設全概率分佈p(v, h)滿足Boltzmann 分佈,我們稱這個模型是Restrict  Boltzmann Machine (RBM)。下面我們來看看為什麼它是Deep Learning方法。首先,這個模型因為是二部圖,所以在已知v的情況下,所有的隱藏節點之間是條件獨立的,即p(h|v) =p(h1|v).....p(hn|v)。同理,在已知隱藏層h的情況下,所有的可視節點都是條件獨立的,同時又由於所有的v和h滿足Boltzmann 分佈,因此,當輸入v的時候,通過p(h|v) 可以得到隱藏層h,而得到隱藏層h之後,通過p(v|h) 又能得到可視層,通過調整引數,我們就是要使得從隱藏層得到的可視層v1與原來的可視層v如果一樣,那麼得到的隱藏層就是可視層另外一種表達,因此隱藏層可以作為可視層輸入資料的特徵,所以它就是一種Deep Learning方法。

如果,我們把隱藏層的層數增加,我們可以得到Deep Boltzmann Machine (DBM);如果我們在靠近可視層的部分使用貝葉斯信念網路(即有向圖模型,當然這裡依然限制層中節點之間沒有連結),而在最遠離可視層的部分使用Restrict  Boltzmann Machine,我們可以得到Deep Belief Net (DBN) 。

當然,還有其它的一些Deep Learning 方法,在這裡就不敘述了。總之,Deep Learning能夠自動地學習出資料的另外一種表示方法,這種表示可以作為特徵加入原有問題的特徵集合中,從而可以提高學習方法的效果,是目前業界的研究熱點。