學習筆記三

五、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)來有效克服,在這篇文章中,逐層初始化是通過無監督學習實現的。
當前多數分類、回歸等學習方法為淺層結構算法,其局限性在于有限樣本和計算單元情況下對復雜函數的表示能力有限,針對復雜分類問題其泛化能力受到一定制約。深度學習可通過學習一種深層非線性網絡結構,實現復雜函數逼近,表征輸入數據分布式表示,并展現了強大的從少數樣本集中學習數據集本質特征的能力。(多層的好處是可以用較少的參數表示復雜的函數)

image.png

深度學習的實質,是通過構建具有很多隱層的機器學習模型和海量的訓練數據,來學習更有用的特征,從而最終提升分類或預測的準確性。因此,“深度模型”是手段,“特征學習”是目的。區別于傳統的淺層學習,深度學習的不同在于: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模型;這種分層結構,是比較接近人類大腦的結構的。

image.png

而為了克服神經網絡訓練中的問題,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的常用模型或者方法

9.1、AutoEncoder自動編碼器

Deep Learning最簡單的一種方法是利用人工神經網絡的特點,人工神經網絡(ANN)本身就是具有層次結構的系統,如果給定一個神經網絡,我們假設其輸出與輸入是相同的,然后訓練調整其參數,得到每一層中的權重。自然地,我們就得到了輸入I的幾種不同表示(每一層代表一種表示),這些表示就是特征。自動編碼器就是一種盡可能復現輸入信號的神經網絡。為了實現這種復現,自動編碼器就必須捕捉可以代表輸入數據的最重要的因素,就像PCA那樣,找到可以代表原信息的主要成分。
具體過程簡單的說明如下:

1)給定無標簽數據,用非監督學習學習特征:

image.png

在我們之前的神經網絡中,如第一個圖,我們輸入的樣本是有標簽的,即(input, target),這樣我們根據當前輸出和target(label)之間的差去改變前面各層的參數,直到收斂。但現在我們只有無標簽數據,也就是右邊的圖。那么這個誤差怎么得到呢?

image.png

如上圖,我們將input輸入一個encoder編碼器,就會得到一個code,這個code也就是輸入的一個表示,那么我們怎么知道這個code表示的就是input呢?我們加一個decoder解碼器,這時候decoder就會輸出一個信息,那么如果輸出的這個信息和一開始的輸入信號input是很像的(理想情況下就是一樣的),那很明顯,我們就有理由相信這個code是靠譜的。所以,我們就通過調整encoder和decoder的參數,使得重構誤差最小,這時候我們就得到了輸入input信號的第一個表示了,也就是編碼code了。因為是無標簽數據,所以誤差的來源就是直接重構后與原輸入相比得到。

image.png

2)通過編碼器產生特征,然后訓練下一層。這樣逐層訓練:

那上面我們就得到第一層的code,我們的重構誤差最小讓我們相信這個code就是原輸入信號的良好表達了,或者牽強點說,它和原信號是一模一樣的(表達不一樣,反映的是一個東西)。那第二層和第一層的訓練方式就沒有差別了,我們將第一層輸出的code當成第二層的輸入信號,同樣最小化重構誤差,就會得到第二層的參數,并且得到第二層輸入的code,也就是原輸入信息的第二個表達了。其他層就同樣的方法炮制就行了(訓練這一層,前面層的參數都是固定的,并且他們的decoder已經沒用了,都不需要了)。

image.png

3)有監督微調:

經過上面的方法,我們就可以得到很多層了。至于需要多少層(或者深度需要多少,這個目前本身就沒有一個科學的評價方法)需要自己試驗調了。每一層都會得到原始輸入的不同的表達。當然了,我們覺得它是越抽象越好了,就像人的視覺系統一樣。

到這里,這個AutoEncoder還不能用來分類數據,因為它還沒有學習如何去連結一個輸入和一個類。它只是學會了如何去重構或者復現它的輸入而已。或者說,它只是學習獲得了一個可以良好代表輸入的特征,這個特征可以最大程度上代表原輸入信號。那么,為了實現分類,我們就可以在AutoEncoder的最頂的編碼層添加一個分類器(例如羅杰斯特回歸、SVM等),然后通過標準的多層神經網絡的監督訓練方法(梯度下降法)去訓練。

也就是說,這時候,我們需要將最后層的特征code輸入到最后的分類器,通過有標簽樣本,通過監督學習進行微調,這也分兩種,一個是只調整分類器(黑色部分):

