【CNN】卷积神经网络
什么是卷积神经网络
卷积神经网络是一种特殊的、简化的深层神经网络模型,它的每个卷积层都是由多个卷积滤波器组成。它最先由lecun在LeNet[40]中提出,网络结构如下图所示。在cnn中,图像的一小部分(局部感受区域)作为层级结构的最低层的输入,信息再依次传输到不同的层,每层通过多个卷积滤波器去获得观测数据的最显著的特征。


卷积神经网络中的每一个特征提取层(卷积层)都紧跟着一个用来求局部平均与二次提取的计算层(pooling层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。如下图所示,就是一个完整的卷积过程。

它的特殊性体现在两点:
(1)局部感受野(receptive field),cnn的神经元间的连接是非全连接的;
(2)同一层中同一个卷积滤波器的权重是共享的(即相同的)。
局部感受野和权重共享这两个特点,使cnn网络结构更类似于生物神经网络,降低了网络模型的复杂度,减少了神经网络需要训练的参数的个数。
CNN在文本上的应用
卷积神经网络在image classify和image detect上得到诸多成功的应用,后文将再详细阐述。但除了图片外,它在文本分析上也取得一些成功的应用。
基于CNN,可以用来做文本分类,情感分析,本体分类等。传统文本分类等任务,一般基于bag of words或者基于word的特征提取,此类方法一般需要领域知识和人工特征。利用CNN做,方法也类似,但一般都是基于raw text,CNN模型的输入可以是word series,可以是word vector,还可以是单纯的字符。比起传统方法,CNN不需要过多的人工特征。
将word series作为输入,利用CNN做文本分类。如下图所示,该CNN很简单,共分四层,
第一层是词向量层,doc中的每个词,都将其映射到词向量空间,假设词向量为k维,则n个词映射后,相当于生成一张n*k维的图像;
第二层是卷积层,多个滤波器作用于词向量层,不同滤波器生成不同的feature map;
第三层是pooling层,取每个feature map的最大值,这样操作可以处理变长文档,因为第三层输出只依赖于滤波器的个数;
第四层是一个全连接的softmax层,输出是每个类目的概率。
除此之外,输入层可以有两个channel,其中一个channel采用预先利用word2vec训练好的词向量,另一个channel的词向量可以通过backpropagation在训练过程中调整。这样做的结果是:在目前通用的7个分类评测任务中,有4个取得了state-of-the-art的结果,另外3个表现接近最好水平。
附:一种简单的cnn结构,一层convolution+一层pooling。来自Yoon Kim(2014)的论文。

首先做一些符号说明:输入是词向量Xi(长度是k),句子向量Xi:n是词向量的级联(拼接成长向量),filter是w,可看成一个滑动窗口,这里的w是向量,长度是hk(滑动窗口包含h个词)。
利用cnn做文本分类,还可以考虑到词的顺序。利用传统的”bag-of-words + maxent/svm”方法,是没有考虑词之间的顺序的。文献中提出两种cnn模型:seq-cnn, bow-cnn,利用这两种cnn模型,均取得state-of-the-art结果。
将doc character作为输入,利用CNN做文本分类。文献介绍了一种方法,不利用word,也不利用word vector,直接将字符系列作为模型输入,这样输入维度大大下降(相比于word),有利于训练更复杂的卷积网络。对于中文,可以将汉字的拼音系列作为输入。
参考文献
【1】Convolutional Neural Networks for Sentence Classification
【CNN】卷积神经网络的更多相关文章
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...
- [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR
Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN,LSTM
http://cs231n.github.io/neural-networks-1 https://arxiv.org/pdf/1603.07285.pdf https://adeshpande3.g ...
- day-16 CNN卷积神经网络算法之Max pooling池化操作学习
利用CNN卷积神经网络进行训练时,进行完卷积运算,还需要接着进行Max pooling池化操作,目的是在尽量不丢失图像特征前期下,对图像进行downsampling. 首先看下max pooling的 ...
- cnn(卷积神经网络)比较系统的讲解
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...
- Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例
CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...
- TensorFlow——CNN卷积神经网络处理Mnist数据集
CNN卷积神经网络处理Mnist数据集 CNN模型结构: 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积 ...
- tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图
tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图 因为很多 demo 都比较复杂,专门抽出这两个函数,写的 demo. 更多教程:http://www.tensorflown ...
随机推荐
- MySQL 分区表原理及数据备份转移实战
MySQL 分区表原理及数据备份转移实战 1.分区表含义 分区表定义指根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分.实际上,表的不同部分在不同的位置被存储为单独的表.用户所选择的.实现 ...
- ROS学习(十一)—— msg srv
一.msg 和 srv介绍 1.定义 消息(msg): msg文件就是一个描述ROS中所使用消息类型的简单文本.它们会被用来生成不同语言的源代码 服务(srv): 一个srv文件描述一项服务.它包含两 ...
- 关于解锁美版Play市场
关于解锁美版Play市场(本帖已经突破了G+的500评论上限,如有问题请转载留言) 我对这个问题思考的很深刻也思考了很久,作为一个深度google脑残粉怎么能用不完整的Play Store呢?那人生岂 ...
- 基于matplotlib的数据可视化 - 等高线 contour 与 contourf
contour 与contourf 是绘制等高线的利器. contour - 绘制等高线 contourf - 填充等高线 两个的返回值值是一样的(return values are the sam ...
- android:fitsSystemWindows属性的用法
属性说明 fitsSystemWindows属性可以让view根据系统窗口来调整自己的布局:简单点说就是我们在设置应用布局时是否考虑系统窗口布局,这里系统窗口包括系统状态栏.导航栏.输入法等,包括一些 ...
- appium简明教程(10)——控件定位基础
狭义上讲,UI级的自动化测试就是让机器代替人去点来点去的过程. 但机器去点什么(点上面还是点左边),怎么点(是长按还是轻触),这些东西是必须由代码的编写者所指示清楚的. 控件定位就是解决机器点什么的问 ...
- hihoCoder 1015 KMP算法(kmp)
#1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣.他们约定好互相帮助 ...
- no OPENSSL_Applink错误的解决方法
原文链接: http://www.cnblogs.com/sdnyzhl/archive/2012/12/11/2813210.html 自己按照openssl中介绍的编译,安装openssl,其间编 ...
- Python 文件 readlines() 方法
概述 Python 文件 readlines() 方法用于读取整个文件(所有行)到一个列表,可以由for... in ... 结构进行遍历.列表的每一行变成列表的每一个元素. 语法 readlines ...
- php的opcode缓存
前言:由php的运行机制决定,其实php在运行阶段我们也是可以进行缓存的从而提高程序运行效率,这就是我们常说的opcode缓存.1.简述php的运行机制(因为本文是写opcode缓存的所以这里只是简要 ...