1. 程式人生 > >Deep Learning(深度學習)之(二)Deep Learning的基本思想

Deep Learning(深度學習)之(二)Deep Learning的基本思想

五、Deep Learning的基本思想

       假設我們有一個系統S,它有n層(S1,…Sn),它的輸入是I,輸出是O,形象地表示為: I =>S1=>S2=>…..=>Sn => O,如果輸出O等於輸入I,即輸入I經過這個系統變化之後沒有任何的資訊損失(呵呵,大牛說,這是不可能的。資訊理論中有個“資訊逐層丟失”的說法(資訊處理不等式),設處理a資訊得到b,再對b處理得到c,那麼可以證明:a和c的互資訊不會超過a和b的互資訊。這表明資訊處理不會增加資訊,大部分處理會丟失資訊。當然了,如果丟掉的是沒用的資訊那多好啊),保持了不變,這意味著輸入I經過每一層Si都沒有任何的資訊損失,即在任何一層Si,它都是原有資訊(即輸入I)的另外一種表示。現在回到我們的主題Deep Learning,我們需要自動地學習特徵,假設我們有一堆輸入I(如一堆影象或者文字),假設我們設計了一個系統S(有n層),我們通過調整系統中引數,使得它的輸出仍然是輸入I,那麼我們就可以自動地獲取得到輸入I的一系列層次特徵,即S1,…, Sn。

       對於深度學習來說,其思想就是對堆疊多個層,也就是說這一層的輸出作為下一層的輸入。通過這種方式,就可以實現對輸入資訊進行分級表達了。

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

六、淺層學習(Shallow Learning)和深度學習(Deep Learning)

       淺層學習是機器學習的第一次浪潮。

       20世紀80年代末期,用於人工神經網路的反向傳播演算法(也叫Back Propagation演算法或者BP演算法)的發明,給機器學習帶來了希望,掀起了基於統計模型的機器學習熱潮。這個熱潮一直持續到今天。人們發現,利用BP演算法可以讓一個人工神經網路模型從大量訓練樣本中學習統計規律,從而對未知事件做預測。這種基於統計的機器學習方法比起過去基於人工規則的系統,在很多方面顯出優越性。這個時候的人工神經網路,雖也被稱作多層感知機(Multi-layer Perceptron),但實際是種只含有一層隱層節點的淺層模型。

        20世紀90年代,各種各樣的淺層機器學習模型相繼被提出,例如支撐向量機(SVM,Support Vector Machines)、 Boosting、最大熵方法(如LR,Logistic Regression)等。這些模型的結構基本上可以看成帶有一層隱層節點(如SVM、Boosting),或沒有隱層節點(如LR)。這些模型無論是在理論分析還是應用中都獲得了巨大的成功。相比之下,由於理論分析的難度大,訓練方法又需要很多經驗和技巧,這個時期淺層人工神經網路反而相對沉寂。

        深度學習是機器學習的第二次浪潮。

        2006年,加拿大多倫多大學教授、機器學習領域的泰斗Geoffrey Hinton和他的學生RuslanSalakhutdinov在《科學》上發表了一篇文章,開啟了深度學習在學術界和工業界的浪潮。這篇文章有兩個主要觀點:1)多隱層的人工神經網路具有優異的特徵學習能力,學習得到的特徵對資料有更本質的刻畫,從而有利於視覺化或分類;2)深度神經網路在訓練上的難度,可以通過“逐層初始化”(layer-wise pre-training)來有效克服,在這篇文章中,逐層初始化是通過無監督學習實現的。

        當前多數分類、迴歸等學習方法為淺層結構演算法,其侷限性在於有限樣本和計算單元情況下對複雜函式的表示能力有限,針對複雜分類問題其泛化能力受到一定製約。深度學習可通過學習一種深層非線性網路結構,實現複雜函式逼近,表徵輸入資料分散式表示,並展現了強大的從少數樣本集中學習資料集本質特徵的能力。(多層的好處是可以用較少的引數表示複雜的函式)

 

        深度學習的實質,是通過構建具有很多隱層的機器學習模型和海量的訓練資料,來學習更有用的特徵,從而最終提升分類或預測的準確性。因此,“深度模型”是手段,“特徵學習”是目的。區別於傳統的淺層學習,深度學習的不同在於:1)強調了模型結構的深度,通常有5層、6層,甚至10多層的隱層節點;2)明確突出了特徵學習的重要性,也就是說,通過逐層特徵變換,將樣本在原空間的特徵表示變換到一個新特徵空間,從而使分類或預測更加容易。與人工規則構造特徵的方法相比,利用大資料來學習特徵,更能夠刻畫資料的豐富內在資訊。

七、Deep learning與Neural Network

        深度學習是機器學習研究中的一個新的領域,其動機在於建立、模擬人腦進行分析學習的神經網路,它模仿人腦的機制來解釋資料,例如影象,聲音和文字。深度學習是無監督學習的一種。

        深度學習的概念源於人工神經網路的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習通過組合低層特徵形成更加抽象的高層表示屬性類別或特徵,以發現數據的分散式特徵表示。

       Deep learning本身算是machine learning的一個分支,簡單可以理解為neural network的發展。大約二三十年前,neural network曾經是ML領域特別火熱的一個方向,但是後來確慢慢淡出了,原因包括以下幾個方面:

1)比較容易過擬合,引數比較難tune,而且需要不少trick;