image.png

另一種:通過有標簽樣本,微調整個系統:(如果有足夠多的數據,這個是最好的。end-to-end learning端對端學習)

image.png

一旦監督訓練完成,這個網絡就可以用來分類了。神經網絡的最頂層可以作為一個線性分類器,然后我們可以用一個更好性能的分類器去取代它。

在研究中可以發現,如果在原有的特征中加入這些自動學習得到的特征可以大大提高精確度,甚至在分類問題中比目前最好的分類算法效果還要好!

AutoEncoder存在一些變體,這里簡要介紹下兩個:

Sparse AutoEncoder稀疏自動編碼器:

當然,我們還可以繼續加上一些約束條件得到新的Deep Learning方法,如:如果在AutoEncoder的基礎上加上L1的Regularity限制(L1主要是約束每一層中的節點中大部分都要為0,只有少數不為0,這就是Sparse名字的來源),我們就可以得到Sparse AutoEncoder法。

image.png

如上圖,其實就是限制每次得到的表達code盡量稀疏。因為稀疏的表達往往比其他的表達要有效(人腦好像也是這樣的,某個輸入只是刺激某些神經元,其他的大部分的神經元是受到抑制的)。

Denoising AutoEncoders降噪自動編碼器:

降噪自動編碼器DA是在自動編碼器的基礎上,訓練數據加入噪聲,所以自動編碼器必須學習去去除這種噪聲而獲得真正的沒有被噪聲污染過的輸入。因此,這就迫使編碼器去學習輸入信號的更加魯棒的表達,這也是它的泛化能力比一般編碼器強的原因。DA可以通過梯度下降算法去訓練。

image.png

9.2、Sparse Coding稀疏編碼

如果我們把輸出必須和輸入相等的限制放松,同時利用線性代數中基的概念,即O = a1Φ1 + a2Φ2+….+ an*Φn, Φi是基,ai是系數,我們可以得到這樣一個優化問題:

Min |I – O|,其中I表示輸入,O表示輸出。

通過求解這個最優化式子,我們可以求得系數ai和基Φi,這些系數和基就是輸入的另外一種近似表達。

image.png

因此,它們可以用來表達輸入I,這個過程也是自動學習得到的。如果我們在上述式子上加上L1的Regularity限制,得到:
Min |I – O| + u*(|a1| + |a2| + … + |an |)

這種方法被稱為Sparse Coding。通俗的說,就是將一個信號表示為一組基的線性組合,而且要求只需要較少的幾個基就可以將信號表示出來。“稀疏性”定義為:只有很少的幾個非零元素或只有很少的幾個遠大于零的元素。要求系數 ai 是稀疏的意思就是說:對于一組輸入向量,我們只想有盡可能少的幾個系數遠大于零。選擇使用具有稀疏性的分量來表示我們的輸入數據是有原因的,因為絕大多數的感官數據,比如自然圖像,可以被表示成少量基本元素的疊加,在圖像中這些基本元素可以是面或者線。同時,比如與初級視覺皮層的類比過程也因此得到了提升(人腦有大量的神經元,但對于某些圖像或者邊緣只有很少的神經元興奮,其他都處于抑制狀態)。

稀疏編碼算法是一種無監督學習方法,它用來尋找一組“超完備”基向量來更高效地表示樣本數據。雖然形如主成分分析技術(PCA)能使我們方便地找到一組“完備”基向量,但是這里我們想要做的是找到一組“超完備”基向量來表示輸入向量(也就是說,基向量的個數比輸入向量的維數要大)。超完備基的好處是它們能更有效地找出隱含在輸入數據內部的結構與模式。然而,對于超完備基來說,系數ai
不再由輸入向量唯一確定。因此,在稀疏編碼算法中,我們另加了一個評判標準“稀疏性”來解決因超完備而導致的退化(degeneracy)問題。(詳細說明

image.png

比如在圖像的Feature Extraction的最底層要做Edge Detector的生成,那么這里的工作就是從Natural Images中randomly選取一些小patch,通過這些patch生成能夠描述他們的“基”,也就是右邊的8*8=64個basis組成的basis,然后給定一個test patch, 我們可以按照上面的式子通過basis的線性組合得到,而sparse matrix就是a,下圖中的a中有64個維度,其中非零項只有3個,故稱“sparse”。

這里可能大家會有疑問,為什么把底層作為Edge Detector呢?上層又是什么呢?這里做個簡單解釋大家就會明白,之所以是Edge Detector是因為不同方向的Edge就能夠描述出整幅圖像,所以不同方向的Edge自然就是圖像的basis了……而上一層的basis組合的結果,上上層又是上一層的組合basis……(就是上面第四部分的時候咱們說的那樣)

Sparse coding分為兩個部分:

1)Training階段:

