如何理解 卷积 和pooling

转自:http://blog.csdn.net/malefactor/article/details/51078135

CNN是目前自然语言处理中和RNN并驾齐驱的两种最常见的深度学习模型。图1展示了在NLP任务中使用CNN模型的典型网络结构。一般而言,输入的字或者词用Word Embedding的方式表达,这样本来一维的文本信息输入就转换成了二维的输入结构,假设输入X包含m个字符,而每个字符的Word Embedding的长度为d,那么输入就是m*d的二维向量。

图1 自然语言处理中CNN模型典型网络结构

这里可以看出,因为NLP中的句子长度是不同的,所以CNN的输入矩阵大小是不确定的,这取决于m的大小是多少。卷积层本质上是个特征抽取层,可以设定超参数F来指定设立多少个特征抽取器(Filter),对于某个Filter来说,可以想象有一个k*d大小的移动窗口从输入矩阵的第一个字开始不断往后移动,其中k是Filter指定的窗口大小,d是Word Embedding长度。对于某个时刻的窗口,通过神经网络的非线性变换,将这个窗口内的输入值转换为某个特征值,随着窗口不断往后移动,这个Filter对应的特征值不断产生,形成这个Filter的特征向量。这就是卷积层抽取特征的过程。每个Filter都如此操作,形成了不同的特征抽取器。Pooling 层则对Filter的特征进行降维操作,形成最终的特征。一般在Pooling层之后连接全联接层神经网络,形成最后的分类过程。

可见,卷积和Pooling是CNN中最重要的两个步骤。下面我们重点介绍NLP中CNN模型常见的Pooling操作方法。

|CNN中的Max Pooling Over Time操作

MaxPooling Over Time是NLP中CNN模型中最常见的一种下采样操作。意思是对于某个Filter抽取到若干特征值,只取其中得分最大的那个值作为Pooling层保留值,其它特征值全部抛弃,值最大代表只保留这些特征中最强的,而抛弃其它弱的此类特征。

CNN中采用Max Pooling操作有几个好处:首先,这个操作可以保证特征的位置与旋转不变性,因为不论这个强特征在哪个位置出现,都会不考虑其出现位置而能把它提出来。对于图像处理来说这种位置与旋转不变性是很好的特性,但是对于NLP来说,这个特性其实并不一定是好事,因为在很多NLP的应用场合,特征的出现位置信息是很重要的,比如主语出现位置一般在句子头,宾语一般出现在句子尾等等,这些位置信息其实有时候对于分类任务来说还是很重要的,但是Max Pooling 基本把这些信息抛掉了。

其次,MaxPooling能减少模型参数数量,有利于减少模型过拟合问题。因为经过Pooling操作后,往往把2D或者1D的数组转换为单一数值,这样对于后续的Convolution层或者全联接隐层来说无疑单个Filter的参数或者隐层神经元个数就减少了。

再者,对于NLP任务来说,Max Pooling有个额外的好处;在此处,可以把变长的输入X整理成固定长度的输入。因为CNN最后往往会接全联接层,而其神经元个数是需要事先定好的,如果输入是不定长的那么很难设计网络结构。前文说过,CNN模型的输入X长度是不确定的,而通过Pooling 操作,每个Filter固定取1个值,那么有多少个Filter,Pooling层就有多少个神经元,这样就可以把全联接层神经元个数固定住(如图2所示),这个优点也是非常重要的。

图2. Pooling层神经元个数等于Filters个数

但是,CNN模型采取MaxPooling Over Time也有一些值得注意的缺点:首先就如上所述,特征的位置信息在这一步骤完全丢失。在卷积层其实是保留了特征的位置信息的,但是通过取唯一的最大值,现在在Pooling层只知道这个最大值是多少,但是其出现位置信息并没有保留;另外一个明显的缺点是:有时候有些强特征会出现多次,比如我们常见的TF.IDF公式,TF就是指某个特征出现的次数,出现次数越多说明这个特征越强,但是因为Max Pooling只保留一个最大值,所以即使某个特征出现多次,现在也只能看到一次,就是说同一特征的强度信息丢失了。这是Max Pooling Over Time典型的两个缺点。

其实,我们常说“危机危机”,对这个词汇乐观的解读是“危险就是机遇”。同理,发现模型的缺点是个好事情,因为创新往往就是通过改进模型的缺点而引发出来的。那么怎么改进Pooling层的机制能够缓解上述问题呢?下面两个常见的改进Pooling机制就是干这个事情的。

|K-Max Pooling

