自然语言处理的CNN模型中几种常见的池化方法

本文是在[1]的基础上进行的二次归纳。

0x00 池化(pooling)的作用

  首先,回顾一下NLP中基本的CNN模型的卷积和池化的大致原理[2]。filter(特征抽取器,卷积核,CV上称之为滤波器)在一个窗口(text region)上可以抽取出一个特征值,filter在整个text上滑动,将抽取出一系列特征值组成一个特征向量。这就是卷积层抽取文本特征的过程。模型中的每一个filter都如此操作,形成了不同的特征向量。

  pooling层则对filters的抽取结果进行降维操作,获得样本的重要特征,为下一次的卷积增加感受野的大小,逐渐减小"分辨率", 为最后的全连接做准备。pooling层是CNN中用来减小尺寸,提高运算速度的,同样能减小噪声的影响,让各特征更具有健壮性。降维操作方式的不同产生不同的池化方法。

  一般在pooling层之后连接全连接神经网络,形成最后的分类结果。

  下面列举几种常见的pooling方法。

0x01 Max Pooling

做法

  对于某个filter抽取到若干特征值,只取其中得分最大的那个值作为pooling层保留值,其它特征值全部抛弃,值最大代表只保留这些特征中最强的,而抛弃其它弱的此类特征。

优点

  1. 只保留区域内的最大值(特征),忽略其它值,降低噪声的影响,提高模型健壮性;

  2. Max Pooling能减少模型参数数量,有利于减少模型过拟合问题。因为经过pooling操作后,在NLP任务中往往把一维的数组转换为单一数值,这样对于后续的卷积层或者全联接隐层来说无疑单个filter的参数或者隐层神经元个数就减少了。

  3. Max Pooling可以把变长的输入X整理成固定长度的输入。因为CNN最后往往会接全联接层,而其神经元个数是需要事先定好的,如果输入是不定长的那么很难设计网络结构。在NLP任务中,文本的长度往往是不确定的,而通过pooling 操作,每个filter固定取1个值,那么有多少个filter,pooling层就有多少个神经元(pooling层神经元个数等于filters个数),这样就可以把全联接层神经元个数固定住。

缺点

  1. Max-Pooling丢失特征项位置信息。在很多NLP的应用场合,特征的出现位置信息是很重要的,比如主语出现位置一般在句子头,宾语一般出现在句子尾等等,这些位置信息其实有时候对于主题分类分类任务也许不是很重要([3]保留词的顺序特征提高了文本分类性能),但是对于情感分类任务可能很重要;

  2. Max-Pooling丢失特征频次信息。有时候有些强特征会出现多次,比如我们常见的特征权重算法TF-IDF中的TF就是指某个特征在某一个文本中出现的次数。但是因为Max Pooling只保留一个最大值,所以即使某个特征出现多次,经过max-Pooling也只能看到一次。

0x02 K-Max Pooling

做法

  K-Max Pooling可以取每一个filter抽取的一些列特征值中得分在前K大的值,并保留他们的相对的先后顺序。把所有filters的前k大的特征值拼接成一个特征向量。pooling层的神经元个数等于k倍的filter个数。就是说通过多保留一些特征信息供后续阶段使用。

优点

  1. K-Max Pooling可以表达同一类特征出现多次的情形,即可以表达某类特征的强度;

  2. 因为这些Top-K特征值的相对顺序得以保留,所以应该说其保留了部分位置信息。

缺点

  这种位置信息只是特征间的相对顺序,而非绝对位置信息。

0x03 Chunk-Max Pooling

做法

  把某个filter抽取到的特征向量进行分段,切割成若干段后,在每个分段里面各自取得一个最大特征值,比如将某个filter的特征向量切成3个chunk,那么就在每个chunk里面取一个最大值,于是获得3个特征值。

优点

  1. Chunk-Max Pooling可以保留了多个局部最大特征值的相对顺序信息;

  2. 如果多次出现强特征,Chunk-Max Pooling可以捕获特征强度。

缺点

  并没有保留绝对位置信息,仅保留了比较粗粒度的模糊的位置信息。

0x04 REFERENCE

[1] 张俊林. 自然语言处理中CNN模型几种常见的Max Pooling操作[EB/OL]. http://blog.csdn.net/malefactor/article/details/51078135, 2016-04-07

