A Sensitivity Analysis of Convolutional Neural Networks for Sentence Classification
引言
Ye Zhang在2016年掛在arXiv上的論文,從名字大概可以看出來,這是一篇CNN調參指南。
概述
模型方面用的是單層CNN,主要是CNN用做文字分類方面的研究,模型結構如下所示:
上述模型來自Convolutional Neural Networks for Sentence Classification,詳細的介紹可以參考:博文
內容
Baseline Models
為了跟CNN模型進行對比,這裡用SVM做了幾個基線模型,如下:
其中,bowSVM是使用uni和bi-gram特徵和liner kernel,
wvSVM使用句子詞向量的平均值特徵和RBF-kernel,
bowwvSVM使用上述n-gram特徵的詞向量平均值特徵和RBF-kermel。
Base Configuration
以下用作研究驗證的模型,如果沒有特別說明,都用這些引數作為預設設定,
Word Vectors
使用上述基礎配置,更改詞向量進行訓練,這裡使用了word2vec和glove這兩種不同的分散式變數,均為300維,結果如下:
上述詞向量模型中,對於OOV的詞均使用隨機初始化的方式賦值。從結果來看,簡單將兩種不同詞向量拼接並沒有起到效果,而兩種不同的初始化方式並沒有很明顯的差距,建議對不同的任務嘗試不同的初始化方式進行選擇。
另外一個值得說的是,論文中嘗試了使用one-hot變數的方式進行測試,結果表現很差,從資料集的角度分析,one-hot初始化的方式比較適合大文字,因為在短文字one-hot相對而言會形成稀疏矩陣,影響模型整體表現。
Filter Size
Single filter
對於不同的filter,這裡只談論filter的高度h,即另一個維度與詞向量維度一致,這裡是100,對比不同的資料集如下:
上圖以filter size為3時作為基準,只使用一個filter,其中橫軸為filter size的大小,y軸為不同大小的filter相比size=3時的準確率百分比差值。
從中可以看到,對於每一個數據集都存在一個“最優的”filter大小,一般在1~10之間可以取到。
值得注意的是,對於文字長度比較長的資料集,如CR,最長的文字長度有105個字元,它的最優大小就在36~56之間,所以需要根據實際專案情況進行選區,對於長度越長的文字相對更大的filter表現會更好。
Multiple filter
這裡指的是組合使用不同大小的filter,對於每一個找到單個最優大小filter的資料集,可以考慮用多個大小相鄰的filter或者大小差距很大的filter進行對比,
從上圖中看到,使用多個大小相鄰的filter表現比單個filter要好,而使用大小差距較大的filter變現反而變差。
Feature Size
對於不同維度大小的詞向量這裡也做了驗證,因為filter其中一維預設是詞向量維度大小,這裡也可以認為是filter另一維度大小的分析,取維度區間{10, 50, 100, 200, 400, 600, 1000, 2000},如下:
以size=100為基準,其他大小相對基準的準確率百分比差為縱軸,由上圖可以看到,相對比較合理的維度大小範圍在100~600,但是需要注意的是,如果取得最優值的大小在邊界處,就得考慮繼續進行擴大範圍搜尋。
隨著維度大小的增加,相應的計算耗時也越來越長,所以需要進行權衡考慮。
Activation Function
啟用函式這裡測試了7種不同型別,
ReLU (as per the baseline configuration), hyperbolic tangent (tanh), Sigmoid function (Maas et al., 2013), SoftPlus function (Dugas et al., 2001), Cube function (Chen and Manning, 2014), and tanh cube function (Pei et al., 2015)
還有一種比較有趣的是,不適用任何啟用函式(Iden),最終結果表示 Iden, ReLU 和tanh是其中表現較好的三種,值得注意的是,iden在多層CNN中可能表現效果不會很好。
Pooling Strategy
pooling這裡使用了k-max pooling,其中k取值 {1, 5, 10, 15, 20}和average pooling,取值{3, 10, 20, 30},結果顯示1-max pooling表現相對較好。
Regularization
正則化部分使用了Dropout和l2 norm,如下所示:
從上述圖片可以看到,dropout部分當取值在0.1~0.5的時候,對整個系統能有一定的提升,雖然這個提升並不是特別明顯;而l2 norm則在整個過程並沒有實質性的幫助,反而出現了效果下降的現象。
考慮單層CNN的模型複雜度不高所以整體模型並沒有過擬合導致提升不明顯,或者分散式的詞向量已經達到了一定防止過擬合的效果。
所以在選擇正則化部分是,根據模型的複雜度進行選取,選擇在0.1~0.5範圍內的dropout,而l2 norm則選擇一個相應較大的值。
其他
1、更多詳細的資料可以參考原論文
2、A Sensitivity Analysis of Convolutional Neural Networks for Sentence Classification