K-MaxPooling的意思是:原先的Max Pooling Over Time从Convolution层一系列特征值中只取最强的那个值,那么我们思路可以扩展一下,K-Max Pooling可以取所有特征值中得分在Top –K的值,并保留这些特征值原始的先后顺序(图3是2-max Pooling的示意图),就是说通过多保留一些特征信息供后续阶段使用。

图3 .2-max pooling

很明显,K-Max Pooling可以表达同一类特征出现多次的情形,即可以表达某类特征的强度;另外,因为这些Top K特征值的相对顺序得以保留,所以应该说其保留了部分位置信息,但是这种位置信息只是特征间的相对顺序,而非绝对位置信息。

|Chunk-Max Pooling

Chunk-MaxPooling的思想是:把某个Filter对应的Convolution层的所有特征向量进行分段,切割成若干段后,在每个分段里面各自取得一个最大特征值,比如将某个Filter的特征向量切成3个Chunk,那么就在每个Chunk里面取一个最大值,于是获得3个特征值。(如图4所示,不同颜色代表不同分段)

图4. Chunk-Max Pooling示意图

乍一看Chunk-Max Pooling思路类似于K-Max Pooling,因为它也是从Convolution层取出了K个特征值,但是两者的主要区别是:K-Max Pooling是一种全局取Top K特征的操作方式,而Chunk-Max Pooling则是先分段,在分段内包含特征数据里面取最大值,所以其实是一种局部Top K的特征抽取方式。

至于这个Chunk怎么划分,可以有不同的做法,比如可以事先设定好段落个数,这是一种静态划分Chunk的思路;也可以根据输入的不同动态地划分Chunk间的边界位置,可以称之为动态Chunk-Max方法(这种称谓是我随手命名的,非正式称谓,请注意)。

Chunk-Max Pooling很明显也是保留了多个局部Max特征值的相对顺序信息,尽管并没有保留绝对位置信息,但是因为是先划分Chunk再分别取Max值的,所以保留了比较粗粒度的模糊的位置信息;当然,如果多次出现强特征,则也可以捕获特征强度。

Event Extraction via Dynamic Multi-Pooling Convolutional Neural Networks这篇论文提出的是一种ChunkPooling的变体,就是上面说的动态Chunk-Max Pooling的思路,实验证明性能有提升。Local Translation Prediction with Global Sentence Representation 这篇论文也用实验证明了静态Chunk-Max性能相对MaxPooling Over Time方法在机器翻译应用中对应用效果有提升。

如果思考一下,就会发现,如果分类所需要的关键特征的位置信息很重要,那么类似Chunk-Max Pooling这种能够粗粒度保留位置信息的机制应该能够对分类性能有一定程度的提升作用;但是对于很多分类问题,估计Max-Pooling over time就足够了。

比如我们拿情感分类来说,估计用Chunk-max策略应该有帮助,因为对于这种表达模式:

“Blablabla….表扬了你半天,BUT…..你本质上就是个渣”

与这种表达模式

“虽然说你是个渣,但是…..Blablabla…..欧巴我还是觉得你最好,因为你最帅”

明显位置信息对于判别整体情感倾向是有帮助作用的,所以引入位置信息应该有帮助。

所以,你分析下你手头的问题,看看位置是不是重要特征,如果是,那么套用一下Chunk-Max策略,估计性能会有提升,比如上面举的情感分类问题估计效果会有提升。

更多:http://blog.csdn.net/stdcoutzyx/article/details/41596663

时间: 2024-10-13 01:48:09

如何理解 卷积 和pooling的相关文章

Atitit 图像处理之理解卷积attilax总结

Atitit 图像处理之理解卷积attilax总结 卷积的运算可以分为反转.平移,相乘,求和. 在图像处理中,图像是一个大矩阵,卷积模板是一个小矩阵.按照上述过程,就是先把小矩阵反转,然后平移到某一位置,小矩阵的每一个小格对应大矩阵里面的一个小格,然后把对应小格里面的数相乘,把所有对应小格相乘的结果相加求和,得出的最后结果赋值给小矩阵中央小格对应的图像中小格的值,替换原来的值.就是上述说到的,反转.平移.相乘.求和.        一般图像卷积就是从第一个像素(小格)开始遍历到最后一个像素(小格

卷积的本质及物理意义(全面理解卷积)

卷积的本质及物理意义(全面理解卷积) 卷积的本质及物理意义 提示:对卷积的理解分为三部分讲解1)信号的角度2)数学家的理解(外行)3)与多项式的关系 1 来源 卷积其实就是为冲击函数诞生的.“冲击函数”是狄拉克为了解决一些瞬间作用的物理现象而提出的符号.古人曰:“说一堆大道理不如举一个好例子”,冲量这一物理现象很能说明“冲击函数”.在t时间内对一物体作用F的力,倘若作用时间t很小,作用力F很大,但让Ft的乘积不变,即冲量不变.于是在用t做横坐标.F做纵坐标的坐标系中,就如同一个面积不变的长方形,

