A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification——Ye Zhang,Byron C. Wallace
这篇paper的主要工作是对“Convolutional Naural Networks for Sentence Classification”这篇论文的模型进行了各种各样的对比试验,进而得到了一些关于超参数的设置经验。
文中认为,在CNN模型中,超参数主要有词向量,Region Size的大小,Feature Map的数量,激活函数的选择,Pooling的方法,正则化的影响。论文前面几章对实验内容和结果进行了详细介绍,在9个数据集上基于Kim Y的模型做了大量的调参实验,得出AUC进行比较,最后在第五章给出结论如下:
Summary of Main Empirical Findings
- 由于模型训练过程中的随机性因素,如随机初始化的权重参数,mini-batch,随机梯度下降优化算法等,造成模型在数据集上的结果有一定的浮动,如准确率(accuracy)能达到1.5%的浮动,而AUC则有3.4%的浮动;
- 词向量是使用word2vec还是GloVe,对实验结果有一定的影响,具体哪个更好依赖于任务本身;
- Filter的大小对模型性能有较大的影响,并且Filter的参数应该是可以更新的;
- Feature Map的数量也有一定影响,但是需要兼顾模型的训练效率;
- 1-max pooling的方式已经足够好了,相比于其他的pooling方式而言;
- 正则化的作用微乎其微。
Specific advice to practitioners
- 使用non-static版本的word2vec 词向量或者GloVe要比单纯的one-hot representation取得的效果好得多(虽然one-hot编码方式在文本分类任务中取得了比较好的效果)。
- 为了找到最优的过滤器大小(Filter Region Size),可以使用线性搜索的方法。通常过滤器的大小范围在1-10之间,当然如果训练集中的句子长度较大(100+),可以考虑使用较大的ws以获取上下文关系。对不同尺寸ws的窗口进行结合会对结果产生影响。当把与最优ws相近的ws结合时会提升效果,但是如果将距离最优ws较远的ws相结合时会损害分类性能。一般取为3-5。所以刚开始,我们可以只用一个filter,调节Region Size来比对各自的效果,来看看那种size有最好的表现,然后在这个范围在调节不同Region的匹配。
- **卷积核数量**num_filters也对实验结果比较重要。最好不要超过600,超过600可能会导致过拟合。一般设为100-200。
- 可以尽量多尝试激活函数,实验发现ReLU和tanh两种激活函数表现较佳;
- 使用简单的1-max pooling就已经足够了,可以没必要设置太复杂的pooling方式,mean或者k-max pooling效果都不太好。
- 当发现增加Feature Map的数量使得模型的性能下降时,可以考虑增大正则化的力度,如调高dropout的概率。l2正则化效益很小,所以这里建议设置一个比较大的L2 norm constrain,相比而言,dropout在神经网络中有着广泛的使用和很好的效果,dropout一般设为0.5。
- 为了检验模型的性能水平,多次反复的交叉验证是必要的,这可以确保模型的高性能并不是偶然。
论文附录中还附上了各种调参结果,感兴趣的可以前往阅读之。