卷积神经网络简述(一)

前言

卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种具有局部连接、权重共享等特性的深层前馈神经网络。卷积神经网络最早可以追溯到1970年代,但目前所说的CNN是源自Yann LeCun等人的工作。
CNN是近年来在计算机视觉领域取得突破性成果的基石,在自然语言处理、推荐系统和语音识别领域广泛使用。首先描述卷积神经网络中的卷积层和池化层的工作原理,并解释填充、步幅、输入通道和输出通道的含义。在掌握这些基础知识后,将展示一个简单的CNN网络实例(Python代码),接着探究几个具有代表性的深度卷积神经网络的设计思路,最后将对最新的关于CNN的论文进行研究和编码学习。

1 历史与问题

卷积神经网络是一种专门用来处理具有类似网络结构的数据的神经网络。例如时间序列数据(可以认为是在时间轴上有规律地采样形成的一维网格)和图像数据(可以看成二维的像素网格)。卷积网络在诸多应用领域都表现优异。“CNN”一词表明该网络使用了卷积(convolution)这种数学运算。卷积是一种特殊的线性运算。卷积网络是指那些至少在网络的一层使用卷积运算来替代一般的矩阵乘法运算的神经网络。
卷积神经网络最早是主要用于处理图像信息。若使用全链接前馈网络来处理图像,会存在以下两个问题:

(1)参数太多:如果输入图像大小为 100 × 100 × 3 100\times 100 \times3 100×100×3(即图像的高度是100,宽度为100,3个颜色通道:RGB)。在全连接前馈神经网络中,第一个隐藏层的每一个神经元都有 100 × 100 × 3 = 30000 100\times 100 \times3 = 30000 100×100×3=30000个相互独立的连接,每个连接都对应这一个权重参数。随着隐藏层神经元的增加,参数的规模也会急剧增加。这导致整个神经网络的训练效率会很低,也易出现过拟合。

(2)局部不变性特征:自然图像处理中的物体具有局部不变性特征,在尺寸缩放、平移、旋转等操作上不影响其语义信息。全连接网络很难提取这些局部不变性特征,一般需要进行数据增强来提高性能。

2 整体框架

CNN由几个基本的层构成,这些层包括输入层、卷积层、池化层、全连接层和输出层所构成,如下图1所示,其模块化的表示如图2所示。输入层、全连接层和输出层工作原理先不叙述,待以后整体叙述时补上。卷积层和池化层是CNN的核心。
CNN的架构
图1 CNN的架构

CNN的基本模块
图2 CNN的基本模块

3 卷积层

卷积层是CNN中最重要部分,包含多个特征映射,卷积层中的每个特征映射相当于之前所述网络的节点,特征映射通过卷积运算和激活函数 f ( ⋅ ) f(\cdot) f()将输入映射为卷积特征。每个特征映射可接收一个或多个前层特征输入,并包含与特征输入数目相同的卷积滤波器(也称为卷积核)。这些卷积滤波器与输入时行卷积运算,然后将结果通过激活函数后,输出卷积特征。

3.1 卷积与卷积滤波器

当以 2 − D 2-D 2D特征 a a a作为输入时,卷积滤波器 w w w是二维的矩阵。令输入特征 a a a和卷积滤波器 w w w分别为
a = ( 1 3 0 − 1 − 2 0 3 2 2 − 3 − 1 4 4 2 0 1 ) w = ( 3 − 1 0 2 ) a = \begin{pmatrix} 1 & 3 & 0 & -1 \\ -2 & 0 & 3 & 2 \\ 2 & -3 & -1 & 4 \\ 4 & 2 & 0 & 1 \end{pmatrix} w = \begin{pmatrix} 3 & -1 \\ 0 & 2 \end{pmatrix} a=1224303203101241w=(3012)
进行卷积运算时,先对滤波器 w w w进行 18 0 ∘ 180^{\circ} 180翻转,得到
w ~ = ( 2 0 − 1 3 ) \tilde{w} = \begin{pmatrix} 2 & 0 \\-1 & 3 \end{pmatrix} w~=(2103)
然后按照图3所示进行计算
卷积计算过程
图3 卷积计算过程

