《Kalchbrenner N, Grefenstette E, Blunsom P. A convolutional neural network for modelling sentences》
Kalchbrenner’s Paper
Kal的这篇文章引用次数较高,他提出了一种名为DCNN(Dynamic Convolutional Neural Network)的网络模型,在上一篇(Kim’s Paper)中的实验结果部分也验证了这种模型的有效性。这个模型的精妙之处在于Pooling的方式,使用了一种称为动态Pooling的方法。
下图是这个模型对句子语义建模的过程,可以看到底层通过组合邻近的词语信息,逐步向上传递,上层则又组合新的Phrase信息,从而使得句子中即使相离较远的词语也有交互行为(或者某种语义联系)。从直观上来看,这个模型能够通过词语的组合,提取出句子中重要的语义信息(通过Pooling),某种意义上来说,层次结构的feature graph的作用类似于一棵语法解析树。

DCNN能够处理可变长度的输入,网络中包含两种类型的层,分别是一维的卷积层和动态k-max的池化层(Dynamic k-max pooling)。其中,动态k-max池化是最大化池化更一般的形式。之前LeCun将CNN的池化操作定义为一种非线性的抽样方式,返回一堆数中的最大值,原话如下:
The max pooling operator is a non-linear subsampling function that returns the maximum of a set of values (LuCun et al., 1998).
而文中的k-max pooling方式的一般化体现在:
- pooling的结果不是返回一个最大值,而是返回k组最大值,这些最大值是原输入的一个子序列;
- pooling中的参数k可以是一个动态函数,具体的值依赖于输入或者网络的其他参数;
模型结构及原理
DCNN的网络结构如下图:

网络中的卷积层使用了一种称之为宽卷积(Wide Convolution)的方式,紧接着是动态的k-max池化层。中间卷积层的输出即Feature Map的大小会根据输入句子的长度而变化。下面讲解一下这些操作的具体细节:
1. 宽卷积
相比于传统的卷积操作,宽卷积的输出的Feature Map的宽度(width)会更宽,原因是卷积窗口并不需要覆盖所有的输入值,也可以是部分输入值(可以认为此时其余的输入值为0,即填充0)。如下图所示:

图中的右图即表示宽卷积的计算过程,当计算第一个节点即s1s1时,可以假使s1s1节点前面有四个输入值为0的节点参与卷积(卷积窗口为5)。明显看出,狭义上的卷积输出结果是宽卷积输出结果的一个子集。
2. k-max池化
给出数学形式化的表述是,给定一个kk值,和一个序列p∈Rpp∈Rp(其中p≥kp≥k),k-max pooling选择了序列pp中的前kk个最大值,这些最大值保留原来序列的次序(实际上是原序列的一个子序列)。
k-max pooling的好处在于,既提取除了句子中的较重要信息(不止一个),同时保留了它们的次序信息(相对位置)。同时,由于应用在最后的卷积层上只需要提取出kk个值,所以这种方法允许不同长度的输入(输入的长度应该要大于kk)。然而,对于中间的卷积层而言,池化的参数kk不是固定的,具体的选择方法见下面的介绍。
3. 动态k-max池化
动态k-max池化操作,其中的kk是输入句子长度和网络深度两个参数的函数,具体如下:
其中ll表示当前卷积的层数(即第几个卷积层),LL是网络中总共卷积层的层数;ktopktop为最顶层的卷积层pooling对应的kk值,是一个固定的值。举个例子,例如网络中有三个卷积层,ktop=3ktop=3,输入的句子长度为18;那么,对于第一层卷积层下面的pooling参数k1=12k1=12,而第二层卷积层对于的为k2=6k2=6,而k3=ktop=3k3=ktop=3。
动态k-max池化的意义在于,从不同长度的句子中提取出相应数量的语义特征信息,以保证后续的卷积层的统一性。
4. 非线性特征函数
pooling层与下一个卷积层之间,是通过与一些权值参数相乘后,加上某个偏置参数而来的,这与传统的CNN模型是一样的。
5. 多个Feature Map
和传统的CNN一样,会提出多个Feature Map以保证提取特征的多样性。
6. 折叠操作(Folding)
之前的宽卷积是在输入矩阵d×sd×s中的每一行内进行计算操作,其中dd是word vector的维数,ss是输入句子的词语数量。而Folding操作则是考虑相邻的两行之间的某种联系,方式也很简单,就是将两行的vector相加;该操作没有增加参数数量,但是提前(在最后的全连接层之前)考虑了特征矩阵中行与行之间的某种关联。
模型的特点
- 保留了句子中词序信息和词语之间的相对位置;
- 宽卷积的结果是传统卷积的一个扩展,某种意义上,也是n-gram的一个扩展;
- 模型不需要任何的先验知识,例如句法依存树等,并且模型考虑了句子中相隔较远的词语之间的语义信息;
实验部分
1. 模型训练及参数
- 输出层是一个类别概率分布(即softmax),与倒数第二层全连接;
- 代价函数为交叉熵,训练目标是最小化代价函数;
- L2正则化;
- 优化方法:mini-batch + gradient-based (使用Adagrad update rule, Duchi et al., 2011)
2. 实验结果
在三个数据集上进行了实验,分别是(1)电影评论数据集上的情感识别,(2)TREC问题分类,以及(3)Twitter数据集上的情感识别。结果如下图:



