1. 程式人生 > >《Kalchbrenner N, Grefenstette E, Blunsom P. A convolutional neural network for modelling sentences》

《Kalchbrenner N, Grefenstette E, Blunsom P. A convolutional neural network for modelling sentences》

概率分布 通過 AD 最小 當前 最大化 gradient function thml

Kalchbrenner’s Paper

Kal的這篇文章引用次數較高,他提出了一種名為DCNN(Dynamic Convolutional Neural Network)的網絡模型,在上一篇(Kim’s Paper)中的實驗結果部分也驗證了這種模型的有效性。這個模型的精妙之處在於Pooling的方式,使用了一種稱為動態Pooling的方法。

下圖是這個模型對句子語義建模的過程,可以看到底層通過組合鄰近的詞語信息,逐步向上傳遞,上層則又組合新的Phrase信息,從而使得句子中即使相離較遠的詞語也有交互行為(或者某種語義聯系)。從直觀上來看,這個模型能夠通過詞語的組合,提取出句子中重要的語義信息(通過Pooling),某種意義上來說,層次結構的feature graph

的作用類似於一棵語法解析樹。

技術分享圖片

DCNN能夠處理可變長度的輸入,網絡中包含兩種類型的層,分別是一維的卷積層動態k-max的池化層(Dynamic k-max pooling)。其中,動態k-max池化是最大化池化更一般的形式。之前LeCun將CNN的池化操作定義為一種非線性的抽樣方式,返回一堆數中的最大值,原話如下:

The max pooling operator is a non-linear subsampling function that returns the maximum of a set of values (LuCun et al., 1998).

而文中的k-max pooling方式的一般化體現在:

  • pooling的結果不是返回一個最大值,而是返回k組最大值,這些最大值是原輸入的一個子序列;
  • pooling中的參數k可以是一個動態函數,具體的值依賴於輸入或者網絡的其他參數;

模型結構及原理

DCNN的網絡結構如下圖:

技術分享圖片

網絡中的卷積層使用了一種稱之為寬卷積(Wide Convolution)的方式,緊接著是動態的k-max池化層。中間卷積層的輸出即Feature Map的大小會根據輸入句子的長度而變化。下面講解一下這些操作的具體細節:

1. 寬卷積

相比於傳統的卷積操作,寬卷積的輸出的Feature Map的寬度(width)會更寬,原因是卷積窗口並不需要覆蓋所有的輸入值,也可以是部分輸入值(可以認為此時其余的輸入值為0,即填充0)。如下圖所示:

技術分享圖片

圖中的右圖即表示寬卷積的計算過程,當計算第一個節點即s1s1時,可以假使s1s1節點前面有四個輸入值為0的節點參與卷積(卷積窗口為5)。明顯看出,狹義上的卷積輸出結果是寬卷積輸出結果的一個子集。

2. k-max池化

給出數學形式化的表述是,給定一個kk值,和一個序列pRpp∈Rp(其中pkp≥k),k-max pooling選擇了序列pp中的前kk個最大值,這些最大值保留原來序列的次序(實際上是原序列的一個子序列)。

k-max pooling的好處在於,既提取除了句子中的較重要信息(不止一個),同時保留了它們的次序信息(相對位置)。同時,由於應用在最後的卷積層上只需要提取出kk個值,所以這種方法允許不同長度的輸入(輸入的長度應該要大於kk)。然而,對於中間的卷積層而言,池化的參數kk不是固定的,具體的選擇方法見下面的介紹。

3. 動態k-max池化

動態k-max池化操作,其中的kk是輸入句子長度網絡深度兩個參數的函數,具體如下:

Kl=max(ktop,?L?lLs?)Kl=max(ktop,?L?lLs?)

其中ll表示當前卷積的層數(即第幾個卷積層),LL是網絡中總共卷積層的層數;ktopktop為最頂層的卷積層pooling對應的kk值,是一個固定的值。舉個例子,例如網絡中有三個卷積層,ktop=3ktop=3,輸入的句子長度為18;那麽,對於第一層卷積層下面的pooling參數k1=12k1=12,而第二層卷積層對於的為k2=6k2=6,而k3=ktop=3k3=ktop=3。

動態k-max池化的意義在於,從不同長度的句子中提取出相應數量的語義特征信息,以保證後續的卷積層的統一性。

4. 非線性特征函數

pooling層與下一個卷積層之間,是通過與一些權值參數相乘後,加上某個偏置參數而來的,這與傳統的CNN模型是一樣的。

5. 多個Feature Map

和傳統的CNN一樣,會提出多個Feature Map以保證提取特征的多樣性。

6. 折疊操作(Folding)

之前的寬卷積是在輸入矩陣d×sd×s中的每一行內進行計算操作,其中dd是word vector的維數,ss是輸入句子的詞語數量。而Folding操作則是考慮相鄰的兩行之間的某種聯系,方式也很簡單,就是將兩行的vector相加;該操作沒有增加參數數量,但是提前(在最後的全連接層之前)考慮了特征矩陣中行與行之間的某種關聯。

模型的特點

  • 保留了句子中詞序信息和詞語之間的相對位置;
  • 寬卷積的結果是傳統卷積的一個擴展,某種意義上,也是n-gram的一個擴展;
  • 模型不需要任何的先驗知識,例如句法依存樹等,並且模型考慮了句子中相隔較遠的詞語之間的語義信息;

實驗部分

1. 模型訓練及參數

  • 輸出層是一個類別概率分布(即softmax),與倒數第二層全連接;
  • 代價函數為交叉熵,訓練目標是最小化代價函數;
  • L2正則化;
  • 優化方法:mini-batch + gradient-based (使用Adagrad update rule, Duchi et al., 2011)

2. 實驗結果

在三個數據集上進行了實驗,分別是(1)電影評論數據集上的情感識別,(2)TREC問題分類,以及(3)Twitter數據集上的情感識別。結果如下圖:

技術分享圖片

技術分享圖片

技術分享圖片

可以看出,DCNN的性能非常好,幾乎不遜色於傳統的模型;而且,DCNN的好處在於不需要任何的先驗信息輸入,也不需要構造非常復雜的人工特征。

《Kalchbrenner N, Grefenstette E, Blunsom P. A convolutional neural network for modelling sentences》