淺談CNN和RNN
原創(chuàng)【51CTO.com原創(chuàng)稿件】
1 導(dǎo)讀
在上一篇文稿中主要對(duì)深度學(xué)習(xí)的基礎(chǔ)做了一個(gè)闡述,對(duì)于其中的神經(jīng)網(wǎng)絡(luò)和BP算法進(jìn)行額外的延伸與拓展。但作為日前最為火熱的人工智能技術(shù),掌握這些內(nèi)容遠(yuǎn)遠(yuǎn)還不夠。因?yàn)樯疃葘W(xué)習(xí)面臨的實(shí)際問(wèn)題往往不是線性可分的問(wèn)題,有時(shí)甚至超出了分類的問(wèn)題,這就必須對(duì)深度學(xué)習(xí)模型加以改進(jìn),對(duì)其中的訓(xùn)練模型網(wǎng)絡(luò)進(jìn)行優(yōu)化,從而使得用來(lái)預(yù)測(cè)結(jié)果數(shù)據(jù)的網(wǎng)絡(luò)更加豐富化、智能化。做到實(shí)際上的智能,就是訓(xùn)練模型真正的能通過(guò)輸入的數(shù)據(jù)來(lái)預(yù)測(cè)結(jié)果并且每預(yù)測(cè)一次都可以對(duì)自身網(wǎng)絡(luò)模型進(jìn)行加強(qiáng)和優(yōu)化,也就好比一個(gè)“不斷學(xué)習(xí)進(jìn)步的人”一樣。隨著時(shí)間和訓(xùn)練次數(shù)的推進(jìn),訓(xùn)練的模型自身能力會(huì)越來(lái)越強(qiáng)。這樣的網(wǎng)絡(luò)模型才是我們真正需要的。當(dāng)然要達(dá)到這一步光是靠之前的線性網(wǎng)絡(luò)模型和淺層、深層神經(jīng)網(wǎng)絡(luò)遠(yuǎn)遠(yuǎn)不夠。所以,在一篇文稿中,將對(duì)對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行延伸補(bǔ)充,是對(duì)神經(jīng)網(wǎng)絡(luò)模型的一次優(yōu)化,讓能運(yùn)用的實(shí)際場(chǎng)景更為廣泛和豐富。
2 卷積神經(jīng)網(wǎng)絡(luò)(CNN)
2.1 卷積神經(jīng)網(wǎng)絡(luò)VS傳統(tǒng)神經(jīng)網(wǎng)絡(luò)
CNN稱為卷積神經(jīng)網(wǎng)絡(luò),那么卷積神經(jīng)與之前的神經(jīng)網(wǎng)絡(luò)有什么區(qū)別呢?卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network)可以有效地減少了傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)對(duì)輸入數(shù)據(jù)所進(jìn)行的預(yù)處理環(huán)節(jié),降低了過(guò)程的復(fù)雜性。但是這種方式會(huì)導(dǎo)致網(wǎng)絡(luò)結(jié)構(gòu)的整體復(fù)雜性增加,因?yàn)樗峭ㄟ^(guò)輸入層或者隱層進(jìn)行傅里葉卷積操作來(lái)進(jìn)行輸出,增加網(wǎng)絡(luò)卷積層。這樣就會(huì)使得網(wǎng)絡(luò)更加難以優(yōu)化,很容易產(chǎn)生過(guò)擬合現(xiàn)象。所以這種神經(jīng)網(wǎng)絡(luò)主要應(yīng)用在圖像分類和物品識(shí)別等場(chǎng)景比較多,因?yàn)閷?duì)于圖像進(jìn)行預(yù)處理比較復(fù)雜,卷積神經(jīng)網(wǎng)絡(luò)雖然網(wǎng)絡(luò)復(fù)雜,但是減少了對(duì)圖像預(yù)處理環(huán)節(jié),直接把輸入的圖像作為輸入數(shù)據(jù)即可,并且通過(guò)卷積神經(jīng)網(wǎng)絡(luò)的非線性可以得出目標(biāo)函數(shù)的近似結(jié)構(gòu),從而得到更好的特征表達(dá)。
2.2 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)層次
卷積神經(jīng)網(wǎng)絡(luò)主要分?jǐn)?shù)據(jù)輸入層(Input Layer)、卷積計(jì)算層(CONV Layer)、ReLU激勵(lì)層(ReLU Layer)、池化層(Pooling Layer)、全連接層(FC Layer)五個(gè)層次,這五個(gè)層次都是依次相連,每一層都接受上一層的輸出特征數(shù)據(jù)來(lái)提供給下一層。其中數(shù)據(jù)輸入層是對(duì)輸入數(shù)據(jù)的特征進(jìn)行提取;卷積計(jì)算層是對(duì)這些特征進(jìn)行卷積映射;激勵(lì)層是利用非線性激勵(lì)函數(shù)對(duì)神經(jīng)元進(jìn)行激勵(lì)達(dá)到條件將特征信息傳遞到下一個(gè)神經(jīng)元;池化層則是用來(lái)壓縮數(shù)據(jù)和參數(shù)的量,從而減小過(guò)擬合情況;全連接層就是連接所有輸出層的特征信息,并對(duì)這些信息進(jìn)行匯總整理完成輸出。下面分別闡述下這幾個(gè)層次的具體內(nèi)容。
2.3 輸入層(Input Layer)
2.3.1 預(yù)處理原因
和神經(jīng)網(wǎng)絡(luò)/機(jī)器學(xué)習(xí)一樣,都需要對(duì)輸入的數(shù)據(jù)進(jìn)行預(yù)處理操作,進(jìn)行預(yù)處理的主要原因在于:
1.輸入的數(shù)據(jù)單位可能不一樣,因此可能會(huì)導(dǎo)致神經(jīng)網(wǎng)絡(luò)的收斂速度較慢,從而致使訓(xùn)練時(shí)間過(guò)長(zhǎng);
2.數(shù)據(jù)范圍太大的輸入在模式分類中的作用會(huì)導(dǎo)致偏大,而數(shù)據(jù)范圍較小的作用也就有可能偏小;
3.由于神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)是有值域限制的,因此需要將網(wǎng)絡(luò)訓(xùn)練的目標(biāo)數(shù)據(jù)映射到激活函數(shù)的值域;
4.Sigmod激活函數(shù)(0,1)區(qū)間以外區(qū)域很平緩,從而導(dǎo)致區(qū)分度太小,影響最終的輸出效果。
2.3.2預(yù)處理方式
輸入層對(duì)數(shù)據(jù)進(jìn)行預(yù)處理主要有3種方式,這3中數(shù)據(jù)預(yù)處理方式各有不同,分別是:
1.去均值:就是將輸入數(shù)據(jù)的各個(gè)維度中心化到0;
2.歸一化:將輸入的數(shù)據(jù)的各個(gè)維度的幅度歸一化到同一范圍,具體操作在之前的推薦系統(tǒng)文稿里有介紹。
3.PCA/白化:也就是用PCA降維或者是白化,也就是將數(shù)據(jù)的每個(gè)特征軸上的幅度歸一化,也是平時(shí)用的最多的數(shù)據(jù)預(yù)處理方法。
2.3.3 預(yù)處理效果
三種預(yù)處理方法的效果圖如下所示:
例如,利用白化進(jìn)行預(yù)處理后就會(huì)使得輸入的數(shù)據(jù)或者特征之間相關(guān)性較低,并且使得所有特征具有相同的方差。
2.4 卷積層(CONV Layer)
2.4.1 卷積神經(jīng)網(wǎng)絡(luò)
在將卷積層之前,首先大致了解下卷積神經(jīng)網(wǎng)絡(luò)。卷積神經(jīng)網(wǎng)絡(luò)是保存了層級(jí)的網(wǎng)絡(luò)結(jié)構(gòu),以至于使得不同的層次有不同的形式或者運(yùn)算與功能。而卷積神經(jīng)網(wǎng)絡(luò)是主要適用于圖片信息處理的場(chǎng)景,而卷積層就是識(shí)別圖像中一個(gè)最為關(guān)鍵的步驟或者層級(jí)。類似人的大腦在識(shí)別圖片的過(guò)程中,不同的腦皮質(zhì)層會(huì)處理來(lái)自不同方面的數(shù)據(jù),例如顏色、形狀等,然后通過(guò)不同皮質(zhì)層的處理結(jié)果進(jìn)行合并并且映射操作,從而得出最終的結(jié)果。也就是說(shuō)第一部分實(shí)質(zhì)上是一個(gè)局部的觀察結(jié)果,第二部分是一個(gè)整體的結(jié)果合并。因此卷積神經(jīng)網(wǎng)絡(luò)就是基于人的大腦識(shí)別圖片的過(guò)程,每個(gè)神經(jīng)元就沒(méi)有必要對(duì)全局的圖像進(jìn)行感知,只需要對(duì)局部的圖像進(jìn)行感知即可,最后在更高層次對(duì)局部的信息進(jìn)行綜合操作得出全局的信息。
2.4.2 卷積層參數(shù)
卷積層也叫卷積計(jì)算層,類比人腦識(shí)別圖像過(guò)程,它主要有以下幾個(gè)概念:
1局部關(guān)聯(lián):每個(gè)神經(jīng)元看作是一個(gè)filter,進(jìn)行,作用就是對(duì)局部數(shù)據(jù)進(jìn)行識(shí)別;
2.窗口(receptive field)滑動(dòng),也就是將filter對(duì)局部數(shù)據(jù)進(jìn)行計(jì)算,滑動(dòng)預(yù)先會(huì)設(shè)定步長(zhǎng),移動(dòng)位置來(lái)得到下一個(gè)窗口;
3.對(duì)于窗口中滑動(dòng)過(guò)程中,有深度(depth)、步長(zhǎng)(stride)、填充值(zero-padding)這幾個(gè)重要參數(shù),深度即轉(zhuǎn)換的次數(shù)(結(jié)果產(chǎn)生的depth);步長(zhǎng)就是設(shè)定每一步移動(dòng)多少;填充值就是在矩陣周邊添加一些擴(kuò)充值(目的就是解決圖片輸入不規(guī)整)
計(jì)算模型如下圖所示:
2.4.3 卷積計(jì)算
卷積計(jì)算過(guò)程中有一個(gè)重要機(jī)制就是參數(shù)共享機(jī)制,假設(shè)每個(gè)神經(jīng)元連接數(shù)據(jù)窗的權(quán)重是固定的,也就是固定每個(gè)神經(jīng)元的連接權(quán)重,因此就可以將神經(jīng)元看成一個(gè)模塊;也就是每個(gè)神經(jīng)元只關(guān)注一個(gè)特性,從而使得需要計(jì)算的權(quán)重個(gè)數(shù)會(huì)大大的減少。而卷積計(jì)算就是將一組固定的權(quán)重和不同窗口內(nèi)數(shù)據(jù)做內(nèi)積,就叫卷積。
2.5 激勵(lì)層(ReLU Layer)
2.5.1 非線性激勵(lì)函數(shù)
激勵(lì)層,顧名思義就是加一個(gè)激勵(lì)函數(shù)對(duì)其神經(jīng)元進(jìn)行刺激或者激勵(lì),也就是使用映射函數(shù)來(lái)完成非線性的映射。在卷積神經(jīng)網(wǎng)絡(luò)中,激勵(lì)函數(shù)是非線性的。激勵(lì)層是接在卷積層后面的一層網(wǎng)絡(luò),負(fù)責(zé)將卷積層的輸出結(jié)果做一次非線性的映射,即激勵(lì)。在卷積神經(jīng)網(wǎng)絡(luò)中,經(jīng)常用到的非線性映射函數(shù)有S函數(shù)(Sigmoid)、雙曲正切函數(shù)(Tanh)、ReLU、Leaky ReLu、ELU和Maxout等。如下就是某些激勵(lì)函數(shù)的函數(shù)圖像:
2.5.2 激勵(lì)層選取
由于非線性激勵(lì)函數(shù)較多,但是各有不同,因此在選擇激勵(lì)層的非線性激勵(lì)函數(shù)時(shí),有不同的采取建議:
1.卷積神經(jīng)網(wǎng)絡(luò)(CNN)首先盡量不要使用S函數(shù)(sigmoid),如果要使用,建議只在全連接層使用;
2.優(yōu)先建議使用RELU,因?yàn)镽ELU函數(shù)的迭代速度快,但是有可能會(huì)導(dǎo)致效果不佳;
3.如果在選取RELU激勵(lì)函數(shù)后,達(dá)不到想要的效果(激勵(lì)函數(shù)失效)的情況下,則考慮使用Leaky ReLu或者M(jìn)axout;
4.雙曲正切函數(shù)(tanh)在某些情況下會(huì)有比較好的效果,但是能應(yīng)用的場(chǎng)景比較少。
因此總結(jié)起來(lái)就是:雙曲正切函數(shù)和S函數(shù)用于全連接層,ReLu用于卷積計(jì)算層,普遍使用ELU,而Maxout是使用最大值來(lái)設(shè)置值。
2.6 池化層(Pooling Layer)
池化層存在于連續(xù)的卷積層中間,它的主要功能就是通過(guò)逐步減小表征的空間尺寸從而減小參數(shù)量和網(wǎng)絡(luò)中的計(jì)算復(fù)雜度;并且池化層都是在每一個(gè)特征圖上獨(dú)立進(jìn)行操作。所以使用池化層有一個(gè)明顯的優(yōu)勢(shì)就是可以壓縮數(shù)據(jù)和參數(shù)的量,來(lái)解決過(guò)擬合問(wèn)題。
在池化層中,一般采用兩種策略去進(jìn)行壓縮來(lái)減少特征數(shù)量,分別為最大池化(Max Pooling)和平均池化(Average Pooling)。例如給定某一個(gè)向量表征圖像,如下所示:
對(duì)于上面向量表征圖像池化為四個(gè)網(wǎng)格的小表征圖,那么利用最大池化策略就是每四個(gè)正方形格子取最大值,就分別得到6、8、3、4,同理可得,平均池化就是計(jì)算每四個(gè)正方形格子的平均值,就分別得到3、5、2、2,分別得到如上圖所示的網(wǎng)格。
2.7 全連接層(FC Layer)
類似傳統(tǒng)神經(jīng)網(wǎng)絡(luò)中的結(jié)構(gòu),卷積神經(jīng)網(wǎng)絡(luò)中的池化層(FC)中的神經(jīng)元跟之前層次的所有激活輸出都是連接著的,也就是說(shuō)兩層之間所有的神經(jīng)元都有權(quán)重連接;作為最終的連接整理輸出,對(duì)每層的輸出結(jié)果進(jìn)行匯總計(jì)算,全連接層只會(huì)在卷積神經(jīng)網(wǎng)絡(luò)的尾部出現(xiàn)。
3 CNN訓(xùn)練算法與CNN優(yōu)缺點(diǎn)
3.1 CNN訓(xùn)練算法
CNN訓(xùn)練算法和一般的機(jī)器學(xué)習(xí)算法一樣,首先需要定義損失函數(shù)(Loss Function)來(lái)計(jì)算損失值,從而衡量出預(yù)測(cè)值和實(shí)際值之間的誤差,在這里一般采用平方和誤差公式。對(duì)于在網(wǎng)絡(luò)中找到最小損失函數(shù)的W和b的值,卷積神經(jīng)網(wǎng)絡(luò)通暢采用隨機(jī)梯度下降算法(SGD),這個(gè)算法在之前的推薦算法文稿中有所闡述。簡(jiǎn)而言之,卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練算法其實(shí)就是一個(gè)機(jī)器學(xué)習(xí)中的反向傳播(BP)算法,SGD需要計(jì)算W和b的偏導(dǎo),根據(jù)偏導(dǎo)來(lái)不斷迭代更新W和b。
3.2 CNN優(yōu)缺點(diǎn)
對(duì)于卷積神經(jīng)網(wǎng)絡(luò),有以下幾個(gè)優(yōu)點(diǎn):
1.可以共享卷積核(共享參數(shù)),使得卷積神經(jīng)網(wǎng)絡(luò)對(duì)高維的數(shù)據(jù)處理沒(méi)有壓力;
2.不需要選擇特征屬性,只需要訓(xùn)練好每一個(gè)權(quán)重,也就可以得到特征值;
3.在深層次的神經(jīng)網(wǎng)絡(luò)中,使得對(duì)圖像信息的抽取更為豐富,從而使得最終表達(dá)效果好;
但是卷積神經(jīng)網(wǎng)絡(luò)同樣也有一些缺點(diǎn),比如在卷積神經(jīng)網(wǎng)絡(luò)中需要調(diào)參,這就會(huì)導(dǎo)致需要大量的樣本,使得訓(xùn)練迭代次數(shù)比較多,最好使用GPU來(lái)訓(xùn)練;另外對(duì)于卷積神經(jīng)網(wǎng)絡(luò)每一層的輸出結(jié)果的物理含義并不明確,也就是很難從每一層輸出看出含義,即可解釋性較差。
4 正則化和Dropout延伸
神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)能力受神經(jīng)元數(shù)目和神經(jīng)網(wǎng)絡(luò)的層級(jí)影響,一般來(lái)說(shuō),神經(jīng)元數(shù)目越多,神經(jīng)網(wǎng)絡(luò)的層級(jí)就越高,那么這個(gè)神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)能力就越強(qiáng),但是有可能就會(huì)出現(xiàn)過(guò)擬合(overfitting)的問(wèn)題。解決過(guò)擬合的方法主要還是正則化(Regularization)和Dropout,這兩個(gè)方法在之前的神經(jīng)網(wǎng)絡(luò)文稿中有所闡述,在這里進(jìn)一步說(shuō)明下:
1.正則化是通過(guò)降低模型的復(fù)雜度,通過(guò)在cost函數(shù)上添加一個(gè)正則項(xiàng)的方式來(lái)降低overfitting;Dropout是通過(guò)隨機(jī)刪除神經(jīng)網(wǎng)絡(luò)中的部分神經(jīng)元來(lái)解決過(guò)擬合問(wèn)題,使得在每次僅限迭代時(shí),只是用部分神經(jīng)元訓(xùn)練模型來(lái)獲取W和d的值,從而使得CNN沒(méi)有太多的泛化能力,通過(guò)合并多次迭代的結(jié)果可以增加模型的準(zhǔn)確率。
2.一般情況下,對(duì)于同一組訓(xùn)練數(shù)據(jù),利用不同的神經(jīng)網(wǎng)絡(luò)之后,求它輸出的平均值就可以減少過(guò)擬合。因此Dropout就是利用這個(gè)原理,每次都丟掉一半左右的隱藏層神經(jīng)元,也就相當(dāng)于在不同的神經(jīng)網(wǎng)絡(luò)上進(jìn)行訓(xùn)練,這樣就減少了神經(jīng)元之間的依賴性,即每個(gè)神經(jīng)元不能依賴于某幾個(gè)其他神經(jīng)元(在這里指層與層之間想連接的神經(jīng)元),使得神經(jīng)網(wǎng)絡(luò)更具健壯性的特征,還能更好的提高準(zhǔn)確率。
對(duì)于一些典型的卷積神經(jīng)網(wǎng)絡(luò)模型介紹,網(wǎng)上都有資料,讀者感興趣的話可以自己搜索瀏覽下,在這里就不贅述了。
5 循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)
5.1 應(yīng)用場(chǎng)景
循環(huán)神經(jīng)網(wǎng)絡(luò)的運(yùn)用場(chǎng)景較多,在目前的互聯(lián)網(wǎng)或者信息科技公司運(yùn)用循環(huán)神經(jīng)網(wǎng)絡(luò)最多的幾個(gè)場(chǎng)景有自然語(yǔ)言處理(NLP)、機(jī)器翻譯、語(yǔ)音識(shí)別、圖像描述生成,自然語(yǔ)言處理也包括了語(yǔ)言模型與文本的生成,在互聯(lián)網(wǎng)行業(yè)主要?jiǎng)澐譃檎Z(yǔ)音/語(yǔ)義識(shí)別部門(mén)。對(duì)推向進(jìn)行識(shí)別描述,與卷積神經(jīng)網(wǎng)絡(luò)(CNN)不同點(diǎn)在于:CNN是去做一個(gè)圖片的識(shí)別,例如圖片的的東西是什么,而RNN雖然也可以識(shí)別圖片里的東西是什么,但是運(yùn)用RNN更多的是度圖片上的東西進(jìn)行描述,提供出圖片上的內(nèi)容信息。
那么有人就會(huì)問(wèn),既然有BP神經(jīng)網(wǎng)絡(luò)和CNN,為什么還要RNN呢?這個(gè)就跟RNN的循環(huán)有關(guān)了,之前的BP神經(jīng)網(wǎng)絡(luò)和CNN的每一個(gè)神經(jīng)元輸入輸出都是相互獨(dú)立的,互相并沒(méi)有產(chǎn)生干擾或者聯(lián)系,而在實(shí)際應(yīng)用場(chǎng)景中呢?有些場(chǎng)景的輸出內(nèi)容和之前的內(nèi)容是有關(guān)聯(lián)的,也就是一種“記憶”的概念,因此RNN引入這個(gè)概念,循環(huán)就是指每一個(gè)神經(jīng)元都執(zhí)行相同的任務(wù),但是輸出不僅依賴于輸入,還依賴于神經(jīng)元自身之前的“記憶”。
5.2 RNN結(jié)構(gòu)
因?yàn)?ldquo;記憶”的概念與時(shí)間的先后有關(guān),所以講神經(jīng)元序列按照時(shí)間先后展開(kāi)就可以得到RNN的結(jié)構(gòu)如下圖所示:
在上述結(jié)構(gòu)中, 是時(shí)間t的輸入, 是時(shí)間t出的“記憶”, 是時(shí)間t的輸出。
還有一種循環(huán)神經(jīng)網(wǎng)絡(luò)是雙向RNN(Bidirectional RNN),也就是在之前的結(jié)構(gòu)中當(dāng)前t的輸出不僅僅和之前的序列有關(guān),而且還與之后的序列有關(guān)。例如:預(yù)測(cè)一個(gè)語(yǔ)句中缺失的詞語(yǔ),那么就需要根據(jù)上下文進(jìn)行預(yù)測(cè)。雙向RNN其實(shí)是一個(gè)相對(duì)簡(jiǎn)單的RNN結(jié)構(gòu),是有兩個(gè)RNN上下疊加在一起組成。輸出就是有這兩個(gè)RNN的隱藏層的狀態(tài)決定。
5.3 訓(xùn)練算法
5.3.1 BPTT算法
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的訓(xùn)練其實(shí)也很CNN訓(xùn)練一樣,同樣可以用BP反向傳播誤差算法。唯一的區(qū)別就在于:RNN中的參數(shù)W是共享的,并且在隨機(jī)梯度下降算法中,每一步的輸出不僅僅依賴當(dāng)前步的網(wǎng)絡(luò),并且還需要前若干步網(wǎng)絡(luò)的狀態(tài),也就是對(duì)之前的BP短發(fā)進(jìn)行改版,這個(gè)改版的BP算法叫做BPTT(Backpropagation Through Time),BPTT算法和BP算法一樣,在多層訓(xùn)練時(shí),都有可能產(chǎn)生梯度消失和爆炸的問(wèn)題。BPTT算法的思路和BP算法一樣,都是求偏導(dǎo),但是需要同時(shí)考慮到時(shí)間對(duì)step的影響。
5.3.2 LSTM
對(duì)于BPTT算法中可能產(chǎn)生梯度消失和梯度爆炸的問(wèn)題,這是由于在BPTT計(jì)算中,對(duì)于長(zhǎng)期依賴“記憶”問(wèn)題導(dǎo)致的,而LSTM就特別適合解決這類長(zhǎng)時(shí)間依賴的問(wèn)題。LSTM是RNN的一種,大致結(jié)構(gòu)一致,區(qū)別在于LSTM的“記憶神經(jīng)元”是改造過(guò)后的,并且記錄的信息就會(huì)一致傳遞下去,不該記錄的信息就會(huì)被截?cái)嗟簟? 如下圖所示
LSTM結(jié)構(gòu)圖
在LSTM中,有一個(gè)關(guān)鍵點(diǎn)在于“細(xì)胞狀態(tài)”,也就是記憶神經(jīng)元的狀態(tài)。細(xì)胞狀態(tài)類似于傳送帶,都是直接在整個(gè)鏈上運(yùn)行,只有一些少量的線性交互過(guò)程,這樣就使得信息在上面流傳是保持不變較為容易。那么怎么去控制“細(xì)胞狀態(tài)”呢?控制“細(xì)胞狀態(tài)”的過(guò)程有以下幾個(gè)步驟:
1.LSTM可以通過(guò)“門(mén)”(gates)這種結(jié)構(gòu)來(lái)去除或者增加“細(xì)胞狀態(tài)”的信息;
2.用包含一個(gè)sigmoid神經(jīng)網(wǎng)絡(luò)層次和一個(gè)pointwist乘法操作;
3.Sigmoid層輸出一個(gè)0到1之間的概率值,描述每個(gè)部分有多少量可以通過(guò),0表示“不允許任務(wù)變量通過(guò)”,1表示“運(yùn)行所有變量通過(guò)”;
4.LSTM中主要有是三個(gè)“門(mén)”結(jié)構(gòu)來(lái)控制“細(xì)胞狀態(tài)”。
5.3.3 三個(gè)“門(mén)”?
下面對(duì)LSTM的三個(gè)“門(mén)”進(jìn)行延伸:
1.第一個(gè)“門(mén)”也叫“忘記門(mén)”,它決定了從“細(xì)胞狀態(tài)”中丟棄什么信息;比如在語(yǔ)言模型中,細(xì)胞狀態(tài)可能包含了性別信息,當(dāng)我們看到新的名詞后,就可以考慮忘記掉舊的數(shù)據(jù)信息;
2.第二個(gè)門(mén)也叫“信息增加門(mén)”,它決定了放什么新的信息到“細(xì)胞狀態(tài)”中去,其中Sigmoid層決定什么值需要更新;Tanh層創(chuàng)建一個(gè)新的候選向量,主要都是為了進(jìn)行狀態(tài)更新做準(zhǔn)備。
3.第三個(gè)“門(mén)”就是基于“細(xì)胞狀態(tài)”得到輸出,經(jīng)過(guò)第一個(gè)“門(mén)”和第二個(gè)“門(mén)”后,可以缺東傳遞信息的刪除和增加,也就可以進(jìn)行“細(xì)胞狀態(tài)”的更新,第三個(gè)“門(mén)”首先運(yùn)行一個(gè)Sigmoid層來(lái)確定細(xì)胞狀態(tài)的哪個(gè)部分被輸出,然后再使用tanh處理細(xì)胞狀態(tài)得到-1到1之間的值,再將它與sigmoid門(mén)的輸出相乘,輸出過(guò)程確定了輸出的部分。
三個(gè)“門(mén)”的部分圖分別如下所示:
5.3.4 LSTM結(jié)構(gòu)改造
對(duì)于上述的LSTM結(jié)構(gòu),也有針對(duì)其中的某些部分進(jìn)行改造,其中例如有在第二個(gè)“門(mén)”之前增加“配額phone connections”層,從而使得“門(mén)”層也接受細(xì)胞狀態(tài)的輸入;還有通過(guò)耦合忘記門(mén)和更新輸入門(mén),不在單獨(dú)考慮忘記什么信息、增加什么信息,而是放在一起進(jìn)行考慮。
在對(duì)LSTM結(jié)構(gòu)進(jìn)行設(shè)計(jì)改造中,相對(duì)比較出眾的就是2014年提出的一個(gè)結(jié)構(gòu),如下圖所示,主要區(qū)別在于以下幾點(diǎn):
1.該結(jié)構(gòu)將忘記門(mén)和輸入門(mén)合并成為一個(gè)單一的更新門(mén),也就是將忘記的信息和輸入的信息一并進(jìn)行考慮;
2.合并了數(shù)據(jù)單元狀態(tài)與隱藏狀態(tài);
3.它的結(jié)構(gòu)比LSTM的結(jié)構(gòu)更為簡(jiǎn)單。
6 總結(jié)與補(bǔ)充
6.1 總結(jié)
深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)在目前主要運(yùn)用場(chǎng)景為圖片識(shí)別、文本識(shí)別、游戲、語(yǔ)言識(shí)別等。其中的一些主要算法在上面也已經(jīng)進(jìn)行了闡述。除此之外還有一些輔助算法如極大極小值算法。對(duì)于這一塊內(nèi)容我將在下文提到。因此在學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)這一塊的時(shí)候,一定要分類去理解、分情況去討論,結(jié)合實(shí)際的運(yùn)用場(chǎng)景功能來(lái)完成神經(jīng)網(wǎng)絡(luò)模型的選擇與訓(xùn)練,從而達(dá)到最好的輸出效果。關(guān)于CNN和RNN的一些擴(kuò)展,其中包括Fast R-CNN(快速卷積)和R-FCN(基于區(qū)域的全卷積)這些內(nèi)容和結(jié)構(gòu),有興趣的讀者可以自行了解下,實(shí)際運(yùn)用的場(chǎng)景并不多。
6.2 補(bǔ)充
對(duì)于運(yùn)用神經(jīng)網(wǎng)絡(luò)知識(shí)這一塊的深度學(xué)習(xí)領(lǐng)域,還有額外的一些需要了解的知識(shí)內(nèi)容,例如遷移學(xué)習(xí)和極大極小值算法等。在這里我將對(duì)這些進(jìn)行一個(gè)補(bǔ)充,僅僅作為一個(gè)引子,來(lái)激發(fā)讀者更多的探討興趣。
6.2.1 遷移學(xué)習(xí)
遷移學(xué)習(xí)就是一個(gè)算法思想、一個(gè)算法訓(xùn)練方式,一般的深度學(xué)習(xí)算法都會(huì)要求我們的訓(xùn)練數(shù)據(jù)集中數(shù)據(jù)標(biāo)注數(shù)據(jù)比較多,但是在實(shí)際應(yīng)用中,有很多場(chǎng)景標(biāo)注的數(shù)據(jù)是比較少的。因此使用比較少的數(shù)據(jù)來(lái)進(jìn)行訓(xùn)練而達(dá)到跟之前一樣很好的效果是非常困難的。而遷移學(xué)習(xí)就是一個(gè)解決這一類問(wèn)題的算法思想,它是指用基于很少標(biāo)注的數(shù)據(jù)集進(jìn)行高質(zhì)量的模型訓(xùn)練。在目前運(yùn)用場(chǎng)景中,使用遷移學(xué)習(xí)的主要是在圖片檢測(cè)或者標(biāo)注這一塊。
6.2.2 極大極小值算法
極大極小值算法(MiniMax)是一種找出失敗的最大可能性中的最小值的算法,也就是盡量是對(duì)手的最大收益最小化。這個(gè)算法通常是通過(guò)遞歸的形式實(shí)現(xiàn),常用語(yǔ)棋類或者競(jìng)技較量類的游戲程序中。
該算法同時(shí)也就是一個(gè)零和博弈,也就是使得雙方的輸贏總和為0,即一方要在可選的條件下選擇出對(duì)其優(yōu)勢(shì)最大化的方法,而另外一方也需要選擇出令對(duì)手優(yōu)勢(shì)最小化的一個(gè)方法。簡(jiǎn)而言之,博弈中有人贏錢(qián),就得有人輸錢(qián),輸?shù)腻X(qián)數(shù)是與贏的錢(qián)數(shù)相等。但是在這算法過(guò)程中,因?yàn)橛玫降氖沁f歸操作,所以算法的層級(jí)深度會(huì)非常深,學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu)的都知道,遞歸算法雖然書(shū)寫(xiě)代碼簡(jiǎn)便,但是其時(shí)間復(fù)雜度較高,甚至?xí)萑胨姥h(huán)而宕機(jī),因此在使用極大極小值算法中就有可能對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化,盡量降低神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)的時(shí)間復(fù)雜度。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】