Deep Learning 【Nature review】
如今,機(jī)器學(xué)習(xí)的技術(shù)在我們的生活中扮演著越來越重要的角色。從搜索引擎到推薦系統(tǒng),從圖像識別到語音識別。而這些應(yīng)用都開始逐漸使用一類叫做深度學(xué)習(xí)(Deep Learning)的技術(shù)。
傳統(tǒng)機(jī)器學(xué)習(xí)算法的局限性在于,它們往往很難處理那些未被加工過的自然數(shù)據(jù)(natural data),例如一張原始的RGB圖像。因此,構(gòu)建一個傳統(tǒng)的機(jī)器學(xué)習(xí)系統(tǒng),往往需要一些有經(jīng)驗的工程師設(shè)計一個特征提取器,將原始數(shù)據(jù)轉(zhuǎn)化成機(jī)器能識別的feature representation。
有一類叫做representation learning的算法可以實現(xiàn)讓機(jī)器自發(fā)地從輸入的原始數(shù)據(jù)中發(fā)現(xiàn)那些有用的feature。Deep Learning正是這樣的一類算法。
下面是Lecun等人給出的Deep Learning的正式定義:
Deep-learning methods are representation-learning methods with multiple levels of representation, obtained by composing simple but non-linear modules that each transform the representation at one level (starting with the raw input) into a representation at a higher, slightly more abstract level.
從這段話中可以看出,Deep Learning有三個核心的要素:
深度學(xué)習(xí)的精髓在于,各個layer上的特征不是由人類工程師設(shè)計的,而是通過一類general-purpose的learning procedure從數(shù)據(jù)中主動地習(xí)得。
以圖片為例,原始數(shù)據(jù)只是一些毫無意義的像素點構(gòu)成的矩陣。而深度學(xué)習(xí)學(xué)習(xí)到的第一層特征能夠檢測圖片中是否存在指向某個方向的線條;更高層的特征則通過組合低層級的特征,在更抽象的水平上——例如特定的花紋——進(jìn)行檢測。
理論上,通過組合足夠數(shù)量的非線性變換,可以對任意函數(shù)進(jìn)行擬合。
可見,Deep Learning非常擅長于挖掘高維數(shù)據(jù)中的內(nèi)在結(jié)構(gòu),也因此在很多領(lǐng)域上取得了令人驚異的成果。
有監(jiān)督學(xué)習(xí)
Supervised learning,有監(jiān)督學(xué)習(xí),是機(jī)器學(xué)習(xí)一種常見的形式。它的任務(wù)是訓(xùn)練一個模型,使其能在給定的輸入下,輸出預(yù)期的value。為此,我們需要一個error function來計算輸出值與期望值的誤差,并通過調(diào)節(jié)模型內(nèi)部的參數(shù)來減小這個誤差。梯度下降(Gradient Descent)和隨機(jī)梯度下降(SGD)是兩種常見的參數(shù)調(diào)節(jié)的算法。
目前,針對有監(jiān)督學(xué)習(xí)問題,大部分機(jī)器學(xué)習(xí)系統(tǒng)都是在人工挑選的feature上運行一個線性分類器。然而,線性分類器的缺陷在于,它只能將輸入空間劃分為一些簡單的region,因此在諸如圖像識別和語言識別的問題上往往無能為力(這些問題需要模型對一些特定特征的微小變化極其敏感,而對不相關(guān)特征的變化極不敏感)。例如,在像素層面上,同一只Samoyed在不同背景下的兩張圖片的差別很大,而相同背景下的Samoyed和Wolf的圖片差異卻很小。這對于傳統(tǒng)的線性分類器,或是任一個淺層(Shallow)分類器,想在區(qū)分后一組圖片中的Samoyed和Wolf的同時,把前一組圖片中的Samoyed放在同一個類別下,幾乎是一個impossible mission。這也被稱之為selectivity–invariance dilemma:我們需要一組特征,它們能夠選擇性地響應(yīng)圖片中的重要部分,而對圖片中不重要部分的變化保持不變性。
這一問題傳統(tǒng)的解決方案是人工設(shè)計一些特征提取器。然而,借助Deep Learning,我們有希望從數(shù)據(jù)中自發(fā)地學(xué)習(xí)到這些特征。
反向傳播算法
我們可以用隨機(jī)梯度下降算法(SGD)來訓(xùn)練一個multilayer networks的模型。這一算法也被稱之為反向傳播算法(Backpropagation)。該算法的背后不過是微積分第一堂課里就學(xué)到的鏈?zhǔn)角髮?dǎo)法則。我們將誤差函數(shù)對layer中一個模塊的輸入的偏導(dǎo),表示成該誤差函數(shù)對下一層layer的輸入的偏導(dǎo)的函數(shù),并在此基礎(chǔ)上求出模型參數(shù)的梯度。
前向反饋神經(jīng)網(wǎng)絡(luò)(feedforwrad neural network)正是這樣一個multilayer network。許多深度學(xué)習(xí)的模型都采用了與之類似的網(wǎng)絡(luò)結(jié)構(gòu)。在前向傳播的過程中,每一層神經(jīng)元都對上一層神經(jīng)元的輸出進(jìn)行加權(quán)求和,并通過一個非線性的變換傳遞給下一層神經(jīng)元。目前在深度學(xué)習(xí)網(wǎng)絡(luò)中被廣泛使用的非線性變換是ReLU(rectified linear unit):。與傳統(tǒng)的平滑非線性變換(或logistic函數(shù))相比,ReLU的學(xué)習(xí)速度更快。通過每一個隱藏層上對輸入空間的非線性變換,我們最終得到了一個線性可分的特征空間。
然而,在上個世紀(jì)90年代末期,神經(jīng)網(wǎng)絡(luò)的發(fā)展遇到了極大的阻礙。人們認(rèn)為,梯度下降算法會使得模型很容易陷入一些遠(yuǎn)離真實值的局部最優(yōu)解。事實上,近期的一些研究表明,這些最優(yōu)解大都是分布在誤差空間上的鞍點;它們有著相近的誤差函數(shù)值。因此,我們并不需要關(guān)心算法最終落到了哪個最優(yōu)解上。
深度神經(jīng)網(wǎng)絡(luò)的復(fù)興發(fā)生在2006年。CIFAR的一批研究者提出了一種逐層訓(xùn)練的無監(jiān)督學(xué)習(xí)算法;每一個隱藏層上的神經(jīng)元都試圖去重構(gòu)上一層神經(jīng)元習(xí)得的特征,從而學(xué)習(xí)到更高級的特征表達(dá)。最終,通過一個輸出層的反向傳播過程來對模型的參數(shù)進(jìn)行微調(diào),得到一個有監(jiān)督的學(xué)習(xí)模型。
卷積神經(jīng)網(wǎng)絡(luò)
與全連接的前向反饋神經(jīng)網(wǎng)絡(luò)相比,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks)更加易于訓(xùn)練。事實上,當(dāng)整個神經(jīng)網(wǎng)絡(luò)的研究都處于低谷的時候,CNN卻獨樹一幟,在解決許多實際的問題中都有著不俗的表現(xiàn)。最近幾年,CNN更在計算機(jī)視覺(CV)領(lǐng)域中得到廣泛的應(yīng)用。
CNN一般被用于處理multiple arrays形式的數(shù)據(jù)輸入。例如一段文本(1D array);一張圖像(2D array);或是一段視頻(3D array)。CNN之所以能夠有效的處理這些原生態(tài)的數(shù)據(jù),離不開它的四個核心要素:
下圖是一個卷積神經(jīng)網(wǎng)絡(luò)的典型結(jié)構(gòu),主要由兩種類型的layer構(gòu)成:卷積層(convolutional layer)和池化層(pooling layer)。
卷積層由多個feature maps構(gòu)成(類似原始輸入數(shù)據(jù)里的通道),每一個feature maps里的神經(jīng)元都通過一組權(quán)重(filter bank)與前一層所有feature maps里的部分神經(jīng)元相連(local connection),并對前一層相連神經(jīng)元的輸出加權(quán)求和,傳遞給一個非線性的變換器(通常是ReLU)。值得注意的是,同一個feature map里的神經(jīng)元共享同一個filter bank;不同feature maps之間的filter bank并不相同(shared weights)。這么做出于兩點考慮:1. 在列狀數(shù)據(jù)(array data)中,相鄰的數(shù)據(jù)點一般是高度相關(guān)的;局域的連接更有利于特征的檢測;2. 這種局域的統(tǒng)計特征往往與位置無關(guān),從而使得不同位置的神經(jīng)元可以通過共享權(quán)重檢測同一個特征。數(shù)學(xué)上,一個feature map對輸入特征的操作,等效于一個離散的卷積過程。這也是卷積神經(jīng)網(wǎng)絡(luò)名字的由來。
卷積層的作用是組合上一層的局域特征并進(jìn)行檢測;而池化層的作用是將檢測到的距離相近的特征合并為一,從而降低特征相對位置的變化對最終結(jié)果的影響。一種常見的池化操作是maximum pooling,它對一個local patch里的神經(jīng)元的狀態(tài)取最大值并輸出。池化操作可以有效地降低特征的維度,并增強(qiáng)模型的泛化能力。
將2-3個由卷積層、非線性變換、和池化層構(gòu)成的stage堆疊在一起,與一個全連接的輸出層相連,就組成了一個完整的卷積神經(jīng)網(wǎng)絡(luò)。反向傳播算法依然可被用來訓(xùn)練這個網(wǎng)絡(luò)中的連接權(quán)重。
同許多深度神經(jīng)網(wǎng)絡(luò)一樣,卷積神經(jīng)網(wǎng)絡(luò)成功地利用了自然信號中內(nèi)在的層級結(jié)構(gòu)屬性:高層級的特征由低層級的特征組成。例如,一張圖片中的物體可以拆分成各個組件;每個組件又可以進(jìn)一步拆分成一些基本的圖案;而每個基本的圖案又是由更基本的線條組成。
Image Understanding與深度卷積網(wǎng)絡(luò)
雖然早在2000年,卷積神經(jīng)網(wǎng)絡(luò)在圖像識別的領(lǐng)域中就已經(jīng)取得了不錯的成績;然而直到2012年的ImageNet比賽后,CNN才被計算機(jī)視覺和機(jī)器學(xué)習(xí)的主流科學(xué)家們所接受。CNN的崛起依賴于四個因素:GPU的高性能計算;ReLU的提出;一種叫做dropout的正則化技術(shù);和一種對已有數(shù)據(jù)進(jìn)行變形以生成更多的訓(xùn)練樣本的技術(shù)。一個深度卷積神經(jīng)網(wǎng)絡(luò)通常有10-20個卷積層,數(shù)億的權(quán)重和連接。得益于計算硬件和并行計算的高速發(fā)展,使得深度卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練成為了可能。如今,深度CNN帶來了計算機(jī)視覺領(lǐng)域的一場革命,被廣泛應(yīng)用于幾乎所有與圖像識別有關(guān)的任務(wù)中(例如無人車的自動駕駛)。最近的一項研究表明,如果將深度CNN學(xué)習(xí)到的高維特征與RNN結(jié)合在一起,甚至可以教會計算機(jī)“理解”圖片里的內(nèi)容。
Distributed Representation與自然語言處理
深度學(xué)習(xí)理論指出,與傳統(tǒng)的淺層學(xué)習(xí)模型相比,深度學(xué)習(xí)網(wǎng)絡(luò)有兩個指數(shù)級的優(yōu)勢:
下面以深度神經(jīng)網(wǎng)絡(luò)在自然語言處理中的一個應(yīng)用,來解釋distributed representation的概念。
假設(shè)我們需要訓(xùn)練一個深度神經(jīng)網(wǎng)絡(luò)來預(yù)測一段文本序列的下一個單詞。我們用一個one-of-N的0-1向量來表示上下文中出現(xiàn)的單詞。神經(jīng)網(wǎng)絡(luò)將首先通過一個embedding層為每一個輸入的0-1向量生成一個word vector,并通過剩下的隱藏層將這些word vector轉(zhuǎn)化為目標(biāo)單詞的word vector。這里的word vector就是一種distributed representation。向量中的每一個元素都對應(yīng)著原始單詞的某一個語義特征。這些特征互不排斥,共同表達(dá)了原始文本里的單詞。要注意的是,這些語義特征即非顯式地存在于原始的輸入數(shù)據(jù)中,也非由專家事先指定,而是通過神經(jīng)網(wǎng)絡(luò)從輸入輸出的結(jié)構(gòu)聯(lián)系中自動挖掘出來。因此,對于我們的單詞預(yù)測問題,模型學(xué)習(xí)到的word vector可以很好地表示兩個單詞在語義上的相似度(例如,在這個問題下,Tuesday和Wednesday這兩個單詞給出的word vector相似度就很高)。而傳統(tǒng)的統(tǒng)計語言模型就很難做到這一點(它們通常是把單詞作為一個不可分的最小單元)。
如今,這種從文本中學(xué)習(xí)word vector的技術(shù)被廣泛應(yīng)用于各種自然語言處理的問題中。
遞歸神經(jīng)網(wǎng)絡(luò)
遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network)通常用于處理一些序列的輸入(例如語音或文本)。它的基本思想是,一次只處理輸入序列中的一個元素,但在hidden units中維護(hù)一個狀態(tài)向量,隱式地編碼之前輸入的歷史信息。如果我們將不同時刻的隱藏單元在空間上展開,就得到了一個(時間)深度網(wǎng)絡(luò)。顯然,我們可以在這個深度網(wǎng)絡(luò)上運用反向傳播算法來訓(xùn)練一個RNN模型。
在RNN模型中,每一個時刻的狀態(tài)向量都由上一時刻的狀態(tài)向量和當(dāng)前時刻的輸入所決定。通過這種遞歸的方式,RNN將每一時刻的輸入都映射為一個依賴其歷史所有輸入的輸出。注意,模型中的參數(shù)()是與序列時刻無關(guān)的權(quán)重。
RNN在自然語言處理上有很多應(yīng)用。例如,可以訓(xùn)練一個RNN模型,將一段英文“編碼”成一個語義向量,再訓(xùn)練另一個RNN模型,將語義向量“解碼”成一段法文。這就實現(xiàn)了一個基于深度學(xué)習(xí)的翻譯系統(tǒng)。除此之外,在“編碼”階段,我們還可以用一個深度卷積網(wǎng)絡(luò)將一張原始的圖片轉(zhuǎn)化為高級的語義特征,并在此基礎(chǔ)上訓(xùn)練一個RNN“解碼器”,就可以實現(xiàn)“看圖說話”的功能。
盡管RNN設(shè)計的初衷是為了學(xué)習(xí)長記憶依賴,然而一些理論和實驗的研究表明,“it is difficult to learn to store information for very long”。為此,人們提出了long short-term memory(LSTM)模型。LSTM模型通過在RNN模型的基礎(chǔ)上引入一些特殊的中間神經(jīng)元(門變量)來控制長短期記憶的均衡,被證明要比傳統(tǒng)的RNN模型更加高效和強(qiáng)大。
還有一類模型是通過引入一個記憶存儲單元來增強(qiáng)RNN模型的記憶能力。Neural Turing Machine和memory networks就是這一類模型。它們在處理一些知識問答的推斷系統(tǒng)中被證明十分有效。
Deep Learning的未來
無監(jiān)督學(xué)習(xí):可以說,正是對無監(jiān)督學(xué)習(xí)的研究才催化了深度學(xué)習(xí)的復(fù)興。然而,如今無監(jiān)督學(xué)習(xí)似乎已被有監(jiān)督學(xué)習(xí)的巨大光芒所掩蓋。考慮到人和動物大部分是通過無監(jiān)督的學(xué)習(xí)來了解這個世界,長期來看,對無監(jiān)督學(xué)習(xí)的研究將會愈發(fā)的重要。
深度學(xué)習(xí)與強(qiáng)化學(xué)習(xí)的結(jié)合:在CNN和RNN的基礎(chǔ)上,結(jié)合Reinforcement Learning讓計算機(jī)學(xué)會進(jìn)一步的決策。這方面的研究雖尚處于萌芽,但已有一些不俗的表現(xiàn)。例如前段時間的AlphaGo。
自然語言的理解。雖然RNN已被廣泛應(yīng)用于自然語言處理,然而在教會機(jī)器理解自然語言的目標(biāo)上,還有很長的一段路要走。
特征學(xué)習(xí)和特征推斷的結(jié)合。這或許會極大地推動人工智能的發(fā)展
總結(jié)
以上是生活随笔為你收集整理的Deep Learning 【Nature review】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 矩阵的秩最小化
- 下一篇: 使用DLL封装窗体和业务类