Fork me on GitHub

卷积神经网络(CNN)

[TOC]

卷积神经网络(CNN)

卷积的定义

卷积的数学定义

  1. 连续形式 $ s(t)= \int x(a)w(t-a)da$, 记作$s(t)=(x\ast w)(t) $
  2. 离散形式 $ s(t)=\sum_a x(a)w(t-a)$

x通常叫做输入,w称为核函数,输出一般叫做特征映射。卷积有对称性质,即$ (x\ast w)(t) = (w\ast x)(t)$, 这个根据定义,然后对积分变量换元一下很容易证明。

  1. 神经网络中的卷积 这里的卷积其实就是一个矩阵,放到每一层的神经网络中就是网络中的部分权重。如图

Why CNN?

cnn与图像之间有几点相似性:

  1. 图像中的一些特征要比整个图像小很多,比如人的眼睛,鸟的嘴巴…,而卷积恰好能描述这种特点
  2. 一些特征在图像中我只关心它有没有出现,并不关心它出现在图像中的具体位置,比如人脸识别时人脸可能出现在左上角,也可能照片不太规范出现在了图像的中间,CNN中卷积矩阵作用在图像上时也有这种特点
  3. 下采样,也就是说,一张图像,你把它的分辨率适当的调低,并不影响人大致地分辨出图像的内容,而这一点在CNN中max-pooling很像。

CNN的一些特点

  1. 稀疏交互: 相比于全连接神经网络,CNN每一层的权重要稀疏很多
  2. 参数共享: 每一层的参数都只有卷积矩阵
  3. 等变表示: 如果函数$f(x)$和$g(x)$满足$f(g(x))=g(f(x)),$ 我们就说$f$ 对 $g$ 具有等变性。

池化

池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出,当输入做出少量平移时,池化函数后的输出大多数并不会改变太多。

常用的池化函数:

  • max-pooling
  • 相邻矩形区域内的平均值
  • $L_2$ 范数
  • 基于距中心像素的加权平均

卷积和池化可以被视为一种无限强的先验

基本卷积函数的变体

使用卷积网络时的一些细节上的不同

步幅(stride)

使用卷积矩阵对图像操作时的,每一步移动的大小,也被视为下采样。

零填充

从前面的分析,可以看出,每一层对图像使用卷积操作的时候,图像的大小都会减少,卷积矩阵越大,减少的就越多,这样的话如果网络太深,最后输出的图像的大小就会变得非常小,这样就限制了网络的深度或者不能使用规模太大的卷积矩阵。所以一般都会在图像的边缘填充零。

  1. 有效卷积 不作零填充
  2. 相同卷积 边缘填充零,使得映射后的图像大小不改变。image
  3. 全卷积

局部连接

下图上中下分别是局部连接、卷积、全连接局部连接

平铺卷积

下图上中下分别为局部连接、平铺卷积、卷积image

CNN的其他应用

比如,AlphaGo, 语音、自然语言处理都有应用,关键怎么构造卷积,可参考台大李宏毅最后几页PPT.pdf)