【論文閱讀】對CNN進行序列分類的理解或者說是使用指南

論文:A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional
Neural Networks for Sentence Classification

2016年的論文,中國人的論文,作者寫得很認真,每次實驗的都非常詳細(如交叉驗證,實驗多次等),這篇博客略去了對實驗細節的介紹,只闡述結果。

Abstract

近年來,CNN已被證明可用於序列分類,並且能獲得很好的效果(strong performance)。但要真正在實踐中,使用CNN進行序列分類,還需要知道CNN的各項參數(如卷積核的大小和個數)對序列分類的影響,方便調參。

作者基於一層CNN構建序列分類模型,在9個數據集上進行了大量實驗,包括與SVM和邏輯迴歸的比較,也包括CNN不同參數的實驗。

本文的貢獻在於,對使用CNN做序列分類給出了很多實用建議,也在實驗中論證了CNN分類序列的合理性。

Introduction

目前,序列分類的CNN模型的構造如下圖所示(來自論文Convolutional Neural Networks for Sentence Classification):
CNN model for sentence classification

  • 輸入序列是I like this movie very much !,長爲7,每個token都被embedding成5維向量,因此模型的輸入是7x5的矩陣。
  • 模型的第一層是卷積層,卷積層共有6個卷積核: k1, k2, k3, k4, k5, k6,它們的大小分別是4x5, 3x5, 2x5。
  • 那麼,輸入經過卷積,再經過激活函數,獲得6個feature map,大小分別爲4、4、5、5、6、6。
  • 6個feature map經max pooling,得6個1維向量,拼接爲6維的feature向量
  • 最後經softmax,預測對應類別。

顯然,這個模型的超參數太多了,我們需要確定輸入數據的embedding的維度、卷積核大小、卷積核個數、激活函數、pooling策略和正則化策略(如dropout和L2)。

Experiment

實驗1——SVM

使用SVM作爲baseline,實驗結果如下圖所示:

  • 第一列是9個dataset。
    • 第二列,bowSVM表示sentence的嵌入是bow嵌入,words的組合方式是uni-gram和bi-gram混合。對於sentence=I like this movie very much !,uni-gram list=[I, like, this, movie, very, much, !], bi-gram list=[I_like, like_this, this_movie, movie_very, very_much, much_!],以上兩個list混合構成總的bag of words。模型是linear kernel的SVM。
  • 第三列,wvSVM表示sentence的嵌入方法是word2vec,嵌入後每個token的維度是300維,模型是RBF kernel的SVM。
  • 第四列,bowwvSVM表示sentence的嵌入方法是word2vec和bow的concat,模型是linear kernel的SVM。

爲什麼使用不同kernel的SVM呢?作者也沒有說,我也不知道。
SVM result

實驗二——CNN base line

CNN的超參數設置如下圖所示,比較容易看懂,就不再詳述了。使用CNN模型前,對sentence使用的嵌入方法是word2vec。
CNN baseline result
下圖是CNN模型在多個數據集上的實驗結果。

  • 不同顏色的曲線代表不同的數據集,曲線的意義是:每個數據集上做了100次實驗,實驗結果的分佈圖。
  • Non-static word2vec表示,使用預訓練的word2vec,然後在目標數據集上訓練CNN模型時,也更新word2vec中embedding layer的參數。
  • static word2vec表示,使用預訓練的word2vec,但是不更新其embedding layer的參數。

從圖中可以看出,在目標數據集上再次更新word2vec的參數,在MR、CR、SST-2上取得更好的效果,但在Subj和TREC上效果反而變差了。但是爲什麼會這樣,作者沒有解釋。

Density curve of accuracy using static and non-static word2vec-CNN

實驗3——embedding方法對CNN的影響

使用bow嵌入的one-hot向量效果很差,而使用word2vec和Glove嵌入方法的效果如下圖所示:

  • 第一列表示數據集
  • 第二列是使用non-static的word2vec,嵌入空間維度是300
  • 第三列是使用non-static的Glove,嵌入空間維度是300
  • 第四列是使用non-static的word2vec和Glove嵌入向量的concat,維度是600
  • 表中每一個元素的值:平均值(最小值,最大值)

從圖中可以看出,word2vec和Glove作爲詞嵌入方法對CNN的影響不大。
在這裏插入圖片描述

實驗4——卷積核大小對CNN的影響

下圖顯示了卷積核大小對CNN的影響,因爲這裏只是爲了觀察卷積核大小對最後結果的影響,爲控制變量,只是使用了一種卷積核,在上文對網絡的介紹中有2、3、4共三種卷積核:

  • 圖中每個曲線代表一個數據集
  • 橫座標表示卷積核大小,縱座標表示準確率。準確率是以每個數據集在卷積核size=3的值爲參考的相對值。

從圖中可以看出,紅線MR數據集的最佳卷積核大小是7,黑線TREC數據集的最佳卷積核大小是3。
Effect of the region size
下面兩個圖是選擇卷積核大小和組合的最優解。第一個圖的數據集是MR,第二個圖的數據集是TREC。可以看出,卷積核大小都是上圖中的7和3的值或者近似值。因此,作者在本章節的最後建議,選擇卷積核的大小和組合時,可以先選擇最佳的卷積核大小,然後再實驗最佳卷積核大小或者其近似值的組合。

In light of these observations, we believe it ad- visable to first perform a coarse line-search over a single filter region size to find the ‘best’ size for the dataset under consideration, and then explore the combination of several region sizes nearby this single best size, including combining both differ- ent region sizes and copies of the optimal sizes.

Effect of filter region size with several region sizes on the MR dataset
Effect of filter region size with several region sizes using non-static word2vec-CNN on TREC dataset

實驗5——卷積核個數對CNN的影響

下圖顯示了卷積核個數對CNN的影響。一般而言,卷積核個數越大效果越好,不過在實際選擇中也要考慮計算性能的影響。
Effect of the number of feature maps

實驗6——激活函數的影響

從下圖可以看出,不同激活函數的區別也不明顯,另Iden表示identity,即沒有激活函數。
Performance of different activation functions

實驗7——pooling策略的影響

1-max pooling > k-max pooling > average pooling

實驗8——正則項的影響

當卷積核個數很多的時候(如500以上),正則項有用,其他時候可以不加正則。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章