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层那样仅选出最大值。其模型架构如下图所示:
其中k_top是指顶层所选取的k值,L表示总的卷积层数,l表示当前层数,s表示当前层在句子长度维度上的大小。有了这几个参数我们就能确定每层所对应的k值,从而实现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。
至此,我们就把论文的主要模型架构介绍完毕了。其他就是一些简单的全连接层等,不再进行介绍。
相关文章推荐
- CNN与句子分类之动态池化方法DCNN--TensorFlow实现篇
- 自然语言处理的CNN模型中几种常见的池化方法
- CNN在句子相似性建模的应用--模型介绍篇
- 字符级卷积神经网络(Char-CNN)实现文本分类--模型介绍与TensorFlow实现
- powerdesigner中动态修改物理模型实体的方法
- ecshop调用指定分类的文章的方法介绍
- UML动态模型图简单介绍
- 话题模型topic model的发展历史及典型方法介绍
- 动态模型及其求解介绍—上(转帖)
- ThinkPHP视图模型动态改变视图联表字段,因为D方法的伪单例而产生BUG的错误处理
- ASP.NET Web API教程 创建域模型的方法详细介绍
- 动态模型及其求解介绍—番外篇(转帖)
- hibernate学习日志二:动态模型方法映射
- 【转】动态模型及其求解介绍—中
- 【转】动态模型及其求解介绍—下
- 线程模型:动态的方法栈
- 通过金矿模型介绍动态规划
- zz 主要分类方法介绍
- UML动态模型图简单介绍
- 转: 主要分类方法介绍