卷积神经网络 — Convolutional Neural Network

卷积神经网络相较于 BP 神经网络的进步主要是极大地减少了构建网络所需要的参数。对于一个 10001000 像素的 RGB 图像( width=1000,height=1000,depth=3 ),如果应用单层、十个神经元的BP神经网络构建网络模型,那么该网络就需要计算 10100010003+10 个参数的梯度。如果网络的层数或神经元数目增加,该模型的计算成本将无比巨大。Hubel和Wiesel在研究猫脑皮层时发现了局部感受野(某些神经细胞对于特定部分的视觉区域敏感),并据此提出了卷积神经网络,不再像 BP 神经网络那样采用全连接。如下图(图取自):


这里写图片描述

Filter

根据局部感受野,卷积神经网络引入了 filter (在部分学术文章中,也称 kernel )的概念。假设我们有一张 55 像素的灰度图像 input 22 filter input 卷积后的结果如下图 output 所示。有一点需要注意! filter depth 值始终和其输入数据的 depth 值一致,且 output depth=1 。但是可以应用多个 filter 对同一个输入数据卷积,并将其 outputs 叠在一起形成网络下一层的输入, outputs depth 等于 filter 的数目。


这里写图片描述

下面给出卷积的公式:

Output=Convf(Input)Outputi,j=h=0Hf1w=0Wf1d=1DfInputi+h,j+w,dfilteri+h,j+w,d

其中, i{1,2,,HIHf+1};j{1,2,,WIWf+1} HI Hf 表示 Input filter height WI Wf 表示 Input filter width

Zero-Padding

观察上例可以发现,直接对原始数据 Input 进行卷积,会造成每个像素对输出的贡献不均衡。例如, Input[1,1] Output 只有一次影响,而 Input[3,3] Output 有四次影响。或者是想控制 Output height width 。都可以通过对原始数据的上下、左右四侧填充 0


这里写图片描述

Stride

同时,我们也可以调整 filter 的移动步伐。如下图:


这里写图片描述

结合 Padding Stride Input filter Output 之间的维度关系如下:

Depthfilter=DepthInputHeightOutput=HeightInput+2PaddingHeightfilterStride+1WidthOutput=WidthInput+2PaddingWidthfilterStride+1DepthOutput=1

卷积层

至此,我们已经可以构建出 CNN 的卷积层了。如下图:


这里写图片描述

Pooling层

通过增减卷积层 filter 的数目,可以控制该卷积层输出数据的 depth ,避免过拟合。而 Pooling 层的目的则是控制输出数据的 height width Pooling 主要有 average pooling max pooling ,故名思义,前一个是在计算 filter 覆盖范围内值的均值,后一个选取 filter 覆盖范围内的最大值。如下图:


这里写图片描述

请注意! Pooling 层中 filter depth 始终为1,不改变输入数据的 depth 值。输入数据与输出数据的深度一致。结合上面的卷积层, CNN 网络演变如下:


这里写图片描述

全连接层

最后,介绍卷积神经网络中的最后一种网络层——全连接层。在 CNN 中,继输入层后,会连续交替放置若干个卷积层和 Pooling 层的组合,然后将最后一层 Pooling 层向量化,放置全连接层,输出层多采用 Softmax Logistic Regression 做分类输出。完整的 CNN 网络如下图:


这里写图片描述

请注意!卷积层和 Pooling 层可以有多个接替组合,而上图仅包含一个组合。

猜你喜欢

转载自blog.csdn.net/u012841922/article/details/79129333