NLP中CNN模型常見的Pooling操作方法及其典型網(wǎng)絡(luò)結(jié)構(gòu)
CNN是目前自然語言處理中和RNN并駕齊驅(qū)的兩種最常見的深度學(xué)習(xí)模型。圖1展示了在NLP任務(wù)中使用CNN模型的典型網(wǎng)絡(luò)結(jié)構(gòu)。一般而言,輸入的字或者詞用Word Embedding的方式表達(dá),這樣本來一維的文本信息輸入就轉(zhuǎn)換成了二維的輸入結(jié)構(gòu),假設(shè)輸入X包含m個(gè)字符,而每個(gè)字符的Word Embedding的長度為d,那么輸入就是m*d的二維向量。
圖1 自然語言處理中CNN模型典型網(wǎng)絡(luò)結(jié)構(gòu)
這里可以看出,因?yàn)镹LP中的句子長度是不同的,所以CNN的輸入矩陣大小是不確定的,這取決于m的大小是多少。卷積層本質(zhì)上是個(gè)特征抽取層,可以設(shè)定超參數(shù)F來指定設(shè)立多少個(gè)特征抽取器(Filter),對(duì)于某個(gè)Filter來說,可以想象有一個(gè)k*d大小的移動(dòng)窗口從輸入矩陣的第一個(gè)字開始不斷往后移動(dòng),其中k是Filter指定的窗口大小,d是Word Embedding長度。對(duì)于某個(gè)時(shí)刻的窗口,通過神經(jīng)網(wǎng)絡(luò)的非線性變換,將這個(gè)窗口內(nèi)的輸入值轉(zhuǎn)換為某個(gè)特征值,隨著窗口不斷往后移動(dòng),這個(gè)Filter對(duì)應(yīng)的特征值不斷產(chǎn)生,形成這個(gè)Filter的特征向量。這就是卷積層抽取特征的過程。每個(gè)Filter都如此操作,形成了不同的特征抽取器。Pooling 層則對(duì)Filter的特征進(jìn)行降維操作,形成最終的特征。一般在Pooling層之后連接全聯(lián)接層神經(jīng)網(wǎng)絡(luò),形成最后的分類過程。
可見,卷積和Pooling是CNN中最重要的兩個(gè)步驟。下面我們重點(diǎn)介紹NLP中CNN模型常見的Pooling操作方法。
|CNN中的Max Pooling Over TIme操作MaxPooling Over TIme是NLP中CNN模型中最常見的一種下采樣操作。意思是對(duì)于某個(gè)Filter抽取到若干特征值,只取其中得分最大的那個(gè)值作為Pooling層保留值,其它特征值全部拋棄,值最大代表只保留這些特征中最強(qiáng)的,而拋棄其它弱的此類特征。
CNN中采用Max Pooling操作有幾個(gè)好處:首先,這個(gè)操作可以保證特征的位置與旋轉(zhuǎn)不變性,因?yàn)椴徽撨@個(gè)強(qiáng)特征在哪個(gè)位置出現(xiàn),都會(huì)不考慮其出現(xiàn)位置而能把它提出來。對(duì)于圖像處理來說這種位置與旋轉(zhuǎn)不變性是很好的特性,但是對(duì)于NLP來說,這個(gè)特性其實(shí)并不一定是好事,因?yàn)樵诤芏郚LP的應(yīng)用場合,特征的出現(xiàn)位置信息是很重要的,比如主語出現(xiàn)位置一般在句子頭,賓語一般出現(xiàn)在句子尾等等,這些位置信息其實(shí)有時(shí)候?qū)τ诜诸惾蝿?wù)來說還是很重要的,但是Max Pooling 基本把這些信息拋掉了。
其次,MaxPooling能減少模型參數(shù)數(shù)量,有利于減少模型過擬合問題。因?yàn)榻?jīng)過Pooling操作后,往往把2D或者1D的數(shù)組轉(zhuǎn)換為單一數(shù)值,這樣對(duì)于后續(xù)的ConvoluTIon層或者全聯(lián)接隱層來說無疑單個(gè)Filter的參數(shù)或者隱層神經(jīng)元個(gè)數(shù)就減少了。
再者,對(duì)于NLP任務(wù)來說,Max Pooling有個(gè)額外的好處;在此處,可以把變長的輸入X整理成固定長度的輸入。因?yàn)镃NN最后往往會(huì)接全聯(lián)接層,而其神經(jīng)元個(gè)數(shù)是需要事先定好的,如果輸入是不定長的那么很難設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)。前文說過,CNN模型的輸入X長度是不確定的,而通過Pooling 操作,每個(gè)Filter固定取1個(gè)值,那么有多少個(gè)Filter,Pooling層就有多少個(gè)神經(jīng)元,這樣就可以把全聯(lián)接層神經(jīng)元個(gè)數(shù)固定住(如圖2所示),這個(gè)優(yōu)點(diǎn)也是非常重要的。
圖2. Pooling層神經(jīng)元個(gè)數(shù)等于Filters個(gè)數(shù)
但是,CNN模型采取MaxPooling Over TIme也有一些值得注意的缺點(diǎn):首先就如上所述,特征的位置信息在這一步驟完全丟失。在卷積層其實(shí)是保留了特征的位置信息的,但是通過取唯一的最大值,現(xiàn)在在Pooling層只知道這個(gè)最大值是多少,但是其出現(xiàn)位置信息并沒有保留;另外一個(gè)明顯的缺點(diǎn)是:有時(shí)候有些強(qiáng)特征會(huì)出現(xiàn)多次,比如我們常見的TF.IDF公式,TF就是指某個(gè)特征出現(xiàn)的次數(shù),出現(xiàn)次數(shù)越多說明這個(gè)特征越強(qiáng),但是因?yàn)镸ax Pooling只保留一個(gè)最大值,所以即使某個(gè)特征出現(xiàn)多次,現(xiàn)在也只能看到一次,就是說同一特征的強(qiáng)度信息丟失了。這是Max Pooling Over Time典型的兩個(gè)缺點(diǎn)。
其實(shí),我們常說“危機(jī)危機(jī)”,對(duì)這個(gè)詞匯樂觀的解讀是“危險(xiǎn)就是機(jī)遇”。同理,發(fā)現(xiàn)模型的缺點(diǎn)是個(gè)好事情,因?yàn)閯?chuàng)新往往就是通過改進(jìn)模型的缺點(diǎn)而引發(fā)出來的。那么怎么改進(jìn)Pooling層的機(jī)制能夠緩解上述問題呢?下面兩個(gè)常見的改進(jìn)Pooling機(jī)制就是干這個(gè)事情的。
|K-Max Pooling