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

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

                                                           1 天然語言處理中CNN模型典型網絡結構數組

 

 

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

 

可見,卷積和PoolingCNN中最重要的兩個步驟。下面咱們重點介紹NLPCNN模型常見的Pooling操做方法。post

 

|CNN中的Max Pooling Over Time操做性能

 

MaxPooling Over TimeNLPCNN模型中最多見的一種下采樣操做。意思是對於某個Filter抽取到若干特徵值,只取其中得分最大的那個值做爲Pooling層保留值,其它特徵值所有拋棄,值最大表明只保留這些特徵中最強的,而拋棄其它弱的此類特徵。學習

 

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

 

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

 

 再者,對於NLP任務來講,Max Pooling有個額外的好處;在此處,能夠把變長的輸入X整理成固定長度的輸入。由於CNN最後每每會接全聯接層,而其神經元個數是須要事先定好的,若是輸入是不定長的那麼很難設計網絡結構。前文說過,CNN模型的輸入X長度是不肯定的,而經過Pooling 操做,每一個Filter固定取1個值,那麼有多少個FilterPooling層就有多少個神經元,這樣就能夠把全聯接層神經元個數固定住(如圖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 TimeConvolution層一系列特徵值中只取最強的那個值,那麼咱們思路能夠擴展一下,K-Max Pooling能夠取全部特徵值中得分在Top –K的值,並保留這些特徵值原始的前後順序(圖32-max Pooling的示意圖),就是說經過多保留一些特徵信息供後續階段使用。

                                  3 .2-max pooling

 

 

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

 

|Chunk-Max Pooling

 

Chunk-MaxPooling的思想是:把某個Filter對應的Convolution層的全部特徵向量進行分段,切割成若干段後,在每一個分段裏面各自取得一個最大特徵值,好比將某個Filter的特徵向量切成3Chunk,那麼就在每一個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策略,估計性能會有提高,好比上面舉的情感分類問題估計效果會有提高。

 

 

 

轉自:http://blog.csdn.net/malefactor/article/details/51078135(做者:張俊林)

相關文章
相關標籤/搜索