卷积神经网络Step by Step(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wblgers1234/article/details/70921248

卷积神经网络Step by Step(一)

这第一篇博客先从理论的角度阐述卷积神经网络的原理,包括卷积特征提取、池化以及误差反向传播。博客的内容是根据对Stanford大学的“UFLDL Tutorial”进行学习,并结合自己的理解所成,欢迎拍砖。

1. 用“卷积”进行特征提取

利用自然图像中的统计特征不变性,我们可以对图像的某一部分进行特征学习,然后通过卷积处理的形式应用到图像的其他部分做特征激活(feature activation)。

举例:假设对于一个96×96的图像,首先我们已经完成了对某个8×8图像块的特征学习,接下来将图像上的每个8×8的区域(1,1),(1,2),…(89,89),用相同的特征提取器分别进行特征激活,最终得到卷积特征。对于用来做特征提取或者特征学习,比较常见的是autoencoder。

图1 卷积提取特征

一般来讲,对于一个维数为 r×c 的原始图像 xlarge ,我们首先在一个 a×b 图像块 xsmall 上训练出一个稀疏自编码器,利用特征提取器( f=σ(W(1)xsmall+b(1)) ,其中 σ 表示sigmod函数)学习 k 个特征。对于原始图像上的每一个 a×b 的图像块 xs ,通过计算 fs=σ(W(1)xs+b(1)) 得到卷积特征 fconvolved ,遍历整个图像后最终得到 k×(ra+1)×(cb+1) 维数的特征。

2. 池化

2.1 概览

通过前一节的处理,我们在原始图像上获得了“卷积处理”后的特征,接下来应该是将这些特征送入一个softmax分类器进行训练,但是考虑到特征的数量巨大(例如,对于 96×96 的图像,如果在 8×8 的图像块上提取400个特征,最终的特征总数超过300万),难以处理,并且很可能会导致过拟合(over-fitting)。

为了解决这个问题,我们引入“池化”的概念进行特征聚合。对于“卷积处理”后的二维特征图像,我们可以分区域进行求平均/求最大值操作,这样得到的统计特征的维数相比于之前的全“卷积”特征会大大降低,同时也会避免过拟合。“池化”一般采用的方法有“平均值池化”和“最大值池化”。

图2 池化示例

2.2 池化不变性

如果我们选择图像中的连续范围作为池化区域,并且只是池化相同(重复)的隐层单元(hidden units)产生的特征,那么,这些池化单元就具有平移不变性 (translation invariant)。这意思是指,图像整体上发生了平移一样能提取特征进行匹配。在知乎上有一个很形象的例子来解释池化的平移不变性:把近视眼镜摘了以后,我依然能够挑中菜里的肉。池化操作对于图像的一个例子可以见下图。
这里写图片描述

图3 池化平移不变性示例

无论是“最大值池化”还是“平均值池化”都是在提取区域特征,相当于一种抽象,抽象就是过滤掉了不必要的信息(当然也会损失信息细节),所以在抽象层次上可以进行更好的识别。

3. 卷积神经网络

3.1 概述

一个卷积神经网络是由一个或多个卷积层,下采样层,以及一个或多个全连接层组成。CNN(卷积神经网络)的结构很适合做二维结构的信号处理,譬如说图像信号或者语音信号。CNN的优点在于很容易训练,并且相较于有相同隐层单元的全连接网络来说有更少的参数。

3.2 网络结构

以输入卷积层的图像为 m×m×r 维作为例子,假设卷积层有 k 个大小是 n×n×q 特征滤波器,其中 n 小于图像的维数 m 。经过卷积层处理后,我们得到了 k 个大小为 mn+1 的特征映射。接下来,在每个 p×p 的连续区域上,对每个特征映射用平均值池化或者最大值池化进行下采样处理, p 的一般取值为2~5。图4表示了卷积神经网络的卷积层和下采样层。
这里写图片描述

图4 CNN的第一层卷积层,以及池化示意

3.3 反向传播

δ(l+1) 是网络第 (l+1) 层的错误项,如果第 l 层是全连接至第 l+1 层,那么错误项反向传播到第 l 层得到的错误项是:

δ(l)=((W(l))Tδ(l+1))f(z(l))

同时梯度计算为:
w(l)J(W,b;x,y)=δ(l+1)(a(l))T,

b(l)J(W,b;x,y)=δ(l+1)

如果第 l 层是卷积层,那么从第 l+1 池化层反向传播回来的误差项是:
δ(l)k=upsample((W(l)k)Tδ(l+1)k)f(z(l))

其中 k 是特征滤波器的下标,其中 f(z(l)) 是激活函数的求导,upsample操作是将误差从池化层传播至前一个卷积层。
最后,要计算在特征映射上的梯度值,按照以下公式来进行计算:
W(l)kJ(W,b;x,y)=i=1m(a(l)i)rot90(δ(l+1)k,2),

b(l)kJ(W,b;x,y)=a,b(δ(l+1)k)a,b

其中 a(l) 是第 l 层的输入, a(1) 就是输入图像, (a(l)i)(δ(l+1)k) 指的是第 l 层的 i 个输入和上一层的误差项在第 k 个特征滤波器的“valid”卷积结果。

参考文献
http://ufldl.stanford.edu/tutorial/supervised
https://www.zhihu.com/question/34898241

猜你喜欢

转载自blog.csdn.net/wblgers1234/article/details/70921248