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