可以看出,DCNN的性能非常好,几乎不逊色于传统的模型;而且,DCNN的好处在于不需要任何的先验信息输入,也不需要构造非常复杂的人工特征。
《Kalchbrenner N, Grefenstette E, Blunsom P. A convolutional neural network for modelling sentences》的更多相关文章
- 《Neural Network and Deep Learning》_chapter4
<Neural Network and Deep Learning>_chapter4: A visual proof that neural nets can compute any f ...
- 《ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs》
代码: keras:https://github.com/phdowling/abcnn-keras tf:https://github.com/galsang/ABCNN 本文是Wenpeng Yi ...
- 论文笔记之《Event Extraction via Dynamic Multi-Pooling Convolutional Neural Network》
1. 文章内容概述 本人精读了事件抽取领域的经典论文<Event Extraction via Dynamic Multi-Pooling Convolutional Neural Networ ...
- pytorch -- CNN 文本分类 -- 《 Convolutional Neural Networks for Sentence Classification》
论文 < Convolutional Neural Networks for Sentence Classification>通过CNN实现了文本分类. 论文地址: 666666 模型图 ...
- 《A Convolutional Neural Network Cascade for Face Detection》
文章链接: http://pan.baidu.com/s/1bQBJMQ 密码:4772 作者在这里提出了基于神经网络的Cascade方法,Cascade最早可追溯到Haar Feature提取 ...
- 《MATLAB Deep Learning:With Machine Learning,Neural Networks and Artificial Intelligence》选记
一.Training of a Single-Layer Neural Network 1 Delta Rule Consider a single-layer neural network, as ...
- 《Convolutional Neural Network Architectures for Matching Natural Language Sentences》句子匹配
模型结构与原理 1. 基于CNN的句子建模 这篇论文主要针对的是句子匹配(Sentence Matching)的问题,但是基础问题仍然是句子建模.首先,文中提出了一种基于CNN的句子建模网络,如下图: ...
- 《Convolutional Neural Networks for Sentence Classification》 文本分类
文本分类任务中可以利用CNN来提取句子中类似 n-gram 的关键信息. TextCNN的详细过程原理图见下: keras 代码: def convs_block(data, convs=[3, 3, ...
- 论文笔记《ImageNet Classification with Deep Convolutional Neural Network》
一.摘要 了解CNN必读的一篇论文,有些东西还是可以了解的. 二.结构 1. Relu的好处: 1.在训练时间上,比tanh和sigmod快,而且BP的时候求导也很容易 2.因为是非饱和函数,所以基本 ...
随机推荐
- sysbench 压力测试工具
一.sysbench压力测试工具简介: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL. ...
- 攻防对抗中常用的windows命令(渗透测试和应急响应)
一.渗透测试 1.信息收集类 #查看系统信息 >systeminfo #查看用户信息 >net user >net user xxx #查看网络信息 >ipconfig /al ...
- kvm虚拟机中virbr0虚拟网络接口的删除与恢复
安装 KVM 后都会发现网络接口里多了一个叫做 virbr0 的虚拟网络接口 一般情况下,虚拟网络接口virbr0用作nat,以允许虚拟机访问网络服务,但nat一般不用于生产环境.我们可以使用以下方法 ...
- 让HTML标签、DIV、SPAN拥有focus事件和blur事件,聚焦和失焦
DIV和其他普通标签是不具有onfocus和onblur事件的.INPUT和A标签为什么拥有?而DIV和SPAN等普通标签却没有?有时候我们习惯性用键盘的TAB来移动光标,仔细看你会发现,光标只在IN ...
- python-django开发学习笔记三
1.简述 1.1 开发环境 该笔记所基于的开发环境为:windows8.python2.7.5.psycopg2-2.4.2.django1.5.4.pyCharm-2.7.3.以上所描述的软件.插件 ...
- 号称简明实用的django上手教程
1 几个基本概念 前置条件:假设读者基本Python语言基础,或者具备某种编程语言的基础.你还熟悉web开发环境,懂些css,js,db等. Django是什么? Django是一个开放源代码的Web ...
- .net framework 类库中必须掌握的命名空间(或者类)
Web开发常用命名空间和类. System.Collections //命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections ...
- java 类中的细节
java 中类: 类是用于描述统一类型的对象的一个抽象的概念,类中定义了这一类对象所因具有的静态和动态属性. 举例: 瓶子静态: 有一个口.长长的形状-->java类中的成员变量动态属性: 可以 ...
- pandas将DataFrame的列变成行索引
pandas提供了set_index方法可以将DataFrame的列(多列)变成行索引,通过reset_index方法可以将层次化索引的级别会被转移到列里面. 1.DataFrame的set_inde ...
- POJ 1185 - 炮兵阵地 & HDU 4539 - 郑厂长系列故事——排兵布阵 - [状压DP]
印象中这道题好像我曾经肝过,但是没肝出来,现在肝出来了也挺开心的 题目链接:http://poj.org/problem?id=1185 Time Limit: 2000MS Memory Limit ...