給定一系列的樣本圖片[x1, x 2, …],我們需要學習得到一組基[Φ1, Φ2, …],也就是字典。
稀疏編碼是k-means算法的變體,其訓練過程也差不多(EM算法的思想:如果要優化的目標函數包含兩個變量,如L(W, B),那么我們可以先固定W,調整B使得L最小,然后再固定B,調整W使L最小,這樣迭代交替,不斷將L推向最小值。詳細
訓練過程就是一個重復迭代的過程,按上面所說,我們交替的更改a和Φ使得下面這個目標函數最小。

image.png

每次迭代分兩步:

  1. 固定字典Φ[k],然后調整a[k],使得上式,即目標函數最小(即解LASSO問題)。
  2. 然后固定住a [k],調整Φ [k],使得上式,即目標函數最小(即解凸QP問題)。
    不斷迭代,直至收斂。這樣就可以得到一組可以良好表示這一系列x的基,也就是字典。

2)Coding階段:

給定一個新的圖片x,由上面得到的字典,通過解一個LASSO問題得到稀疏向量a。這個稀疏向量就是這個輸入向量x的一個稀疏表達了。

image.png

例如:

image.png

9.5、Convolutional Neural Networks卷積神經網絡

卷積神經網絡是人工神經網絡的一種,已成為當前語音分析和圖像識別領域的研究熱點。它的權值共享網絡結構使之更類似于生物神經網絡,降低了網絡模型的復雜度,減少了權值的數量。該優點在網絡的輸入是多維圖像時表現的更為明顯,使圖像可以直接作為網絡的輸入,避免了傳統識別算法中復雜的特征提取和數據重建過程。卷積網絡是為識別二維形狀而特殊設計的一個多層感知器,這種網絡結構對平移、比例縮放、傾斜或者共他形式的變形具有高度不變性。

CNNs是受早期的延時神經網絡(TDNN)的影響。延時神經網絡通過在時間維度上共享權值降低學習復雜度,適用于語音和時間序列信號的處理。
CNNs是第一個真正成功訓練多層網絡結構的學習算法。它利用空間關系減少需要學習的參數數目以提高一般前向BP算法的訓練性能。CNNs作為一個深度學習架構提出是為了最小化數據的預處理要求。在CNN中,圖像的一小部分(局部感受區域)作為層級結構的最低層的輸入,信息再依次傳輸到不同的層,每層通過一個數字濾波器去獲得觀測數據的最顯著的特征。這個方法能夠獲取對平移、縮放和旋轉不變的觀測數據的顯著特征,因為圖像的局部感受區域允許神經元或者處理單元可以訪問到最基礎的特征,例如定向邊緣或者角點。

1)卷積神經網絡的歷史

1962年Hubel和Wiesel通過對貓視覺皮層細胞的研究,提出了感受野(receptive field)的概念,1984年日本學者Fukushima基于感受野概念提出的神經認知機(neocognitron)可以看作是卷積神經網絡的第一個實現網絡,也是感受野概念在人工神經網絡領域的首次應用。神經認知機將一個視覺模式分解成許多子模式(特征),然后進入分層遞階式相連的特征平面進行處理,它試圖將視覺系統模型化,使其能夠在即使物體有位移或輕微變形的時候,也能完成識別。

通常神經認知機包含兩類神經元,即承擔特征抽取的S-元和抗變形的C-元。S-元中涉及兩個重要參數,即感受野與閾值參數,前者確定輸入連接的數目,后者則控制對特征子模式的反應程度。許多學者一直致力于提高神經認知機的性能的研究:在傳統的神經認知機中,每個S-元的感光區中由C-元帶來的視覺模糊量呈正態分布。如果感光區的邊緣所產生的模糊效果要比中央來得大,S-元將會接受這種非正態模糊所導致的更大的變形容忍性。我們希望得到的是,訓練模式與變形刺激模式在感受野的邊緣與其中心所產生的效果之間的差異變得越來越大。為了有效地形成這種非正態模糊,Fukushima提出了帶雙C-元層的改進型神經認知機。

Van Ooyen和Niehuis為提高神經認知機的區別能力引入了一個新的參數。事實上,該參數作為一種抑制信號,抑制了神經元對重復激勵特征的激勵。多數神經網絡在權值中記憶訓練信息。根據Hebb學習規則,某種特征訓練的次數越多,在以后的識別過程中就越容易被檢測。也有學者將進化計算理論與神經認知機結合,通過減弱對重復性激勵特征的訓練學習,而使得網絡注意那些不同的特征以助于提高區分能力。上述都是神經認知機的發展過程,而卷積神經網絡可看作是神經認知機的推廣形式,神經認知機是卷積神經網絡的一種特例。

2)卷積神經網絡的網絡結構

卷積神經網絡是一個多層的神經網絡,每層由多個二維平面組成,而每個平面由多個獨立神經元組成。

image.png

圖:卷積神經網絡的概念示范:輸入圖像通過和三個可訓練的濾波器和可加偏置進行卷積,濾波過程如圖一,卷積后在C1層產生三個特征映射圖,然后特征映射圖中每組的四個像素再進行求和,加權值,加偏置,通過一個Sigmoid函數得到三個S2層的特征映射圖。這些映射圖再進過濾波得到C3層。這個層級結構再和S2一樣產生S4。最終,這些像素值被光柵化,并連接成一個向量輸入到傳統的神經網絡,得到輸出。
一般地,C層為特征提取層,每個神經元的輸入與前一層的局部感受野相連,并提取該局部的特征,一旦該局部特征被提取后,它與其他特征間的位置關系也隨之確定下來;S層是特征映射層,網絡的每個計算層由多個特征映射組成,每個特征映射為一個平面,平面上所有神經元的權值相等。特征映射結構采用影響函數核小的sigmoid函數作為卷積網絡的激活函數,使得特征映射具有位移不變性。
此外,由于一個映射面上的神經元共享權值,因而減少了網絡自由參數的個數,降低了網絡參數選擇的復雜度。卷積神經網絡中的每一個特征提取層(C-層)都緊跟著一個用來求局部平均與二次提取的計算層(S-層),這種特有的兩次特征提取結構使網絡在識別時對輸入樣本有較高的畸變容忍能力。

3)關于參數減少與權值共享

上面聊到,好像CNN一個牛逼的地方就在于通過感受野和權值共享減少了神經網絡需要訓練的參數的個數。那究竟是啥的呢?
下圖左:如果我們有1000x1000像素的圖像,有1百萬個隱層神經元,那么他們全連接的話(每個隱層神經元都連接圖像的每一個像素點),就有1000x1000x1000000=1012個連接,也就是1012個權值參數。然而圖像的空間聯系是局部的,就像人是通過一個局部的感受野去感受外界圖像一樣,每一個神經元都不需要對全局圖像做感受,每個神經元只感受局部的圖像區域,然后在更高層,將這些感受不同局部的神經元綜合起來就可以得到全局的信息了。這樣,我們就可以減少連接的數目,也就是減少神經網絡需要訓練的權值參數的個數了。如下圖右:假如局部感受野是10x10,隱層每個感受野只需要和這10x10的局部圖像相連接,所以1百萬個隱層神經元就只有一億個連接,即10^8個參數。比原來減少了四個0(數量級),這樣訓練起來就沒那么費力了,但還是感覺很多的啊,那還有啥辦法沒?

image.png

我們知道,隱含層的每一個神經元都連接10x10個圖像區域,也就是說每一個神經元存在10x10=100個連接權值參數。那如果我們每個神經元這100個參數是相同的呢?也就是說每個神經元用的是同一個卷積核去卷積圖像。這樣我們就只有多少個參數??只有100個參數啊!!!親!不管你隱層的神經元個數有多少,兩層間的連接我只有100個參數啊!親!這就是權值共享啊!親!這就是卷積神經網絡的主打賣點啊!親!(有點煩了,呵呵)也許你會問,這樣做靠譜嗎?為什么可行呢?這個……共同學習。
我們知道,隱含層的每一個神經元都連接10x10個圖像區域,也就是說每一個神經元存在10x10=100個連接權值參數。那如果我們每個神經元這100個參數是相同的呢?也就是說每個神經元用的是同一個卷積核去卷積圖像。這樣我們就只有多少個參數??只有100個參數啊!!!親!不管你隱層的神經元個數有多少,兩層間的連接我只有100個參數啊!親!這就是權值共享啊!親!這就是卷積神經網絡的主打賣點啊!親!(有點煩了,呵呵)也許你會問,這樣做靠譜嗎?為什么可行呢?這個……共同學習。

