1. 程式人生 > >給初學者的深度學習簡介

給初學者的深度學習簡介

深度學習是計算機領域中目前非常火的話題,不僅在學術界有很多論文,在業界也有很多實際運用。本篇部落格主要介紹了三種基本的深度學習的架構,並對深度學習的原理作了簡單的描述。本篇文章翻譯自Medium上一篇入門介紹。

深度學習是計算機領域中目前非常火的話題,不僅在學術界有很多論文,在業界也有很多實際運用。本篇部落格主要介紹了三種基本的深度學習的架構,並對深度學習的原理作了簡單的描述。翻譯自:原文地址

簡介

機器學習技術在當代社會已經發揮了很大的作用:從網路搜尋到社交網路中的內容過濾到電子商務網站的個性化推薦,它正在快速的出現在使用者的消費品中,如攝像機和智慧手機。機器學習系統可以用來識別影象中的物體,將語音轉變成文字,匹配使用者感興趣的新聞、訊息和產品等,也可以選擇相關的搜尋結果。這些應用越來越多的使用一種叫做“深度學習(Deep Learning)”的技術。

深度學習(Deep Learning)(也稱為深度結構學習【Deep Structured Learning】、層次學習【Hierarchical Learning】或者是深度機器學習【Deep Machine Learning】)是一類演算法集合,是機器學習的一個分支。它嘗試為資料的高層次摘要進行建模。以一個簡單的例子來說,假設你有兩組神經元,一個是接受輸入的訊號,一個是傳送輸出的訊號。當輸入層接收到輸入訊號的時候,它將輸入層做一個簡單的修改並傳遞給下一層。在一個深度網路中,輸入層與輸出層之間可以有很多的層(這些層並不是由神經元組成的,但是它可以以神經元的方式理解),允許演算法使用多個處理層,並可以對這些層的結果進行線性和非線性的轉換。

譯者補充:深度學習的思想與人工神經網路思想是一致的。總的來說,神經網路是一種機器學習架構,所有的個體單元以權重的方式連線在一起,且這些權重是通過網路來訓練的,那麼它就可以稱之為神經網路演算法。人工神經網路演算法的思想來源於模仿人類大腦思考的方式。人類大腦是通過神經系統得到輸入訊號再作出相應反映的,而接受外部刺激的方式是用神經元接受神經末梢轉換的電訊號。那麼,我們希望通過人造神經元的方式模擬大腦的思考,這就產生了人工神經網路了。人工神經元組成了人工神經網路的計算單元,而人工神經網路結構描述了這些神經元的連線方式。我們可以採用層的方式組織神經元,層與層之間可以互相連線。以前受制於很多因素,我們無法新增很多層,而現在隨著演算法的更新、資料量的增加以及GPU的發展,我們可以用很多的層來開發神經網路,這就產生了深度神經網路

。而深度學習其實就是深度神經網路的一個代名詞。關於人工神經網路演算法可以參考人工神經網路(Artificial Neural Network)演算法簡介

近些年來,深度學習通過在某些任務中極佳的表現正在改革機器學習。深度學習方法在會話識別、影象識別、物件偵測以及如藥物發現和基因組學等領域表現出了驚人的準確性。但是,“深度學習”這個詞語很古老,它在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架構主要用來進行字元識別的工作,如讀取郵編,數字等。如下圖所示,卷積神經網路主要包含四塊:

  1. 卷積層(Convolutional Layer)
  2. 啟用函式(Activation Function)
  3. 池化層(Pooling Layer)
  4. 全連線層(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團隊的成果。

聊天機器人

結論

從本篇部落格來看,由於模仿了人類大腦,深度學習可以運用在很多領域中。目前有很多領域都在研究使用深度學習解決問題。儘管目前信任是個問題,但是它終將被解決。

參考文獻可以見原文末尾:原文地址