自然語言處理中CNN模型幾種常見的Max Pooling操作

 

/* 版權聲明:可以任意轉載,轉載時請標明文章原始出處和作者信息 .*/

 

                                                     author: 張俊林

 

                                 (想更系統地學習深度學習知識?請參考:深度學習枕邊書

CNN是目前自然語言處理中和RNN並駕齊驅的兩種最常見的深度學習模型。圖1展示了在NLP任務中使用CNN模型的典型網絡結構。一般而言,輸入的字或者詞用Word Embedding的方式表達,這樣本來一維的文本信息輸入就轉換成了二維的輸入結構,假設輸入X包含m個字符,而每個字符的Word Embedding的長度爲d,那麼輸入就是m*d的二維向量。

                                                           1 自然語言處理中CNN模型典型網絡結構

 

 

這裏可以看出,因爲NLP中的句子長度是不同的,所以CNN的輸入矩陣大小是不確定的,這取決於m的大小是多少。卷積層本質上是個特徵抽取層,可以設定超參數F來指定設立多少個特徵抽取器(Filter),對於某個Filter來說,可以想象有一個k*d大小的移動窗口從輸入矩陣的第一個字開始不斷往後移動,其中k是Filter指定的窗口大小,d是Word Embedding長度。對於某個時刻的窗口,通過神經網絡的非線性變換,將這個窗口內的輸入值轉換爲某個特徵值,隨着窗口不斷往後移動,這個Filter對應的特徵值不斷產生,形成這個Filter的特徵向量。這就是卷積層抽取特徵的過程。每個Filter都如此操作,形成了不同的特徵抽取器。Pooling 層則對Filter的特徵進行降維操作,形成最終的特徵。一般在Pooling層之後連接全聯接層神經網絡,形成最後的分類過程。

 

可見,卷積和Pooling是CNN中最重要的兩個步驟。下面我們重點介紹NLP中CNN模型常見的Pooling操作方法。

 

|CNN中的Max Pooling Over Time操作

 

MaxPooling Over Time是NLP中CNN模型中最常見的一種下采樣操作。意思是對於某個Filter抽取到若干特徵值,只取其中得分最大的那個值作爲Pooling層保留值,其它特徵值全部拋棄,值最大代表只保留這些特徵中最強的,而拋棄其它弱的此類特徵。

 

CNN中採用Max Pooling操作有幾個好處:首先,這個操作可以保證特徵的位置與旋轉不變性,因爲不論這個強特徵在哪個位置出現,都會不考慮其出現位置而能把它提出來。對於圖像處理來說這種位置與旋轉不變性是很好的特性,但是對於NLP來說,這個特性其實並不一定是好事,因爲在很多NLP的應用場合,特徵的出現位置信息是很重要的,比如主語出現位置一般在句子頭,賓語一般出現在句子尾等等,這些位置信息其實有時候對於分類任務來說還是很重要的,但是Max Pooling 基本把這些信息拋掉了。

 

其次,MaxPooling能減少模型參數數量,有利於減少模型過擬合問題。因爲經過Pooling操作後,往往把2D或者1D的數組轉換爲單一數值,這樣對於後續的Convolution層或者全聯接隱層來說無疑單個Filter的參數或者隱層神經元個數就減少了。

 

 再者,對於NLP任務來說,Max Pooling有個額外的好處;在此處,可以把變長的輸入X整理成固定長度的輸入。因爲CNN最後往往會接全聯接層,而其神經元個數是需要事先定好的,如果輸入是不定長的那麼很難設計網絡結構。前文說過,CNN模型的輸入X長度是不確定的,而通過Pooling 操作,每個Filter固定取1個值,那麼有多少個Filter,Pooling層就有多少個神經元,這樣就可以把全聯接層神經元個數固定住(如圖2所示),這個優點也是非常重要的。

                                               2. Pooling層神經元個數等於Filters個數

 

 

但是,CNN模型採取MaxPooling Over Time也有一些值得注意的缺點:首先就如上所述,特徵的位置信息在這一步驟完全丟失。在卷積層其實是保留了特徵的位置信息的,但是通過取唯一的最大值,現在在Pooling層只知道這個最大值是多少,但是其出現位置信息並沒有保留;另外一個明顯的缺點是:有時候有些強特徵會出現多次,比如我們常見的TF.IDF公式,TF就是指某個特徵出現的次數,出現次數越多說明這個特徵越強,但是因爲Max Pooling只保留一個最大值,所以即使某個特徵出現多次,現在也只能看到一次,就是說同一特徵的強度信息丟失了。這是Max Pooling Over Time典型的兩個缺點。

 

其實,我們常說“危機危機”,對這個詞彙樂觀的解讀是“危險就是機遇”。同理,發現模型的缺點是個好事情,因爲創新往往就是通過改進模型的缺點而引發出來的。那麼怎麼改進Pooling層的機制能夠緩解上述問題呢?下面兩個常見的改進Pooling機制就是幹這個事情的。

 

 

|K-Max Pooling

 

K-MaxPooling的意思是:原先的Max Pooling Over Time從Convolution層一系列特徵值中只取最強的那個值,那麼我們思路可以擴展一下,K-Max Pooling可以取所有特徵值中得分在Top –K的值,並保留這些特徵值原始的先後順序(圖3是2-max Pooling的示意圖),就是說通過多保留一些特徵信息供後續階段使用。

                                  3 .2-max pooling

 

 

很明顯,K-Max Pooling可以表達同一類特徵出現多次的情形,即可以表達某類特徵的強度;另外,因爲這些Top K特徵值的相對順序得以保留,所以應該說其保留了部分位置信息,但是這種位置信息只是特徵間的相對順序,而非絕對位置信息。

 

|Chunk-Max Pooling

 

Chunk-MaxPooling的思想是:把某個Filter對應的Convolution層的所有特徵向量進行分段,切割成若干段後,在每個分段裏面各自取得一個最大特徵值,比如將某個Filter的特徵向量切成3個Chunk,那麼就在每個Chunk裏面取一個最大值,於是獲得3個特徵值。(如圖4所示,不同顏色代表不同分段)

                              4. Chunk-Max Pooling示意圖

 

 

乍一看Chunk-Max Pooling思路類似於K-Max Pooling,因爲它也是從Convolution層取出了K個特徵值,但是兩者的主要區別是:K-Max Pooling是一種全局取Top K特徵的操作方式,而Chunk-Max Pooling則是先分段,在分段內包含特徵數據裏面取最大值,所以其實是一種局部Top K的特徵抽取方式。

 

至於這個Chunk怎麼劃分,可以有不同的做法,比如可以事先設定好段落個數,這是一種靜態劃分Chunk的思路;也可以根據輸入的不同動態地劃分Chunk間的邊界位置,可以稱之爲動態Chunk-Max方法(這種稱謂是我隨手命名的,非正式稱謂,請注意)。

 

Chunk-Max Pooling很明顯也是保留了多個局部Max特徵值的相對順序信息,儘管並沒有保留絕對位置信息,但是因爲是先劃分Chunk再分別取Max值的,所以保留了比較粗粒度的模糊的位置信息;當然,如果多次出現強特徵,則也可以捕獲特徵強度。

 

Event Extraction via Dynamic Multi-Pooling Convolutional Neural Networks這篇論文提出的是一種ChunkPooling的變體,就是上面說的動態Chunk-Max Pooling的思路,實驗證明性能有提升。Local Translation Prediction with Global Sentence Representation 這篇論文也用實驗證明了靜態Chunk-Max性能相對MaxPooling Over Time方法在機器翻譯應用中對應用效果有提升。

 

如果思考一下,就會發現,如果分類所需要的關鍵特徵的位置信息很重要,那麼類似Chunk-Max Pooling這種能夠粗粒度保留位置信息的機制應該能夠對分類性能有一定程度的提升作用;但是對於很多分類問題,估計Max-Pooling over time就足夠了。

 

比如我們拿情感分類來說,估計用Chunk-max策略應該有幫助,因爲對於這種表達模式:

 

“Blablabla….表揚了你半天,BUT…..你本質上就是個渣”

 

與這種表達模式

 

“雖然說你是個渣,但是…..Blablabla…..歐巴我還是覺得你最好,因爲你最帥”

 

明顯位置信息對於判別整體情感傾向是有幫助作用的,所以引入位置信息應該有幫助。

 

所以,你分析下你手頭的問題,看看位置是不是重要特徵,如果是,那麼套用一下Chunk-Max策略,估計性能會有提升,比如上面舉的情感分類問題估計效果會有提升。

 

 

掃一掃關注微信號:“布洛卡區” ,深度學習在自然語言處理等智能應用的技術研討與科普公衆號

發佈了117 篇原創文章 · 獲贊 806 · 訪問量 149萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章