概述
卷积神经网络早在80年代就被提出,并且成功用于手写字体识别。近年由于其在图像识别、语音识别以及NLP方面的成功表现,成为最成功的网络结构之一。本节主要介绍
- CNN背后的动机
- CNN中Pooling层以及经典CNN架构
- CNN各种变种
另外关于CNN在NLP方面的应用可以参考。
* CNN在NLP中应用形式
* CNN用于文本分类
CNN提出动机
卷积
卷积在CNN中主要表现为矩阵乘积累加和,例如一维卷积表示为
离散形式应用的更多一些,使用举例可以参考之前的博客。
在CNN中,x常常用于表示输入(特征或者隐藏特征);g表示卷积核(需要自动学习得到);s表示卷积的输出,也称特征映射。
动机
CNN相比于其他神经网络,主要优势在于
稀疏连接
稀疏连接相比于全连接网络结构,每个输出只和部分输入相关联。此时可以大大降低参数个数以及计算复杂度,同时也提供参数共享的功能。
例如:如果有m个输入,n个输出;如果全连接则参数个数为O(m*n);对于CNN网络结构,每个输出和k个输入关联,则O(k*n),一般k << m可以大大降低参数个数。
参数共享
参数共享是指一个卷积核可以用于整个输入层,达到参数共享的作用。
- 下图是全连接网络,即每个输出s和每个输入都有关联。上图是CNN结构,有稀疏结构,每个输出s仅和相邻的两个输入关联。
- CNN中每个参数可作用于所有的输入,而全连接网络一个参数仅关联固定输入。
变化等价
变化等价是指:输入先进行变化再进行卷积等价于 对输入先卷积在变化。此时可以通过多个卷积核发现多种类型的特征映射,结合池化层(pooling)可以学习到各种转换。
池化层(Pooling)
池化层是CNN中非常关键的一个网络层,也是区分于其他网络结构的重点。典型的CNN网络结构如下:
池化层的功能体现在
- 池化层有多种形式,比较常见的是 max-pooling和average pooling
- 通过pooling层可以使得捕获局部显著特征,即对输入变化保持不变。
- pooling相当于加入了非常强的先验,即局部改变不影响输出。
- pooling也可以处理变长的输入,得到定长的输出。
卷积变种
Zero-Padding
Zero-Padding是指是否对原始输入进行放宽,并且进行补零操作,如果不进行zero-padding,相当于对输入进行收缩,即使使用很小的卷积核也很快输出变成0.
有多种方式进行 zero-padding:
1. valid 卷积:不进行卷积,如果有m个输入,卷积核程度为k,则输出为m-k+1
2. same 卷积:补充一定数量使得输出和输入大小一致。
3. full 卷积,补充足够多的零,使得每一个输入经过卷积核k次,则输出为m+k-1
卷积形式
不共享卷积
卷积不共享参数,也成为局部连接,每个输入和固定个数输入关联,但是不应用全部输入。一般使用场景是对输入十分了解,可以指定输出和输入对应关系。下图举例
注:最上层是局部连接的卷积层。中间是标准卷积层。最下是全连接网络。
Tiled 卷积
Tiled 卷积:介于标准和局部连接之间。
注:最上是局部连接卷积层;中间是Tiled卷积;最下是标准卷积。
总结
本文简单介绍了CNN的概念包括卷积、池化、zero-padding等,关于CNN还有很多知识点包括结构化输出、数据类型、卷积算法、池化策略等。还需要根据应用研究相关算法。