image.png

嘿喲,遺漏一個問題了。剛才說隱層的參數個數和隱層的神經元個數無關,只和濾波器的大小和濾波器種類的多少有關。那么隱層的神經元個數怎么確定呢?它和原圖像,也就是輸入的大小(神經元個數)、濾波器的大小和濾波器在圖像中的滑動步長都有關!例如,我的圖像是1000x1000像素,而濾波器大小是10x10,假設濾波器沒有重疊,也就是步長為10,這樣隱層的神經元個數就是(1000x1000 )/ (10x10)=100x100個神經元了,假設步長是8,也就是卷積核會重疊兩個像素,那么……我就不算了,思想懂了就好。注意了,這只是一種濾波器,也就是一個Feature Map的神經元個數哦,如果100個Feature Map就是100倍了。由此可見,圖像越大,神經元個數和需要訓練的權值參數個數的貧富差距就越大。

image.png

需要注意的一點是,上面的討論都沒有考慮每個神經元的偏置部分。所以權值個數需要加1 。這個也是同一種濾波器共享的。

總之,卷積網絡的核心思想是將:局部感受野、權值共享(或者權值復制)以及時間或空間亞采樣這三種結構思想結合起來獲得了某種程度的位移、尺度、形變不變性。

4)一個典型的例子說明

一種典型的用來識別數字的卷積網絡是LeNet-5(效果和paper等見這)。當年美國大多數銀行就是用它來識別支票上面的手寫數字的。能夠達到這種商用的地步,它的準確性可想而知。畢竟目前學術界和工業界的結合是最受爭議的。

image.png

那下面咱們也用這個例子來說明下。

image.png

LeNet-5共有7層,不包含輸入,每層都包含可訓練參數(連接權重)。輸入圖像為32*32大小。這要比Mnist數據庫(一個公認的手寫數據庫)中最大的字母還大。這樣做的原因是希望潛在的明顯特征如筆畫斷電或角點能夠出現在最高層特征監測子感受野的中心。
我們先要明確一點:每個層有多個Feature Map,每個Feature Map通過一種卷積濾波器提取輸入的一種特征,然后每個Feature Map有多個神經元。

C1層是一個卷積層(為什么是卷積?卷積運算一個重要的特點就是,通過卷積運算,可以使原信號特征增強,并且降低噪音),由6個特征圖Feature Map構成。特征圖中每個神經元與輸入中55的鄰域相連。特征圖的大小為2828,這樣能防止輸入的連接掉到邊界之外(是為了BP反饋時的計算,不致梯度損失,個人見解)。C1有156個可訓練參數(每個濾波器55=25個unit參數和一個bias參數,一共6個濾波器,共(55+1)6=156個參數),共156(28*28)=122,304個連接。

S2層是一個下采樣層(為什么是下采樣?利用圖像局部相關性的原理,對圖像進行子抽樣,可以減少數據處理量同時保留有用信息),有6個1414的特征圖。特征圖中的每個單元與C1中相對應特征圖的22鄰域相連接。S2層每個單元的4個輸入相加,乘以一個可訓練參數,再加上一個可訓練偏置。結果通過sigmoid函數計算。可訓練系數和偏置控制著sigmoid函數的非線性程度。如果系數比較小,那么運算近似于線性運算,亞采樣相當于模糊圖像。如果系數比較大,根據偏置的大小亞采樣可以被看成是有噪聲的“或”運算或者有噪聲的“與”運算。每個單元的2*2感受野并不重疊,因此S2中每個特征圖的大小是C1中特征圖大小的1/4(行和列各1/2)。S2層有12個可訓練參數和5880個連接。

image.png

圖:卷積和子采樣過程:卷積過程包括:用一個可訓練的濾波器fx去卷積一個輸入的圖像(第一階段是輸入的圖像,后面的階段就是卷積特征map了),然后加一個偏置bx,得到卷積層Cx。子采樣過程包括:每鄰域四個像素求和變為一個像素,然后通過標量Wx+1加權,再增加偏置bx+1,然后通過一個sigmoid激活函數,產生一個大概縮小四倍的特征映射圖Sx+1。