转:图像处理之理解卷积

图像处理之理解卷积 一:什么是卷积 离散卷积的数学公式可以表示为如下形式: f(x) =  - 其中C(k)代表卷积操作数,g(i)代表样本数据, f(x)代表输出结果. 举例如下: 假设g(i)是一个一维的函数,而且代表的样本数为G = [1,2,3,4,5,6,7,8,9] 假设C(k)是一个一维的卷积操作数, 操作数为C=[-1,0,1] 则输出结果f(x)可以表示为 F=[1,2,2,2,2,2,2,2,1]  //边界数据未处理 以上只是一维的情况下,当对一幅二维数字图像加以卷积时,其

通俗易懂理解卷积

卷积公式: 理解方式一:实例 链接:https://www.zhihu.com/question/22298352/answer/50940942 对于初学者,我推荐用复利的例子来理解卷积可能更好理解一些: 小明存入100元钱,年利率是5%,按复利计算(即将每一年所获利息加入本金,以计算下一年的利息),那么在五年之后他能拿到的钱数是 ,如下表所示: 将这笔钱存入银行的一年之后,小明又往银行中存入了100元钱,年利率仍为5%,那么这笔钱按复利计算,到了第五年,将收回的钱数是 ,我们将这一结果作为新

[OpenCV学习]彻底理解卷积的含义

看了很多关于卷积的介绍,一直感觉不怎么理解,今天彻底研究下: 我们知道图像是由像素构成的,图像中的行和列一起构成了图像矩阵,比如一个分辨率800*400的图像,同时也是一个大矩阵,这个矩阵有着400行和800列.假设有一个3*3的滤波小矩阵(卷积核), 在进行卷积运算的时候,我们便利整个图像大矩阵中的每一个像素,先取一个像素,然后取这个像素周围的一圈像素,构成一组3*3的矩阵,与卷积核对应位置的值相乘,把相乘的结果在相加,把相加的结果作为新的值存入结果.概括如下: 卷积就是对图像大矩阵和小矩阵对

理解卷积神经网络?

南洋理工大学的综述论文<Recent Advances in Convolutional Neural Networks>对卷积神经网络的各个组件以及进展情况进行总结和解读,其中涉及到 CNN 中各种重要层的数学原理以及各种激活函数和损失函数.机器之心技术分析师对该论文进行了解读. 论文地址:https://arxiv.org/abs/1512.07108 引言 近段时间来,深度 CNN 已经在多个深度学习应用领域取得了出色的表现,并且也有很好的泛化的能力.图像分类.目标检测.实例分割和场景理

理解卷积神经网络中的channel

在一般的深度学习框架的 conv2d 中,如 tensorflow.mxnet,channel都是必填的一个参数 在tensorflow中,对于输入样本中 channels 的含义,一般是RGB图片,channels的数量是3(R.G.B).而灰度图是的channel是1: mxnet 中,一般channels的含义是:每个卷积层中卷积核的数量. 为了更好的理解,下面举个例子.图片来自 吴恩达老师的深度学习课程 如下图,假设有一个 6x6x3 SD敢达送大放送 阿斯飞洒 是飞洒个艾丝凡 艾丝凡

深入理解卷积与模型大小问题,解决显存不足

在训练自己的模型时常常出现显存不足等问题,这个时候我们常用的方法就是调参.一般常用的方法有以下几点: 模型压缩网络参数调整, 比如减小训练图像大小,降低FC output个数,使用小的conv kernel size等.深度学习框架调整减层但是对于既定网络,我们减小训练图像大小或者改变batchsize大小都会影响模型的性能,这点在目标检测和语义分割中反应比较明显.那么我们要做的是在不改变网络性能的情况下,尽量的压缩模型,空出足够的显存进行GPU加速. GPU基础知识我们利用gpustat工具包

『cs231n』作业2选讲_通过代码理解卷积层&amp;池化层

卷积层 卷积层向前传播示意图: def conv_forward_naive(x, w, b, conv_param): """ A naive implementation of the forward pass for a convolutional layer. The input consists of N data points, each with C channels, height H and width W. We convolve each input w