卷积运算就是 a ∗ w a*w aw的过程,计算过程展示如下
( 1 3 0 − 1 − 2 0 3 2 2 − 3 − 1 4 4 2 0 1 ) ∗ ( 3 − 1 0 2 ) = ( 4 15 3 − 15 0 21 6 − 3 1 ) \begin{pmatrix} 1 & 3 & 0 & -1 \\ -2 & 0 & 3 & 2 \\ 2 & -3 & -1 & 4 \\ 4 & 2 & 0 & 1 \end{pmatrix} * \begin{pmatrix} 3 & -1 \\ 0 & 2 \end{pmatrix} = \begin{pmatrix} 4 & 15 & 3 \\-15 & 0 & 21 \\6 & -3 & 1 \end{pmatrix} 1224303203101241(3012)=415615033211

3.2 机器学习中的卷积运算

1)卷积定义

卷积运算定义为;
z = a ∗ w z ( i , j ) = ( a ∗ w ) ( i , j ) = ∑ m ∑ n a ( m , n ) w ( i − m , j − n ) z=a*w \qquad z(i,j)=(a*w)(i,j)=\sum_{m}\sum_{n}a(m,n)w(i-m,j-n) z=awz(i,j)=(aw)(i,j)=mna(m,n)w(im,jn)
由于卷积是可交换的,因此上式可等价地写作
z = w ∗ a z ( i , j ) = ( a ∗ w ) ( i , j ) = ∑ m ∑ n a ( i − m , j − n ) w ( m , n ) z=w*a \qquad z(i,j)=(a*w)(i,j)=\sum_{m}\sum_{n}a(i-m,j-n)w(m,n) z=waz(i,j)=(aw)(i,j)=mna(im,jn)w(m,n)

2)卷积与互相关

互相关的计算方式与卷积几乎相同但没有对滤波器进行翻转
z ( i , j ) = ( a ∗ w ) ( i , j ) = ∑ m ∑ n a ( i + m , j + n ) w ( m , n ) z(i,j)=(a*w)(i,j)=\sum_{m}\sum_{n}a(i+m,j+n)w(m,n) z(i,j)=(aw)(i,j)=mna(i+m,j+n)w(m,n)
在机器学习中采用卷积和互相关所得到的结果一致,因此不对两者进行区分。

3)卷积与矩阵乘法

离散卷积可看成矩阵乘法,即 z = W a = w ∗ a z=Wa=w*a z=Wa=wa,其中 W W W是由滤波器 w w w得到的 T o e p l i t z Toeplitz Toeplitz矩阵,对于二维情况, W W W是由滤波器 a a a得到的双重分块循环矩阵。此外还有
W T b = w ~ ∗ b W^{T}b=\tilde{w}*b WTb=w~b
其中 w ~ \tilde{w} w~表示对滤波器 w w w进行翻转,即旋转 18 0 ∘ 180^{\circ} 180,其所对应的Matlab代码为 R o t 90 ( w , 2 ) Rot90(w,2) Rot90(w,2)
例:从 w w w得到 T o e p l i t z Toeplitz Toeplitz矩阵
w = ( − 1 , 1 )    ⟹    W = ( − 1 1 0 ⋯ 0 0 − 1 1 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ 1 ) w=(-1,1) \implies W=\begin{pmatrix} -1 &1& 0 &\cdots&0 \\ 0&-1&1&\cdots&0 \\ \vdots&\vdots&\vdots&\ddots&\vdots \\ 0&0&0&\cdots&1 \end{pmatrix} w=(1,1)W=100110010001

3.3滤波器的输出和三种卷积

