Convolutional Neural Networks for Sentence Classification(卷积神经网络用于句子分类)
本篇博文仅仅用于自己学习的笔记,若有错误欢迎指正。
参考:
论文:Convolutional Neural Networks for Sentence Classification
代码:https://github.com/dennybritz/cnn-text-classification-tf
Model(模型):
模型结构图:
模型思路:
- 令表示一个句子的第i个词的词向量;句子长度用n表示,对于长度不是n的进行相应的填充与截断;表示一个句子⊕是串联操作,就是;
- 卷积操作的过滤器用,它被应用到一个大小为h个词的窗口上产生一个特征,例如:其中f是是一个非线性函数,过滤器作用到每个可能的窗口上产生特征序列再应用最大池化成到这个序列上:它对应于每个特定过滤器,最大池化层也使得模型可以处理变长的句子。
- 模型使用多个不同大小的过滤器来获取多个特征。这些特征组成了倒数第二层,并被传给了最后的全连接的softmax层。
模型的一个变种:
- 模型的输入是静态不训练的二维句子向量([n,k])和可以被训练的二维句子向量([n,k])叠加形成的三维句子矩阵([n,k,2]).
- 每个过滤器都作用到不可训练的[n,k]和可训练的[n,k]两个矩阵上, 再将他们加起来产生了即:
正则化:
-
在倒数第二层应用dropout:
- 我们从最后的全连接层的公式不再是:;而是。其中 是倒数第二层的输出即最大池化层的输出,卷积层有m个不同过滤器。 是逐点相乘运算,r是一个伯努利随机变量的masking向量并且p=1。在反向传播种梯度仅能通过没有被maked单元
- 在测试时,我们将权重放缩p倍,即:,我们使用这个权重并且不进行dropout来对没有见过的句子进行分类。
-
我们对权重向量进行L2正则
- 我们为权重向量w添加一个约束,在梯度下降步骤之后,每当,重新调整w使其满足上面约束条件。