深度學習是計算機領域中目前非常火的話題,不僅在學術界有很多論文,在業界也有很多實際運用。本篇博客主要介紹了三種基本的深度學習的架構,并對深度學習的原理作了簡單的描述。
簡介
機器學習技術在當代社會已經發揮了很大的作用:從網絡搜索到社交網絡中的內容過濾到電子商務網站的個性化推薦,它正在快速的出現在用戶的消費品中,如攝像機和智能手機。機器學習系統可以用來識別圖像中的物體,將語音轉變成文字,匹配用戶感興趣的新聞、消息和產品等,也可以選擇相關的搜索結果。這些應用越來越多的使用一種叫做“深度學習(Deep Learning)”的技術。
深度學習(Deep Learning)(也稱為深度結構學習【Deep Structured Learning】、層次學習【Hierarchical Learning】或者是深度機器學習【Deep Machine Learning】)是一類算法集合,是機器學習的一個分支。它嘗試為數據的高層次摘要進行建模。以一個簡單的例子來說,假設你有兩組神經元,一個是接受輸入的信號,一個是發送輸出的信號。當輸入層接收到輸入信號的時候,它將輸入層做一個簡單的修改并傳遞給下一層。在一個深度網絡中,輸入層與輸出層之間可以有很多的層(這些層并不是由神經元組成的,但是它可以以神經元的方式理解),允許算法使用多個處理層,并可以對這些層的結果進行線性和非線性的轉換。
譯者補充:深度學習的思想與人工神經網絡思想是一致的。總的來說,神經網絡是一種機器學習架構,所有的個體單元以權重的方式連接在一起,且這些權重是通過網絡來訓練的,那么它就可以稱之為神經網絡算法。人工神經網絡算法的思想來源于模仿人類大腦思考的方式。人類大腦是通過神經系統得到輸入信號再作出相應反映的,而接受外部刺激的方式是用神經元接受神經末梢轉換的電信號。那么,我們希望通過人造神經元的方式模擬大腦的思考,這就產生了人工神經網絡了。人工神經元組成了人工神經網絡的計算單元,而人工神經網絡結構描述了這些神經元的連接方式。我們可以采用層的方式組織神經元,層與層之間可以互相連接。以前受制于很多因素,我們無法添加很多層,而現在隨著算法的更新、數據量的增加以及GPU的發展,我們可以用很多的層來開發神經網絡,這就產生了深度神經網絡。而深度學習其實就是深度神經網絡的一個代名詞。
近些年來,深度學習通過在某些任務中極佳的表現正在改革機器學習。深度學習方法在會話識別、圖像識別、對象偵測以及如藥物發現和基因組學等領域表現出了驚人的準確性。但是,“深度學習”這個詞語很古老,它在1986年由Dechter在機器學習領域提出,然后在2000年有Aizenberg等人引入到人工神經網絡中。而現在,由于Alex Krizhevsky在2012年使用卷積網絡結構贏得了ImageNet比賽之后受到大家的矚目。
深度學習架構
1. 生成式深度架構(Generative deep architectures),主要是用來描述具有高階相關性的可觀測數據或者是可見的對象的特征,主要用于模式分析或者是總和的目的,或者是描述這些數據與他們的類別之間的聯合分布。(其實就是類似與生成模型)
2. 判別式深度架構(Discriminative deep architectures),主要用于提供模式分類的判別能力,經常用來描述在可見數據條件下物體的后驗類別的概率。(類似于判別模型)
3. 混合深度架構(Hybrid deep architectures),目標是分類,但是和生成結構混合在一起了。比如以正在或者優化的方式引入生成模型的結果,或者使用判別標注來學習生成模型的參數。
盡管上述深度學習架構的分類比較復雜,其實實際中對應的模型的例子就是深度前饋網絡,卷積網絡和遞歸神經網絡(Deep feed-forward networks, Convolution networks and Recurrent Networks)。
深度前饋網絡(Deep feed-forward networks)
深度前饋網絡也叫做前饋神經網絡,或者是多層感知機(Multilayer Perceptrons,MLPs),是深度學習模型中的精粹。
前饋網絡的目標是近似某些函數。例如,對于一個分類器,y=f(x)來說,它將一個輸入值x變成對應的類別y。前饋網絡就是定義一個映射y=f(x;θ),并學習出參數θ使得產生最好的函數近似。
簡而言之,神經網絡可以定義成輸入層,隱含層和輸出層。其中,輸入層接受數據,隱含層處理數據,輸出層則輸出最終結果。這個信息流就是接受x,通過處理函數f,在達到輸出y。這個模型并沒有任何的反饋連接,因此被稱為前饋網絡。模型如下圖所示:
卷積神經網絡(Convolution Neural Networks)
在機器學習中,卷積神經網絡(簡稱CNN或者ConvNet)是一種前饋神經網絡,它的神經元的連接是啟發于動物視覺皮層。單個皮質神經元可以對某個有限空間區域的刺激作出反應。這個有限空間可以稱為接受域。不同的神經元的接受域可以重疊,從組成了所有的可見區域。那么,一個神經元對某個接受域內的刺激作出反應,在數學上可以使用卷積操作來近似。也就是說,卷積神經網絡是受到生物處理的啟發,設計使用最少的預處理的多層感知機的變體。
卷積神經網絡在圖像和視頻識別、推薦系統以及自然語言處理中都有廣泛的運用。
LeNet是早期推動深度學習發展的卷積神經網絡之一。這是Yann LeCun從1988年以來進行的許多詞的成功迭代后得到的開創性工作,稱之為LeNet5。在當時,LeNet架構主要用來進行字符識別的工作,如讀取郵編,數字等。卷積神經網絡主要包含四塊:
卷積層(Convolutional Layer)
激活函數(Activation Function)
池化層(Pooling Layer)
全連接層(Fully Connected Layer)
卷積層(Convolutional Layer)
卷積層是基于單詞“卷積(Convolution)”而來,這是一種數學上的操作,它是對兩個變量f\*g進行操作產生第三個變量。它和互相關(cross-correlation)很像。卷積層的輸入是一個m×m×r圖像,其中m是圖像的高度和寬度,r是通道的數量,例如,一個RGB圖像的通道是3,即r=3。卷積層有k個濾波器【filters】(或者稱之為核【kernel】),其大小是n×n×q,這里的n是比圖像維度小的一個數值,q既可以等于通道數量,也可以小于通道數量,具體根據不同的濾波器來定。濾波器的大小導致了
激活函數(Activation Function)
為了實現復雜的映射函數,我們需要使用激活函數。它可以帶來非線性的結果,而非線性可以使得我們很好的擬合各種函數。同時,激活函數對于壓縮來自神經元的無界線性加權和也是重要的。
激活函數很重要,它可以避免我們把大的數值在高層次處理中進行累加。激活函數有很多,常用的有sigmoid,tanh和ReLU。
池化層(Pooling Layer)
池化是一個基于樣本的離散化過程。其目的上降低輸入表示的采樣(這里的輸入可以是圖像,隱層的輸出等),減少它們的維度,并允許我們假設特征已經被包含在了子區域中。
這部分的作用是通過提供一種抽象的形式表示來幫助過擬合表示。同樣的,它也通過減少了參數的數量降低了計算的復雜度并為內部的表示提供一個基本的不變性的轉換。
目前最常用的池化技術有Max-Pooling、Min-Pooling和Average-Pooling。下圖是2*2濾波器的Ma-Pooling操作示意圖。
全連接層(Fully Connected Layer)
“全連接”的意思是指先前的層里面的所有的神經元都與后一個層里面的所有的神經元相連。全連接層是一種傳統的多層感知機,在輸出層,它使用softmax激活函數或者其他激活函數。
遞歸神經網絡(Recurrent Neural Networks)
在傳統的神經網絡中,我們假設所有的輸入之間相互獨立。但是對于很多任務來說,這并不是一個好的主意。如果你想知道一個句子中下一個單詞是什么,你最好知道之前的單詞是什么。RNN之所以叫RNN就是它對一個序列中所有的元素都執行相同的任務,所有的輸出都依賴于先前的計算。另一種思考RNN的方式是它會記住所有之前的計算的信息。
一個RNN里面有很多循環,它可以攜帶從輸入中帶來的信息。如下圖所示,x_t是一種輸入,A是RNN里面的一部分,h_t是輸出。本質上,您可以從句子中輸入文字,甚至還可以從字符串中輸入x_t格式的字符,通過RNN可以提供一個h_t。 RNN的一些類型是LSTM,雙向RNN,GRU等。
由于任何輸入和輸出都可以在RNN中變成一對一或者多對多的形式,RNN可以用在自然語言處理、機器翻譯、語言模型、圖像識別、視頻分析、圖像生成、驗證碼識別等領域。下圖展示了RNN可能的結構以及對模型的解釋。
應用
深度學習有很多應用,很多特別的問題也可以通過深度學習解決。一些深度學習的應用舉例如下:
黑白圖像的著色
深度學習可以用來根據對象及其情景來為圖片上色,而且結果很像人類的著色結果。這中解決方案使用了很大的卷積神經網絡和有監督的層來重新創造顏色。
機器翻譯
深度學習可以對未經處理的語言序列進行翻譯,它使得算法可以學習單詞之間的依賴關系,并將其映射到一種新的語言中。大規模的LSTM的RNN網絡可以用來做這種處理。
圖像中的對象分類與檢測
這種任務需要將圖像分成之前我們所知道的某一種類別中。目前這類任務最好的結果是使用超大規模的卷積神經網絡實現的。突破性的進展是Alex Krizhevsky等人在ImageNet比賽中使用的AlexNet模型。
自動產生手寫體
這種任務是先給定一些手寫的文字,然后嘗試生成新的類似的手寫的結果。首先是人用筆在紙上手寫一些文字,然后根據寫字的筆跡作為語料來訓練模型,并最終學習產生新的內容。
自動玩游戲
這項任務是根據電腦屏幕的圖像,來決定如何玩游戲。這種很難的任務是深度強化模型的研究領域,主要的突破是DeepMind團隊的成果。
聊天機器人
一種基于sequence to sequence的模型來創造一個聊天機器人,用以回答某些問題。它是根據大量的實際的會話數據集產生的。
結論
從本篇博客來看,由于模仿了人類大腦,深度學習可以運用在很多領域中。目前有很多領域都在研究使用深度學習解決問題。盡管目前信任是個問題,但是它終將被解決。
評論
查看更多