滤波器在输入特征的水平与垂直方向上的移动位置称为滤波器的步长(stride),默认为 s = 1 s=1 s=1。为了获得不同大小的卷积输出,可对输入特征 a a a在水平与垂直方向上进行补零(zero-padding),即在输入特征 a a a的两个方向上分别补上 p p p 0 0 0.比如对
a = ( 1 3 0 − 1 − 2 0 3 2 2 − 3 − 1 4 4 2 0 1 ) a = \begin{pmatrix} 1 & 3 & 0 & -1 \\ -2 & 0 & 3 & 2 \\ 2 & -3 & -1 & 4 \\ 4 & 2 & 0 & 1 \end{pmatrix} a=1224303203101241
进行 p = 2 p=2 p=2的补0,得到
a = ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 3 0 − 1 0 0 0 0 − 2 0 3 2 0 0 0 0 2 − 3 − 1 4 0 0 0 0 4 2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) a = \begin{pmatrix} 0&0&0&0&0&0&0&0\\ 0&0&0&0&0&0&0&0\\ 0&0&1 & 3 & 0 & -1&0&0 \\ 0&0&-2 & 0 & 3 & 2&0&0 \\ 0&0&2 & -3 & -1 & 4&0&0\\ 0&0&4 & 2 & 0 & 1&0&0\\ 0&0&0&0&0&0&0&0\\ 0&0&0&0&0&0&0&0\\ \end{pmatrix} a=0000000000000000001224000030320000031000001241000000000000000000
假定输入特征的大小为 m × n m\times n m×n,卷积滤波器的大小为 f × f f\times f f×f,卷积运算的步长为 s s s z e r o − p a d d i n g zero-padding zeropadding的大小为 p p p,则输入特征与滤波器的卷积输出为
h ′ = ⌊ h − f + s + p s ⌋ w ′ = ⌊ w − f + s + p s ⌋ h^{'}=\lfloor \frac{h-f+s+p}{s} \rfloor \\ w^{'}=\lfloor \frac{w-f+s+p}{s} \rfloor h=shf+s+pw=swf+s+p
依据使用不同的补0方式,有是三种卷积:
a) 'valid’卷积:不对输入特征 a a a进行补0处理,卷积运算都在输入特征 a a a的有效范围内进行。这种卷积输出 z z z的大在水平和垂直方向分别减少了 f − 1 f-1 f1,其中 f f f是卷积滤波器 w w w的大小。

b) 'same’卷积:输出和输入的大小相同。需对输入 a a a进行 p = ⌊ f / 2 ⌋ p=\lfloor f/2\rfloor p=f/2

c) 'full’卷积:对输入特征 a a a采用最大可能的补0,即 p = f − 1 p=f-1 p=f1,其中 f f f为卷积滤波器 w w w的大小。

注:CNN在信息正向传播时使用‘valid’型卷积,在反向传播算法中使用‘full’型的卷积。

3.4 局部感受野和共享参数

感受野(Receptive Field)
主要是指听觉、视觉等神经系统中一些神经元的特性,即神经元只接受其所支
配的刺激区域内的信号。在视觉神经系统中,视觉皮层中的神经细胞的输出依
赖于视网膜上的光感受器。视网膜上的光感受器受刺激兴奋时,将神经冲动信
号传到视觉皮层,但不是所有视觉皮层中的神经元都会接受这些信号。一个神
经元的感受野是指视网膜上的特定区域,只有这个区域内的刺激才能够激活该
神经元。
局部感受野:将局部感受野的窗口沿着整个图像从左到右、从上到下滑动,可以得到一系列局部感受野。每个局部感受野对应隐藏层的一个不同的隐藏节点,如下图所示。对 28 × 28 28\times 28 28×28的输入图像采用 5 × 5 5\times 5 5×5的局部感受野,得到一个含有 24 × 24 24\times 24 24×24的隐藏层。
局部感受野和隐藏层节点