所以從一個平面到下一個平面的映射可以看作是作卷積運算,S-層可看作是模糊濾波器,起到二次特征提取的作用。隱層與隱層之間空間分辨率遞減,而每層所含的平面數遞增,這樣可用于檢測更多的特征信息。

C3層也是一個卷積層,它同樣通過5x5的卷積核去卷積層S2,然后得到的特征map就只有10x10個神經元,但是它有16種不同的卷積核,所以就存在16個特征map了。這里需要注意的一點是:C3中的每個特征map是連接到S2中的所有6個或者幾個特征map的,表示本層的特征map是上一層提取到的特征map的不同組合(這個做法也并不是唯一的)。(看到沒有,這里是組合,就像之前聊到的人的視覺系統一樣,底層的結構構成上層更抽象的結構,例如邊緣構成形狀或者目標的部分)。

剛才說C3中每個特征圖由S2中所有6個或者幾個特征map組合而成。為什么不把S2中的每個特征圖連接到每個C3的特征圖呢?原因有2點。第一,不完全的連接機制將連接的數量保持在合理的范圍內。第二,也是最重要的,其破壞了網絡的對稱性。由于不同的特征圖有不同的輸入,所以迫使他們抽取不同的特征(希望是互補的)。

例如,存在的一個方式是:C3的前6個特征圖以S2中3個相鄰的特征圖子集為輸入。接下來6個特征圖以S2中4個相鄰特征圖子集為輸入。然后的3個以不相鄰的4個特征圖子集為輸入。最后一個將S2中所有特征圖為輸入。這樣C3層有1516個可訓練參數和151600個連接。

S4層是一個下采樣層,由16個55大小的特征圖構成。特征圖中的每個單元與C3中相應特征圖的22鄰域相連接,跟C1和S2之間的連接一樣。S4層有32個可訓練參數(每個特征圖1個因子和一個偏置)和2000個連接。

C5層是一個卷積層,有120個特征圖。每個單元與S4層的全部16個單元的55鄰域相連。由于S4層特征圖的大小也為55(同濾波器一樣),故C5特征圖的大小為11:這構成了S4和C5之間的全連接。之所以仍將C5標示為卷積層而非全相聯層,是因為如果LeNet-5的輸入變大,而其他的保持不變,那么此時特征圖的維數就會比11大。C5層有48120個可訓練連接。

F6層有84個單元(之所以選這個數字的原因來自于輸出層的設計),與C5層全相連。有10164個可訓練參數。如同經典神經網絡,F6層計算輸入向量和權重向量之間的點積,再加上一個偏置。然后將其傳遞給sigmoid函數產生單元i的一個狀態。

最后,輸出層由歐式徑向基函數(Euclidean Radial Basis Function)單元組成,每類一個單元,每個有84個輸入。換句話說,每個輸出RBF單元計算輸入向量和參數向量之間的歐式距離。輸入離參數向量越遠,RBF輸出的越大。一個RBF輸出可以被理解為衡量輸入模式和與RBF相關聯類的一個模型的匹配程度的懲罰項。用概率術語來說,RBF輸出可以被理解為F6層配置空間的高斯分布的負log-likelihood。給定一個輸入模式,損失函數應能使得F6的配置與RBF參數向量(即模式的期望分類)足夠接近。這些單元的參數是人工選取并保持固定的(至少初始時候如此)。這些參數向量的成分被設為-1或1。雖然這些參數可以以-1和1等概率的方式任選,或者構成一個糾錯碼,但是被設計成一個相應字符類的7*12大小(即84)的格式化圖片。這種表示對識別單獨的數字不是很有用,但是對識別可打印ASCII集中的字符串很有用。

使用這種分布編碼而非更常用的“1 of N”編碼用于產生輸出的另一個原因是,當類別比較大的時候,非分布編碼的效果比較差。原因是大多數時間非分布編碼的輸出必須為0。這使得用sigmoid單元很難實現。另一個原因是分類器不僅用于識別字母,也用于拒絕非字母。使用分布編碼的RBF更適合該目標。因為與sigmoid不同,他們在輸入空間的較好限制的區域內興奮,而非典型模式更容易落到外邊。

