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