[2] Kim, Y. (2014). Convolutional neural networks for sentence classification. Eprint Arxiv.

[3] Johnson, R., & Zhang, T. (2014). Effective use of word order for text categorization with convolutional neural networks. Eprint Arxiv.

自然语言处理的CNN模型中几种常见的池化方法的更多相关文章

  1. Android源码中中一种常见的struct使用方法

    直接看例子: #include<iostream> #include<stdlib.h> using namespace std; struct Base{ int ba; i ...

  2. [转]js中几种实用的跨域方法原理详解

    转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...

  3. JS中几种常见的数组算法(前端面试必看)

    JS中几种常见的数组算法 1.将稀疏数组变成不稀疏数组 /** * 稀疏数组 变为 不稀疏数组 * @params array arr 稀疏数组 * @return array 不稀疏的数组 */ f ...

  4. Spring RestTemplate中几种常见的请求方式

    https://github.com/lenve/SimpleSpringCloud/tree/master/RestTemplate在Spring Cloud中服务的发现与消费一文中,当我们从服务消 ...

  5. Spring RestTemplate中几种常见的请求方式GET请求 POST请求 PUT请求 DELETE请求

    Spring RestTemplate中几种常见的请求方式 原文地址: https://blog.csdn.net/u012702547/article/details/77917939   版权声明 ...

  6. 【2016-08-18】转载:总结C++中几种结构体初始化的方法

    作者:Ac_Von 博客地址:http://www.cnblogs.com/vongang/ 文章地址:http://www.cnblogs.com/vongang/archive/2011/07/3 ...

  7. .Net中几种常见的页面跳转传值方法

    1.ASP Server对象Execute方法 ASP Server对象的Execute方法可以在执行当前页面的过程中将另一个页面执行结果的内容插入到当前页面的输出中.Execute方法带一个参数,是 ...

  8. JavaScript 中 4 种常见的内存泄露陷阱

    了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读一读吧 ...

  9. Java中几种常见的排序方式

    冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字 ...

随机推荐

  1. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. KnockoutJS 3.X API 第四章 数据绑定(1) 文本及样式绑定

    目录 本节将介绍六种文本绑定方式: visible绑定 text绑定 html绑定 css绑定 style绑定 attr绑定 可见文本绑定(visible) 使用visible绑定,来控制DOM元素的 ...

  3. POJ 2486 Apple Tree

    好抽象的树形DP......... Apple Tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6411 Accepte ...

  4. FreeMarker学习(宏&lt;#macro&gt;的使用)

    原文链接:https://my.oschina.net/weiweiblog/blog/506301?p=1 用户定义指令-使用@符合来调用  有两种不同的类型:Macro(宏)和transform( ...

  5. Eclipse4.6(Neon) + Tomcat8 + MAVEN3.3.9 + SVN项目完整环境搭建

    软件清单 jdk-8u102-windows-x64.exe eclipse-inst-win64.exe (Eclipse4.6 Neon) apache-tomcat-8.5.5-windows- ...

  6. 浅谈PopupWindow弹出菜单

    实现将一个View显示在某一位置,而且是浮于当前窗口 首先要有一个要显示的view的布局,可以是任意View,包括ViewGroup <?xml version="1.0" ...

  7. 32位系统下使用4GB内存

    64位系统的驱动还有不少缺陷,果断重装回32位系统,但是4gb的内存,明显是浪费啊. 所以必须利用起来. 我没有采用不稳定的破解内核的做法,采用了虚拟硬盘的做法.因为个人觉得这样其实利用效率更高. 方 ...

  8. 【Python】爬虫-Scrapy

    [Scrapy] Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据. Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy ...

  9. Java Swing应用程序 JComboBox下拉框联动查询

    在web项目中,通过下拉框.JQuery和ajax可以实现下拉框联动查询. 譬如说,当你查询某个地方时,页面上有:省份:<下拉框省份> 市区:<下拉框市区> 县乡:<下拉 ...

  10. The Apache HBase™ Reference Guide

    以下内容由http://hbase.apache.org/book.html#getting_started节选并改编而来. 运行环境:hadoop-1.0.4,hbase-0.94.22,jdk1. ...