RBF參數向量起著F6層目標向量的角色。需要指出這些向量的成分是+1或-1,這正好在F6 sigmoid的范圍內,因此可以防止sigmoid函數飽和。實際上,+1和-1是sigmoid函數的最大彎曲的點處。這使得F6單元運行在最大非線性范圍內。必須避免sigmoid函數的飽和,因為這將會導致損失函數較慢的收斂和病態問題。

5)訓練過程

神經網絡用于模式識別的主流是有指導學習網絡,無指導學習網絡更多的是用于聚類分析。對于有指導的模式識別,由于任一樣本的類別是已知的,樣本在空間的分布不再是依據其自然分布傾向來劃分,而是要根據同類樣本在空間的分布及不同類樣本之間的分離程度找一種適當的空間劃分方法,或者找到一個分類邊界,使得不同類樣本分別位于不同的區域內。這就需要一個長時間且復雜的學習過程,不斷調整用以劃分樣本空間的分類邊界的位置,使盡可能少的樣本被劃分到非同類區域中。

卷積網絡在本質上是一種輸入到輸出的映射,它能夠學習大量的輸入與輸出之間的映射關系,而不需要任何輸入和輸出之間的精確的數學表達式,只要用已知的模式對卷積網絡加以訓練,網絡就具有輸入輸出對之間的映射能力。卷積網絡執行的是有導師訓練,所以其樣本集是由形如:(輸入向量,理想輸出向量)的向量對構成的。所有這些向量對,都應該是來源于網絡即將模擬的系統的實際“運行”結果。它們可以是從實際運行系統中采集來的。在開始訓練前,所有的權都應該用一些不同的小隨機數進行初始化。“小隨機數”用來保證網絡不會因權值過大而進入飽和狀態,從而導致訓練失敗;“不同”用來保證網絡可以正常地學習。實際上,如果用相同的數去初始化權矩陣,則網絡無能力學習。

訓練算法與傳統的BP算法差不多。主要包括4步,這4步被分為兩個階段:

第一階段,向前傳播階段:

  1. 從樣本集中取一個樣本(X,Yp),將X輸入網絡;

  2. 計算相應的實際輸出Op。
    在此階段,信息從輸入層經過逐級的變換,傳送到輸出層。這個過程也是網絡在完成訓練后正常運行時執行的過程。在此過程中,網絡執行的是計算(實際上就是輸入與每層的權值矩陣相點乘,得到最后的輸出結果):

       Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))
    

第二階段,向后傳播階段

  1. 算實際輸出Op與相應的理想輸出Yp的差;
  2. 按極小化誤差的方法反向傳播調整權矩陣。

6)卷積神經網絡的優點

卷積神經網絡CNN主要用來識別位移、縮放及其他形式扭曲不變性的二維圖形。由于CNN的特征檢測層通過訓練數據進行學習,所以在使用CNN時,避免了顯式的特征抽取,而隱式地從訓練數據中進行學習;再者由于同一特征映射面上的神經元權值相同,所以網絡可以并行學習,這也是卷積網絡相對于神經元彼此相連網絡的一大優勢。卷積神經網絡以其局部權值共享的特殊結構在語音識別和圖像處理方面有著獨特的優越性,其布局更接近于實際的生物神經網絡,權值共享降低了網絡的復雜性,特別是多維輸入向量的圖像可以直接輸入網絡這一特點避免了特征提取和分類過程中數據重建的復雜度。

流的分類方式幾乎都是基于統計特征的,這就意味著在進行分辨前必須提取某些特征。然而,顯式的特征提取并不容易,在一些應用問題中也并非總是可靠的。卷積神經網絡,它避免了顯式的特征取樣,隱式地從訓練數據中進行學習。這使得卷積神經網絡明顯有別于其他基于神經網絡的分類器,通過結構重組和減少權值將特征提取功能融合進多層感知器。它可以直接處理灰度圖片,能夠直接用于處理基于圖像的分類。

卷積網絡較一般神經網絡在圖像處理方面有如下優點:
a)輸入圖像和網絡的拓撲結構能很好的吻合;
b)特征提取和模式分類同時進行,并同時在訓練中產生;
c)權重共享可以減少網絡的訓練參數,使神經網絡結構變得更簡單,適應性更強。

7)小結

