深度学习(Deep Learning)读书思考五:卷积神经网络(CNN)

概述

卷积神经网络早在80年代就被提出,并且成功用于手写字体识别。近年由于其在图像识别、语音识别以及NLP方面的成功表现,成为最成功的网络结构之一。本节主要介绍

  1. CNN背后的动机
  2. CNN中Pooling层以及经典CNN架构
  3. CNN各种变种

另外关于CNN在NLP方面的应用可以参考。
* CNN在NLP中应用形式
* CNN用于文本分类

CNN提出动机

卷积

卷积在CNN中主要表现为矩阵乘积累加和,例如一维卷积表示为

s(x)=f(t)g(xt)dt
二维卷积表示为
s(x,y)=ijf(xi)g(yj)didj

离散形式应用的更多一些,使用举例可以参考之前的博客。

在CNN中,x常常用于表示输入(特征或者隐藏特征);g表示卷积核(需要自动学习得到);s表示卷积的输出,也称特征映射。

动机

CNN相比于其他神经网络,主要优势在于

稀疏连接

稀疏连接相比于全连接网络结构,每个输出只和部分输入相关联。此时可以大大降低参数个数以及计算复杂度,同时也提供参数共享的功能。
例如:如果有m个输入,n个输出;如果全连接则参数个数为O(m*n);对于CNN网络结构,每个输出和k个输入关联,则O(k*n),一般k << m可以大大降低参数个数。

参数共享

参数共享是指一个卷积核可以用于整个输入层,达到参数共享的作用。
这里写图片描述

  1. 下图是全连接网络,即每个输出s和每个输入都有关联。上图是CNN结构,有稀疏结构,每个输出s仅和相邻的两个输入关联。
  2. CNN中每个参数可作用于所有的输入,而全连接网络一个参数仅关联固定输入。

变化等价

变化等价是指:输入先进行变化再进行卷积等价于 对输入先卷积在变化。此时可以通过多个卷积核发现多种类型的特征映射,结合池化层(pooling)可以学习到各种转换。

池化层(Pooling)

池化层是CNN中非常关键的一个网络层,也是区分于其他网络结构的重点。典型的CNN网络结构如下:
这里写图片描述

池化层的功能体现在

  1. 池化层有多种形式,比较常见的是 max-pooling和average pooling
  2. 通过pooling层可以使得捕获局部显著特征,即对输入变化保持不变。这里写图片描述
  3. pooling相当于加入了非常强的先验,即局部改变不影响输出。
  4. 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还有很多知识点包括结构化输出、数据类型、卷积算法、池化策略等。还需要根据应用研究相关算法。

猜你喜欢

转载自blog.csdn.net/fangqingan_java/article/details/51933466