1. 程式人生 > >CNN與句子分類之動態池化方法DCNN--模型介紹篇

CNN與句子分類之動態池化方法DCNN--模型介紹篇

本文是針對“A Convolutional Neural Network for Modelling Sentences”論文的閱讀筆記和程式碼實現。這片論文的主要貢獻在於其提出了一種動態pooling的方法。傳統卷積神經網路中所用到的pooling方法一般是max-pooling,且pooling的size是固定不變的。本文通過k-max-pooling的方法可以在高層獲取句子中位置較遠的詞語之間的聯絡。其整體思路如下圖所示:
這裡寫圖片描述
下面我們介紹一下論文所提出的模型,模型主要包含了per-dim的卷積層、folding層和k-max的pooling層。per-dim卷積層和前面一篇部落格中介紹的是一樣的,針對embed_size的每個維度分別進行卷積。folding層就是簡單的將相鄰的兩個dim的值進行求和,從而實現維度的降低。k-max pooling層是選出最大的k個值而不是向傳統的pooling層那樣僅選出最大值。其模型架構如下圖所示:
這裡寫圖片描述

卷積層

這裡使用的是per-dim卷積核,其作用如上圖中的紅色方框所示,不再進行過多介紹。不過需要注意的是,本文中的卷積方式是“寬卷積”。所謂寬卷積指的是在卷積過程中對輸入的邊緣進行PADDING補零。這樣得到的輸出會比輸入的尺寸更大,而不會使原始的邊緣資訊丟失。寬卷積的輸出長度為l+m-1。而窄卷積的輸出長度為l-m+1。寬卷積的示意圖如下所示:
這裡寫圖片描述

folding層

摺疊操作,該層不會增加引數數量,簡單的將兩個維度進行求和,使輸入在embed_size維度上減半,論文中還提到這樣做的好處是可以再全連線層之前就考慮輸入的行與行之間的關聯。如上圖中的黃色框作用所示。

動態k-max pooling層

本層的作用是將卷積的輸出結果在句長的維度上進行pooling,取出其最大的k個值且保留其相對位置關係。論文中提到這種位置關係並沒有實際意義但還是這麼做了==,作用如上圖中的綠色方框所示。且k的值是動態選取的。選取公式如下所示:
這裡寫圖片描述
其中k_top是指頂層所選取的k值,L表示總的卷積層數,l表示當前層數,s表示當前層在句子長度維度上的大小。有了這幾個引數我們就能確定每層所對應的k值,從而實現k-max pooling。

至此,我們就把論文的主要模型架構介紹完畢了。其他就是一些簡單的全連線層等,不再進行介紹。