CNNs中這種層間聯系和空域信息的緊密關系,使其適于圖像處理和理解。而且,其在自動提取圖像的顯著特征方面還表現出了比較優的性能。在一些例子當中,Gabor濾波器已經被使用在一個初始化預處理的步驟中,以達到模擬人類視覺系統對視覺刺激的響應。在目前大部分的工作中,研究者將CNNs應用到了多種機器學習問題中,包括人臉識別,文檔分析和語言檢測等。為了達到尋找視頻中幀與幀之間的相干性的目的,目前CNNs通過一個時間相干性去訓練,但這個不是CNNs特有的。

十、總結與展望

1)Deep learning總結

深度學習是關于自動學習要建模的數據的潛在(隱含)分布的多層(復雜)表達的算法。換句話來說,深度學習算法自動的提取分類需要的低層次或者高層次特征。高層次特征,一是指該特征可以分級(層次)地依賴其他特征,例如:對于機器視覺,深度學習算法從原始圖像去學習得到它的一個低層次表達,例如邊緣檢測器,小波濾波器等,然后在這些低層次表達的基礎上再建立表達,例如這些低層次表達的線性或者非線性組合,然后重復這個過程,最后得到一個高層次的表達。

Deep learning能夠得到更好地表示數據的feature,同時由于模型的層次、參數很多,capacity足夠,因此,模型有能力表示大規模數據,所以對于圖像、語音這種特征不明顯(需要手工設計且很多沒有直觀物理含義)的問題,能夠在大規模訓練數據上取得更好的效果。此外,從模式識別特征和分類器的角度,deep learning框架將feature和分類器結合到一個框架中,用數據去學習feature,在使用中減少了手工設計feature的巨大工作量(這是目前工業界工程師付出努力最多的方面),因此,不僅僅效果可以更好,而且,使用起來也有很多方便之處,因此,是十分值得關注的一套框架,每個做ML的人都應該關注了解一下。

當然,deep learning本身也不是完美的,也不是解決世間任何ML問題的利器,不應該被放大到一個無所不能的程度。

2)Deep learning未來

深度學習目前仍有大量工作需要研究。目前的關注點還是從機器學習的領域借鑒一些可以在深度學習使用的方法,特別是降維領域。例如:目前一個工作就是稀疏編碼,通過壓縮感知理論對高維數據進行降維,使得非常少的元素的向量就可以精確的代表原來的高維信號。另一個例子就是半監督流行學習,通過測量訓練樣本的相似性,將高維數據的這種相似性投影到低維空間。另外一個比較鼓舞人心的方向就是evolutionary programming approaches(遺傳編程方法),它可以通過最小化工程能量去進行概念性自適應學習和改變核心架構。
Deep learning還有很多核心的問題需要解決:
(1)對于一個特定的框架,對于多少維的輸入它可以表現得較優(如果是圖像,可能是上百萬維)?
(2)對捕捉短時或者長時間的時間依賴,哪種架構才是有效的?
(3)如何對于一個給定的深度學習架構,融合多種感知的信息?
(4)有什么正確的機理可以去增強一個給定的深度學習架構,以改進其魯棒性和對扭曲和數據丟失的不變性?
(5)模型方面是否有其他更為有效且有理論依據的深度模型學習算法?
探索新的特征提取模型是值得深入研究的內容。此外有效的可并行訓練算法也是值得研究的一個方向。當前基于最小批處理的隨機梯度優化算法很難在多計算機中進行并行訓練。通常辦法是利用圖形處理單元加速學習過程。然而單個機器GPU對大規模數據識別或相似任務數據集并不適用。在深度學習應用拓展方面,如何合理充分利用深度學習在增強傳統學習算法的性能仍是目前各領域的研究重點。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容

  • 邦迪海灘是沖浪者的天堂,嬉皮士的樂園。Bondi Beach位于悉尼商業中心區以東約7公里,長約1公里,原意為“翻...
    TinaBai閱讀 665評論 2 8
  • 體驗入 這兩天參加了《全員生發》的復訓,又近距離地感受到了這些充滿了正能量的牛人的魅力,學識淵博,且滿血地投入于他...
    peter_621f閱讀 255評論 0 1
  • 我叫王巖(化名),住在離北朝鮮很近的一座城市。2002年7月的一個早晨,去菜市場買菜(母親及兩個侄兒從長春來)。巧...
    穿越_a4da閱讀 841評論 2 4
  • 80后的我們QQ成為了辦公工具,微信朋友圈成了廣告天地,是否還記得那些年QQ說說和空間留下的自我,每個人都會多少留...
    沒床單閱讀 191評論 0 0