1. 程式人生 > >Deep Learning(深度學習)學習筆記整理系列三

Deep Learning(深度學習)學習筆記整理系列三

學習能力 架構 -s 解釋 區別 初始化 filter 大牛 ted

Deep Learning(深度學習)學習筆記整理系列

聲明:

1)該Deep Learning的學習系列是整理自網上很大牛和機器學習專家所無私奉獻的資料的。具體引用的資料請看參考文獻。具體的版本聲明也參考原文獻。

2)本文僅供學術交流,非商用。所以每一部分具體的參考資料並沒有詳細對應。如果某部分不小心侵犯了大家的利益,還望海涵,並聯系博主刪除。

3)本人才疏學淺,整理總結的時候難免出錯,還望各位前輩不吝指正,謝謝。

4)閱讀本文需要機器學習、計算機視覺、神經網絡等等基礎(如果沒有也沒關系了,沒有就看看,能不能看懂,呵呵)。

5)此屬於第一版本,若有錯誤,還需繼續修正與增刪。還望大家多多指點。大家都共享一點點,一起為祖國科研的推進添磚加瓦(呵呵,好高尚的目標啊)。請聯系:[email protected]

目錄:

一、概述

二、背景

三、人腦視覺機理

四、關於特征

4.1、特征表示的粒度

4.2、初級(淺層)特征表示

4.3、結構性特征表示

4.4、需要有多少個特征?

五、Deep Learning的基本思想

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

七、Deep learning與Neural Network

八、Deep learning訓練過程

8.1、傳統神經網絡的訓練方法

8.2、deep learning訓練過程

九、Deep Learning的常用模型或者方法

9.1、AutoEncoder自動編碼器

9.2、Sparse Coding稀疏編碼

9.3、Restricted Boltzmann Machine(RBM)限制波爾茲曼機

9.4、Deep BeliefNetworks深信度網絡

9.5、Convolutional Neural Networks卷積神經網絡

十、總結與展望

十一、參考文獻和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過程。

Deep Learning(深度學習)學習筆記整理系列三