2)訓練速度比較慢,在層次比較少(小於等於3)的情況下效果並不比其它方法更優;

       所以中間有大約20多年的時間,神經網路被關注很少,這段時間基本上是SVM和boosting演算法的天下。但是,一個痴心的老先生Hinton,他堅持了下來,並最終(和其它人一起Bengio、Yann.lecun等)提成了一個實際可行的deep learning框架。

        Deep learning與傳統的神經網路之間有相同的地方也有很多不同。

        二者的相同在於deep learning採用了神經網路相似的分層結構,系統由包括輸入層、隱層(多層)、輸出層組成的多層網路,只有相鄰層節點之間有連線,同一層以及跨層節點之間相互無連線,每一層可以看作是一個logistic regression模型;這種分層結構,是比較接近人類大腦的結構的。

 

        而為了克服神經網路訓練中的問題,DL採用了與神經網路很不同的訓練機制。傳統神經網路中,採用的是back propagation的方式進行,簡單來講就是採用迭代的演算法來訓練整個網路,隨機設定初值,計算當前網路的輸出,然後根據當前輸出和label之間的差去改變前面各層的引數,直到收斂(整體是一個梯度下降法)。而deep learning整體上是一個layer-wise的訓練機制。這樣做的原因是因為,如果採用back propagation的機制,對於一個deep network(7層以上),殘差傳播到最前面的層已經變得太小,出現所謂的gradient diffusion(梯度擴散)。這個問題我們接下來討論。

八、Deep learning訓練過程

8.1、傳統神經網路的訓練方法為什麼不能用在深度神經網路

       BP演算法作為傳統訓練多層網路的典型演算法,實際上對僅含幾層網路,該訓練方法就已經很不理想。深度結構(涉及多個非線性處理單元層)非凸目標代價函式中普遍存在的區域性最小是訓練困難的主要來源。

BP演算法存在的問題:

(1)梯度越來越稀疏:從頂層越往下,誤差校正訊號越來越小;

(2)收斂到區域性最小值:尤其是從遠離最優區域開始的時候(隨機值初始化會導致這種情況的發生);

(3)一般,我們只能用有標籤的資料來訓練:但大部分的資料是沒標籤的,而大腦可以從沒有標籤的的資料中學習;

8.2、deep learning訓練過程

       如果對所有層同時訓練,時間複雜度會太高;如果每次訓練一層,偏差就會逐層傳遞。這會面臨跟上面監督學習中相反的問題,會嚴重欠擬合(因為深度網路的神經元和引數太多了)。

       2006年,hinton提出了在非監督資料上建立多層神經網路的一個有效方法,簡單的說,分為兩步,一是每次訓練一層網路,二是調優,使原始表示x向上生成的高階表示r和該高階表示r向下生成的x'儘可能一致。方法是:

1)首先逐層構建單層神經元,這樣每次都是訓練一個單層網路。

2)當所有層訓練完後,Hinton使用wake-sleep演算法進行調優。

       將除最頂層的其它層間的權重變為雙向的,這樣最頂層仍然是一個單層神經網路,而其它層則變為了圖模型。向上的權重用於“認知”,向下的權重用於“生成”。然後使用Wake-Sleep演算法調整所有的權重。讓認知和生成達成一致,也就是保證生成的最頂層表示能夠儘可能正確的復原底層的結點。比如頂層的一個結點表示人臉,那麼所有人臉的影象應該啟用這個結點,並且這個結果向下生成的影象應該能夠表現為一個大概的人臉影象。Wake-Sleep演算法分為醒(wake)和睡(sleep)兩個部分。

1)wake階段:認知過程,通過外界的特徵和向上的權重(認知權重)產生每一層的抽象表示(結點狀態),並且使用梯度下降修改層間的下行權重(生成權重)。也就是“如果現實跟我想象的不一樣,改變我的權重使得我想象的東西就是這樣的”。

2)sleep階段:生成過程,通過頂層表示(醒時學得的概念)和向下權重,生成底層的狀態,同時修改層間向上的權重。也就是“如果夢中的景象不是我腦中的相應概念,改變我的認知權重使得這種景象在我看來就是這個概念”。

deep learning訓練過程具體如下:

1)使用自下上升非監督學習(就是從底層開始,一層一層的往頂層訓練):

       採用無標定資料(有標定資料也可)分層訓練各層引數,這一步可以看作是一個無監督訓練過程,是和傳統神經網路區別最大的部分(這個過程可以看作是feature learning過程):

       具體的,先用無標定資料訓練第一層,訓練時先學習第一層的引數(這一層可以看作是得到一個使得輸出和輸入差別最小的三層神經網路的隱層),由於模型capacity的限制以及稀疏性約束,使得得到的模型能夠學習到資料本身的結構,從而得到比輸入更具有表示能力的特徵;在學習得到第n-1層後,將n-1層的輸出作為第n層的輸入,訓練第n層,由此分別得到各層的引數;

2)自頂向下的監督學習(就是通過帶標籤的資料去訓練,誤差自頂向下傳輸,對網路進行微調):

       基於第一步得到的各層引數進一步fine-tune整個多層模型的引數,這一步是一個有監督訓練過程;第一步類似神經網路的隨機初始化初值過程,由於DL的第一步不是隨機初始化,而是通過學習輸入資料的結構得到的,因而這個初值更接近全域性最優,從而能夠取得更好的效果;所以deep learning效果好很大程度上歸功於第一步的feature learning過程。