卷积神经网络(CNN)简介

  识别手写数字的网络结构是这样的:

物联网

每一层网络都和相邻层全部连接。但是这样并没有考虑到图片中像素的空间分布,不管两个像素离的很近还是非常远都一视同仁,显然这样做是不合理的。

  所以卷积神经网络就出现了,它考虑到了输入值的(像素的)空间分布,(再加上一些人工设定的特性 例如共享权重等)使得它非常容易训练。也就可以做出更深层的网络结构,拥有更好的识别效果。

  卷积神经网络主要概念有:local receptive fields , shared weights , and pooling。下面一个个解释。

  【 local receptive fields 】

  输入是 28x28的像素值:

物联网

对于第一个隐藏层,每一个隐藏层神经元 与 输入层中 5x5的神经元有连接。

物联网

这个5x5的区域就叫做 感受视野( local receptive field),表示 一个隐藏层神经元在输入层的感受区域。这5x5=25个连接对应有25个权重参数w,还有一个全局共用的基值b。

  当 local receptive field 沿着 整个输入照片向右(向下)滑动时,每一个 local receptive field 在第一个隐藏层都 对应一个隐藏神经元。

物联网

  图1: 第一个 local receptive field

物联网

图2:第二个 local receptive field (向右滑动一个像素)

  不断的向右(向下)滑动就可以得到第一个隐藏层。

  28x28 的输入照片 (W=28)

  5x5的local receptive fields(滑窗,也叫卷积核 ) (K=5)

  滑动步长(( stride )为1 (S = 1)

  可以得到 24x24的隐藏层神经元。

  假如现在 W=15,K=5, S=2 对应的隐藏神经元是多少?

  蓝色表示 左上角的5x5感受视野,绿色是其向右滑动 轨迹。

物联网
物联网

因为 W=15,K=5, S=2

  一次向右滑动对应 6个隐藏神经元 =>

  = 5次滑动 + 1个原始感受视野

  = 10个绿色区域/步长2 + 1个原始感受视野

  = (W-K)/S + 1

  得到隐藏层对应的计算公式: 隐藏层边长 = (W-K)/S + 1 。

(不过有时候为了控制输出的隐藏层空间分布 会在 输入层外围做零填充,假设填充 P个像素, 此时:边长= (W - K + 2P)/S + 1 ,特别的 当S=1时, 设置零填充为

可以保证 输入层与输出层有相同 的空间分布 )

物联网

零填充示意图

  【Shared weights and biases】

  上文提到 每一个隐藏层神经元 对应 5x5=25个权重参数w和一个基值参数b,实际上 我们规定 每一个隐藏层神经元的这些25个权值w 和 b都共享。 也就是说隐藏层神经元共享权值。

  大大减少参数个数:

  如此一来 上图的 隐藏层 只有 5x5+1 = 26 个参数 ,而如果时全部连接则需要 28x28xN (N代表隐藏神经元个数) 将远远多于26个参数,共享权值 就大大减小了参数个数 。

用数学化的语言描述一下(大致了解即可)对于第j,k个隐藏神经元 对应的值为

  平移不变性:

  这种做法有着很直观的意义: 上图第一个隐藏层的神经元 都在 检测 同一个特征(或模式)是否出现。(相同的权值自然就是在检测同一个特征)。例如 每一个神经元都在 检测是否出现 “垂直边”,无论这个垂直边在图片中的那个位置上都可以被卷积核扫描到。 这就是 卷积神经网络的 平移不变特性 ( translation invariance)。