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