Convolutional Neural Networks for Sentence Classification(卷积神经网络用于句子分类)

本篇博文仅仅用于自己学习的笔记,若有错误欢迎指正。

参考:

论文:Convolutional Neural Networks for Sentence Classification

代码:https://github.com/dennybritz/cnn-text-classification-tf

Model(模型):

模型结构图:

Convolutional Neural Networks for Sentence Classification(卷积神经网络用于句子分类)

模型思路:

  • xiRkx_i∈R^k表示一个句子的第i个词的词向量;句子长度用n表示,对于长度不是n的进行相应的填充与截断;xi:n=x1x2.xnx_{i:n}=x_1⊕x_2⊕….⊕x_n表示一个句子⊕是串联操作,xi:i+jx_{i:i+j}就是xi,xi+1,,xi+j{x_i,x_{i+1},…,x_{i+j}};
  • 卷积操作的过滤器用wRhkw∈R^{hk},它被应用到一个大小为h个词的窗口上产生一个特征cic_i,例如:ci=f(wxi:i+h1)+bc_i=f(w*x_{i:i+h-1)+b}其中f是是一个非线性函数,过滤器作用到每个可能的窗口上(x1:h,x2:h+1,,xnh+1:n)(x_{1:h},x_{2:h+1},…,x_{n-h+1:n})产生特征序列c=(c1,c2,,cnh+1)c=(c_1,c_2,…,c_{n-h+1})再应用最大池化成到这个序列上:c^=max(c)\hat{c} =max⁡(c)它对应于每个特定过滤器,最大池化层也使得模型可以处理变长的句子。
  • 模型使用多个不同大小的过滤器来获取多个特征。这些特征组成了倒数第二层,并被传给了最后的全连接的softmax层。

模型的一个变种:

  • 模型的输入是静态不训练的二维句子向量([n,k])和可以被训练的二维句子向量([n,k])叠加形成的三维句子矩阵([n,k,2]).
  • 每个过滤器都作用到不可训练的[n,k]和可训练的[n,k]两个矩阵上, 再将他们加起来产生了cic_i即:
    ci=f(wx()i:i+h1+b)c_{i静}=f(w*x(静)_{i:i+h-1}+b)ci=f(wx()i:i+h1+b)c_{i动}=f(w*x(动)_{i:i+h-1}+b)ci=ci+cic_{i}=c_{i静}+c_{i动}

正则化:

  • 在倒数第二层应用dropout:

    • 我们从最后的全连接层的公式不再是:y=wz+by=w*z+b;而是y=w(zr)+by=w*(z◦r)+b。其中 z=[c1^,c2^,,cm^]z=[\hat{c_1 } ,\hat{c_2 },…,\hat{c_m }]是倒数第二层的输出即最大池化层的输出,卷积层有m个不同过滤器。 是逐点相乘运算,r是一个伯努利随机变量的masking向量并且p=1。在反向传播种梯度仅能通过没有被maked单元
    • 在测试时,我们将权重放缩p倍,即:w^=pw\hat{w}=p*w,我们使用这个权重并且不进行dropout来对没有见过的句子进行分类。
  • 我们对权重向量进行L2正则

    • 我们为权重向量w添加一个约束(w)2s|(|w|)|_2≤s,在梯度下降步骤之后,每当(w)2>s|(|w|)|_2>s,重新调整w使其满足上面约束条件。