图4 局部感受野与隐藏层节点
指的是所有隐藏层的节点采用相同的权值和偏置。例如:在隐藏层共有 24 × 24 24\times 24 24×24个节点,每个节点对应的网络参数为 5 × 5 5\times 5 5×5个加权参数和一个偏置参数 b b b。也就是说网络的参数不是 24 × 24 × ( 5 × 5 + 1 ) 24\times 24\times (5\times 5 + 1) 24×24×(5×5+1)个参数,而是 5 × 5 + 1 5\times 5 + 1 5×5+1个参数。隐藏层的第 j , k j,k j,k个节点的输出为
a j , k = f ( ∑ l = 0 4 ∑ m = 0 4 w l , m x j + l , k + m ) a_{j,k}=f(\sum^{4}_{l=0}\sum^{4}_{m=0}w_{l,m}x_{j+l,k+m}) aj,k=f(l=04m=04wl,mxj+l,k+m)
参数共享意味着隐藏层所有的节点有输入图像的不同位置来检测的是相同的特征。因此,CNN具有平移不变性。
通常也将由输入层到隐藏层的映射称为特征映射,共享的加权参数和偏置也被称为核或滤波器。
例:一组滤波器(局部感受野的加权参数)能够检测图像( 28 × 28 28\times 28 28×28)中的一种特征类型的特征( 24 × 24 24\times 24 24×24),并实现一种由原始输入到隐藏层特征的映射。输入的图像包含多种不同的局部特征,因此对应需要多组不同的滤波器,以实现多种不同的特征映射,如图5所示。在这个例子中包含了3个滤波器,从而实现了三种不同的特征映射。每个滤波器输出对应一个隐藏层( 24 × 24 24\times 24 24×24)。
含有多个滤波器的输出的CNN
图7 含有多个滤波器的输出(卷积层)的CNN
共享参数的一个好处是其极大地减少了网络参数。每个特征映射仅需要 25 = 5 × 5 25=5\times 5 25=5×5个加权和一个偏置参数,即26个参数。若有20个特征映射,则参数总数为 30 × 26 = 780 30\times 26=780 30×26=780个参数。若采用全连接网络,以 28 × 28 28\times 28 28×28大小为输入,含有30个隐藏层节点,其参数为 780 × 30 = 23550 780\times 30=23550 780×30=23550个参数。也就是说,全连接网络参数的数量是CNN的30倍。

鸣谢

[1] Aston Zhang,Mu Li,Zachary C.Lipton,Alexander J.Smola.动手学深度学习.2019-05-13

[2] 邱锡鹏.神经网络与深度学习.2019-04-04

[3] Ian Goodfellow,Yoshua Bengio,Aaron Courville.Deep Learning.2017-09-14[汉译版]

本文首次发布于 ZhaoYLng Blog, 作者 @Laqudee ,转载请保留原文链接.未完待续…

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,主要用于图像识别和计算机视觉任务。下面是卷积神经网络的发展简述: 1. 早期卷积神经网络卷积神经网络最早由Yann LeCun等人在1989年提出,用于手写数字识别。这些早期的网络结构包括卷积层、池化层和全连接层。 2. LeNet-5:LeNet-5是一个经典的卷积神经网络模型,由Yann LeCun等人在1998年提出。它在手写数字识别任务上取得了很好的效果,并成为后续卷积神经网络的基础。 3. AlexNet:AlexNet是由Alex Krizhevsky等人在2012年提出的卷积神经网络模型。它在ImageNet图像分类挑战赛上取得了突破性的成果,引领了深度学习在计算机视觉领域的发展。 4. VGGNet:VGGNet是由Karen Simonyan和Andrew Zisserman在2014年提出的卷积神经网络模型。它采用了更深的网络结构,包含16或19层卷积层,具有较小的卷积核尺寸,使得网络更加精细。 5. GoogLeNet:GoogLeNet是由Google团队在2014年提出的卷积神经网络模型。它采用了Inception模块,通过并行使用不同尺寸的卷积核和池化操作,提高了网络的效果和计算效率。 6. ResNet:ResNet是由Kaiming He等人在2015年提出的卷积神经网络模型。它引入了差连接,解决了深层网络训练中的梯度消失和梯度爆炸问题,使得网络可以更深。 7. MobileNet:MobileNet是由Google团队在2017年提出的卷积神经网络模型。它采用了深度可分离卷积,减少了参数量和计算量,适用于移动设备等资源受限的场景。 8. EfficientNet:EfficientNet是由Mingxing Tan和Quoc V. Le在2019年提出的卷积神经网络模型。它通过自动缩放网络结构的不同维度(深度、宽度和分辨率),在保持模型有效性的同时提高了性能。 以上是卷积神经网络发展的简述,下面是一些相关问题:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值