您的位置:首页 > 其它

CNN与句子分类之动态池化方法DCNN--模型介绍篇

2017-03-28 17:44 387 查看
本文是针对“A Convolutional Neural Network for Modelling Sentences”论文的阅读笔记和代码实现。这片论文的主要贡献在于其提出了一种动态pooling的方法。传统卷积神经网络中所用到的pooling方法一般是max-pooling,且pooling的size是固定不变的。本文通过k-max-pooling的方法可以在高层获取句子中位置较远的词语之间的联系。其整体思路如下图所示:



下面我们介绍一下论文所提出的模型,模型主要包含了per-dim的卷积层、folding层和k-max的pooling层。per-dim卷积层和前面一篇博客中介绍的是一样的,针对embed_size的每个维度分别进行卷积。folding层就是简单的将相邻的两个dim的值进行求和,从而实现维度的降低。k-max pooling层是选出最大的k个值而不是向传统的pooling层那样仅选出最大值。其模型架构如下图所示:



卷积层

这里使用的是per-dim卷积核,其作用如上图中的红色方框所示,不再进行过多介绍。不过需要注意的是,本文中的卷积方式是“宽卷积”。所谓宽卷积指的是在卷积过程中对输入的边缘进行PADDING补零。这样得到的输出会比输入的尺寸更大,而不会使原始的边缘信息丢失。宽卷积的输出长度为l+m-1。而窄卷积的输出长度为l-m+1。宽卷积的示意图如下所示:



folding层

折叠操作,该层不会增加参数数量,简单的将两个维度进行求和,使输入在embed_size维度上减半,论文中还提到这样做的好处是可以再全连接层之前就考虑输入的行与行之间的关联。如上图中的黄色框作用所示。

动态k-max pooling层

本层的作用是将卷积的输出结果在句长的维度上进行pooling,取出其最大的k个值且保留其相对位置关系。论文中提到这种位置关系并没有实际意义但还是这么做了==,作用如上图中的绿色方框所示。且k的值是动态选取的。选取公式如下所示:



其中k_top是指顶层所选取的k值,L表示总的卷积层数,l表示当前层数,s表示当前层在句子长度维度上的大小。有了这几个参数我们就能确定每层所对应的k值,从而实现k-max pooling。

至此,我们就把论文的主要模型架构介绍完毕了。其他就是一些简单的全连接层等,不再进行介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: