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