Datawhale2021年11月组队学习——卷积神经网络

以下内容为对Datawhale2021年11月组队学习中“水很深的深度学习”课程的卷积神经网络的简要总结。
原文链接: https://datawhalechina.github.io/unusual-deep-learning/

卷积神经网络CNN

CNN的引出:全连接神经网络的权重矩阵的参数非常多,而且往往自然图像中的物体都具有局部不变性特征,即尺度缩放、平移、旋转等操作不影响其语义信息,但是全连接前馈网络很难提取这些局部不变特征,这就引出了我们将要介绍的卷积神经网络

卷积神经网络也是一种前馈神经网络,是受到生物学上感受野(感受野主要是指听觉系统、本体感觉系统和视觉系统中神经元的一些性质)的机制而提出的(在视觉神经系统中,一个神经元的感受野是指视网膜上的特定区域,只有这个区域内的刺激才能够激活该神经元)。

卷积

( f ∗ g ) ( n ) (f*g)(n) (fg)(n)成为 f 和 g 的卷积,连续卷积和离散卷积可以表达为如下形式:

  • 连续卷积 ( f ∗ g ) ( n ) = ∫ − ∞ ∞ f ( τ ) g ( n − τ ) d τ (f*g)(n)=\int_{-∞}^{∞}f(τ)g(n−τ)dτ (fg)(n)=f(τ)g(nτ)dτ
    n = τ + ( n − τ ) n=τ+(n−τ) n=τ+(nτ)
  • 离散卷积 ( f ∗ g ) ( n ) = ∑ − ∞ ∞ f ( τ ) g ( n − τ ) d τ (f*g)(n)=\sum_{-∞}^{∞}f(τ)g(n−τ)dτ (fg)(n)=f(τ)g(nτ)dτ

卷积的应用

卷积有很多应用,经常用于处理一个输入,通过系统产生一个适应需求的输出。
Datawhale2021年11月组队学习——卷积神经网络_第1张图片

  • 统计学中加权平均法
  • 概率论中两个独立变量之和概率密度的计算
  • 信号处理中的线性系统
  • 物理学的线性系统
  • 图像处理中的应用(卷积神经网络)

卷积经常用在信号处理中,用于计算信号的延迟累积。
例:
Datawhale2021年11月组队学习——卷积神经网络_第2张图片

不同的滤波器来提取信号序列中的不同特征:
Datawhale2021年11月组队学习——卷积神经网络_第3张图片

引入滤波器的滑动步长S和零填充P:

  • 步长( Stride):指卷积核在滑动时的时间间隔。
  • 零填充( Zero Padding):在输入向量两端进行补零。
    Datawhale2021年11月组队学习——卷积神经网络_第4张图片

卷积的结果按输出长度不同可以分为三类:

  • 窄卷积:步长 = 1 ,两端不补零 = 0 ,卷积后输出长度为 − + 1
  • 宽卷积:步长 = 1 ,两端补零 = − 1 ,卷积后输出长度 + − 1
  • 等宽卷积:步长 = 1 ,两端补零 =( − 1)/2 ,卷积后输出长度

早期文献的卷积默认为窄卷积,目前文献中一般默认为等宽卷积

在图像处理中,图像是以二维矩阵的形式输入到神经网络中,因此需要二维卷积。
二维卷积定义:
一个输入信息 X X X和滤波器 W W W 的二维卷积为:
Y = W ∗ X Y=W∗X Y=WX即:
∑ u = 1 U ∑ v = 1 V w u v x i − u + 1 , j − v + 1 \sum_{u=1}^{U}\sum_{v=1}Vw_{uv}x_{i-u+1,j-v+1} u=1Uv=1Vwuvxiu+1,jv+1

示例:
Datawhale2021年11月组队学习——卷积神经网络_第5张图片

Datawhale2021年11月组队学习——卷积神经网络_第6张图片

卷积层映射关系:
Datawhale2021年11月组队学习——卷积神经网络_第7张图片

多个卷积核的情况:下图是表示步长2、filter 3*3 、filter个数6、零填充 1的情形。
Datawhale2021年11月组队学习——卷积神经网络_第8张图片

特征图的计算:
典型的卷积层为3维结构
Datawhale2021年11月组队学习——卷积神经网络_第9张图片

转置卷积/微步卷积:低维特征映射到高维特征

  • 转置卷积
    Datawhale2021年11月组队学习——卷积神经网络_第10张图片

  • 微步卷积
    Datawhale2021年11月组队学习——卷积神经网络_第11张图片

  • 空洞卷积:为了增加输出单元的感受野,通过给卷积核插入“空洞”来变相地增加其大小。
    Datawhale2021年11月组队学习——卷积神经网络_第12张图片

卷积神经网络基本原理

卷积神经网络的基本结构大致包括:卷积层激活函数池化层全连接层输出层等。

卷积层:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mYHO4Nzb-1637814291057)(./]4W[V1ON{5R_FXT$]JUQKRI.png)]

卷积实际上就是互相关
Datawhale2021年11月组队学习——卷积神经网络_第13张图片

卷积的步长:卷积核移动的步长
Datawhale2021年11月组队学习——卷积神经网络_第14张图片

卷积的模式
Datawhale2021年11月组队学习——卷积神经网络_第15张图片

  • Full:从filter和image刚相交开始做卷积,白色部分为填充0。
  • same:当filter的中心(K)与image的边角重合时,开始做卷积运算。此外,same还有一个含义便是卷积之后输出的feature map尺寸相对于输入图片保持不变。
  • valid:当filter全部在image里面的时候,进行卷积运算。

数据填充:如果我们有一个 × 的图像,使用× 的卷积核进行卷积操作,在进行卷积操作之前我们在图像周围填充 层数据,输出的维度:
Datawhale2021年11月组队学习——卷积神经网络_第16张图片

感受野:卷积神经网络每一层输出的特征图(featuremap)上的像素点在输入图片上映射的区域大小,即特征图上的一个点对应输入图上的区域
Datawhale2021年11月组队学习——卷积神经网络_第17张图片

可以采用从后往前逐层的计算方法计算感受野的大小:

  • 第 i 层的感受野大小和第 i-1 层的卷积核大小和步长有关系,同时也与第 (i-1)层感受野大小有关。
  • 假设最后一层(卷积层或池化层)输出特征图感受野的大小(相对于其直接输入而言)等于卷积核的大小。

Datawhale2021年11月组队学习——卷积神经网络_第18张图片

卷积层的深度(卷积核个数):一个卷积层通常包含多个尺寸一致的卷积核
Datawhale2021年11月组队学习——卷积神经网络_第19张图片

激活函数

激活函数是用来加入非线性因素,提高网络表达能力,卷积神经网络中最常用的是ReLU,Sigmoid使用较少。
Datawhale2021年11月组队学习——卷积神经网络_第20张图片

Datawhale2021年11月组队学习——卷积神经网络_第21张图片

ReLU函数

D ( x ) = { 0 , x < 0 x , x ≥ 0 D(x) = \begin{cases} 0,&x<0 \\ x,&x≥0 \\ \end{cases} D(x)={0,x,x<0x0

ReLU函数的优点

  • 计算速度快,ReLU函数只有线性关系,比Sigmoid和Tanh要快很多
  • 输入为正数的时候,不存在梯度消失问题

ReLU函数的缺点

  • 强制性把负值置为0,可能丢掉一些特征
  • 当输入为负数时,权重无法更新,导致“神经元死亡”(学习率不要太大)

为什么会导致神经元死亡:
对于正例 y = W T X + b y=W^{T}X+b y=WTX+b,y_要变大,则更新权重W,使得W变大,负例y_要变小,更新权重W使得W变小,如果学习率设置较大,在遇到负例的时候,W会突然变的很小,会导致所有样本在某一结点处,全部输出为负数,这时,梯度无法经 ReLU 反向传播至 ReLU 的输入函数。也就是说,这个神经元的参数再也不会更新了,即神经元死亡。

Parametric ReLU

D ( x ) = { α x , x < 0 x , x ≥ 0 D(x) = \begin{cases} αx,&x<0 \\ x,&x≥0 \\ \end{cases} D(x)={αx,x,x<0x0

  • 当 =0.01 时,称作Leaky ReLU
    Datawhale2021年11月组队学习——卷积神经网络_第22张图片

  • 当 从高斯分布中随机产生时,称为Randomized ReLU(RReLU)
    Datawhale2021年11月组队学习——卷积神经网络_第23张图片

PReLU函数的优点

  • 比sigmoid/tanh收敛快
  • 解决了ReLU的“神经元死亡”问题

PReLU函数的缺点:需要再学习一个参数,工作量变大

ELU函数

D ( x ) = { α ( e x − 1 ) , x < 0 x , x ≥ 0 D(x) = \begin{cases} α(e^{x}-1),&x<0 \\ x,&x≥0 \\ \end{cases} D(x)={α(ex1),x,x<0x0

ELU函数的优点

  • 处理含有噪声的数据有优势
  • 更容易收敛

ELU函数的缺点:计算量较大,收敛速度较慢

对于激活函数的选取:

  • CNN在卷积层尽量不要使用Sigmoid和Tanh,将导致梯度消失。
  • 首先选用ReLU,使用较小的学习率,以免造成神经元死亡的情况。
  • 如果ReLU失效,考虑使用Leaky ReLU、PReLU、ELU或者Maxout,此时一般情况都可以解决

特征图

  • 浅层卷积层:提取的是图像基本特征,如边缘、方向和纹理等特征
  • 深层卷积层:提取的是图像高阶特征,出现了高层语义模式,如“车轮”、“人脸”等特征

池化层

池化操作使用某位置相邻输出的总体统计特征作为该位置的输出,常用最大池化(max-pooling)均值池化(average- pooling)
池化层不包含需要训练学习的参数,仅需指定池化操作的核大小操作步幅以及池化类型

池化的作用

  • 减少网络中的参数计算量,从而遏制过拟合
  • 增强网络对输入图像中的小变形、扭曲、平移的鲁棒性(输入里的微小扭曲不会改变池化输出——因为我们在局部邻域已经取了最大值/ 平均值)
  • 帮助我们获得不因尺寸而改变的等效图片表征。这非常有用,因为 这样我们就可以探测到图片里的物体,不管它在哪个位置

全连接层

  • 对卷积层和池化层输出的特征图(二维)进行降维
  • 将学到的特征表示映射到样本标记空间的作用

输出层

  • 分类问题,使用Softmax函数 y i = e z i ∑ i = 1 n e z i y_{i}=\frac{e^{z_{i}}}{\sum_{i=1}^{n}e^{z_{i}}} yi=i=1neziezi
  • 回归问题, 使用线性函数 y i = ∑ m = 1 M w i m x m y_{i}=\sum_{m=1}^{M}w_{im}x_{m} yi=m=1Mwimxm

卷积神经网络的训练

  • 1.用随机数初始化所有的卷积核和参数/权重
  • 2.将训练图片作为输入,执行前向步骤(卷积, ReLU,池化以及全连接层的前向传播)并计算每个类别的对应输出概率。
  • 3.计算输出层的总误差
  • 4.反向传播算法计算误差相对于所有权重的梯度,并用梯度下降法更新所有的卷积核和参数/权重的值,以使输出误差最小化

卷积核个数、卷积核尺寸、网络架构这些参数,是在第一步之前就已经固定的,且不会在训练过程中改变——只有卷 积核矩阵和神经元权重会更新。

Datawhale2021年11月组队学习——卷积神经网络_第24张图片

和多层神经网络一样,卷积神经网络中的参数训练也是使用误差反向传播算法,关于池化层的训练则是将池化层改为多层神经网络的形式

Datawhale2021年11月组队学习——卷积神经网络_第25张图片

Datawhale2021年11月组队学习——卷积神经网络_第26张图片

将卷积层也改为多层神经网络的形式
Datawhale2021年11月组队学习——卷积神经网络_第27张图片

经典卷积神经网络

Datawhale2021年11月组队学习——卷积神经网络_第28张图片

1. LeNet-5

LeNet-5由LeCun等人于1998年提出,主要进行手写数字识别和英文字母识别。是很经典的卷积神经网络,是学习卷积神经网络的基础。

网络结构
Datawhale2021年11月组队学习——卷积神经网络_第29张图片

  • 输入层 32 ∗ 32 32∗32 3232 的图片,也就是相当于1024个神经元
  • C1层(卷积层):选择6个 5 ∗ 5 5∗5 55 的卷积核,得到6个大小为 32 − 5 + 1 = 28 32-5+1=28 325+1=28的特征图,也就是神经元的个数为 6 ∗ 28 ∗ 28 = 4704 6∗28∗28=4704 62828=4704
  • S2层(下采样层):每个下抽样节点的4个输入节点求和后取平均(平均池化),均值乘上一个权重参数加上一个偏置参数作为激活函数的输入,激活函数的输出即是下一层节点的值。池化核大小选择 2 ∗ 2 2∗2 22,得到6个 14 ∗ 14 14∗14 1414 大小特征图.
  • C3层(卷积层):用 5 ∗ 5 5∗5 55的卷积核对S2层输出的特征图进行卷积后,得到6张 10 ∗ 10 10∗10 1010 新图片,然后将这6张图片相加在一起,然后加一个偏置项b,然后用激活函数进行映射,就可以得到1张 10 ∗ 10 10∗10 1010的特征图。我们希望得到 16 张 10 ∗ 10 10∗10 1010的特征图 , 因此我们就需要参数个数为 16 ∗ ( 6 ∗ ( 5 ∗ 5 ) ) = 16 ∗ 6 ∗ ( 5 ∗ 5 ) 16∗(6∗(5∗5))=16∗6∗(5∗5) 16(6(55))=166(55)个参数.
  • S4层(下采样层):对C3的16张 10 ∗ 10 10∗10 1010特征图进行最大池化,池化核大小为 2 ∗ 2 2∗2 22,得到16张大小为 5 ∗ 5 5∗5 55的特征图。神经元个数已经减少为: 16 ∗ 5 ∗ 5 = 400 16∗5∗5=400 1655=400.
  • C5层(卷积层):用 5 ∗ 5 5∗5 55的卷积核进行卷积,然后我们希望得到120个特征图,特征图大小为 5 − 5 + 1 = 1 5-5+1=1 55+1=1。神经元个数为120(这里实际上是全连接,但是原文还是称之为了卷积层).
  • F6层(全连接层):有84个节点,该层的训练参数和连接数都 ( 120 + 1 ) ∗ 84 = 10164 (120+1)∗84=10164 (120+1)84=10164.
  • Output层:共有10个节点,分别代表数字0到9,如果节点i的输出值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式:
    y i = ∑ j ( x − j − w i j ) 2 y_{i}= \sum_{j}(x-j-w_{ij})^{2} yi=j(xjwij)2

总结:卷积核大小、卷积核个数(特征图需要多少个)、池化核大小(采样率多少)这些参数都是变化的,这就是所谓的CNN调参,需要学会根据需要进行不同的选择。

2. AlexNet

AlexNet由Hinton的学生Alex Krizhevsky于2012年提出,获得ImageNet LSVRC-2012(物体识别挑战赛)的冠军,1000个类别120万幅高清图像(Error: 26.2%(2011) →15.3%(2012)),通过AlexNet确定了CNN在计算机视觉领域的王者地位。

  • 首次成功应用ReLU作为CNN的激活函数
  • 使用Dropout丢弃部分神元,避免了过拟合
  • 使用重叠MaxPooling(让池化层的步长小于池化核的大小), 一定程度上提升了特征的丰富性
  • 使用CUDA加速训练过程
  • 进行数据增强,原始图像大小为256×256的原始图像中重复截取224×224大小的区域,大幅增加了数据量,大大减 轻了过拟合,提升了模型的泛化能力

网络结构

Datawhale2021年11月组队学习——卷积神经网络_第30张图片

AlexNet可分为8层(池化层未单独算作一层),包括5个卷 积层以及3个全连接层

输入层:AlexNet首先使用大小为224×224×3图像作为输入(后改为227×227×3)

第一层(卷积层):包含96个大小为11×11的卷积核,卷积步长为4,因此第一层输出大小为55×55×96;然后构建一个核大小为3×3、步长为2的最大池化层进行数据降采样,进而输出大小为27×27×96

第二层(卷积层):包含256个大小为5×5卷积核,卷积步长为1,同时利用padding保证 输出尺寸不变,因此该层输出大小为27×27×256;然后再次通过 核大小为3×3、步长为2的最大池化层进行数据降采样,进而输出大小为13×13×256

第三层与第四层(卷积层):均为卷积核大小为3×3、步长为1的same卷积,共包含384个卷积核,因此两层的输出大小为13×13×384

第五层(卷积层):同样为卷积核大小为3×3、步长为1的same卷积,但包含256个卷积 核,进而输出大小为13×13×256;在数据进入全连接层之前再次 通过一个核大小为3×3、步长为2的最大池化层进行数据降采样, 数据大小降为6×6×256,并将数据扁平化处理展开为9216个单元

第六层、第七层和第八层(全连接层):全连接加上Softmax分类器输出1000类的分类结果,有将近6千万个参数

3. VGGNet

VGGNet由牛津大学和DeepMind公司提出
相较于AlexNet,VGG-16(比较常用,结构规整,具有很强的拓展性)网络模型中的卷积层均使用 3 ∗ 3 3∗3 33的卷积核,且均为步长为1的same卷积,池化层均使用 2 ∗ 2 2∗2 22的池化核,步长为2

网络结构
Datawhale2021年11月组队学习——卷积神经网络_第31张图片

  • 两个卷积核大小为 3 ∗ 3 3∗3 33的卷积层串联后的感受野尺寸为 5 ∗ 5 5∗5 55, 相当于单个卷积核大小为 5 ∗ 5 5∗5 55的卷积层
  • 两者参数数量比值为$(2∗3∗3)/(5∗5)=72% $,前者参数量更少
  • 此外,两个的卷积层串联可使用两次ReLU激活函数,而一个卷积层只使用一次

4. Inception Net

Inception Net 是Google公司2014年提出,获得ImageNet LSVRC-2014冠军。文章提出获得高质量模型最保险的做法就是增加模型的深度(层数)或者是其宽度(层核或者神经元数),采用了22层网络。

  • 深度:层数更深,采用了22层,在不同深度处增加了两个 loss来避免上述提到的梯度消失问题
  • 宽度:Inception Module包含4个分支,在卷积核3x3、5x5 之前、max pooling之后分别加上了1x1的卷积核,起到了降低特征图厚度的作用(1×1的卷积的作用:可以跨通道组织信息,来提高网络的表达能力;可以对输出通道进行升维和降维。)

Datawhale2021年11月组队学习——卷积神经网络_第32张图片

5. ResNet

ResNet(Residual Neural Network),又叫做残差神经网络,是由微软研究院的何凯明等人2015年提出,获得ImageNet ILSVRC 2015比赛冠军,获得CVPR2016最佳论文奖。

随着卷积网络层数的增加,误差的逆传播过程中存在的梯 度消失和梯度爆炸问题同样也会导致模型的训练难以进行,甚至会出现随着网络深度的加深,模型在训练集上的训练误差会出现先降低再升高的现象。残差网络的引入则有助于解决梯度消失和梯度爆炸问题

残差块

ResNet的核心是叫做残差块(Residual block)的小单元, 残差块可以视作在标准神经网络基础上加入了跳跃连接(Skip connection).

  • 原连接

a l + 1 = σ ( W l + 1 a l + b l + 1 ) a_{l+1}=σ(W_{l+1}a_{l}+b_{l+1}) al+1=σ(Wl+1al+bl+1)
a l + 2 = σ ( W l + 2 a l + 1 + b l + 2 ) a_{l+2}=σ(W_{l+2}a_{l+1}+b_{l+2}) al+2=σ(Wl+2al+1+bl+2)

Datawhale2021年11月组队学习——卷积神经网络_第33张图片

  • 跳跃连接

a l + 1 = σ ( W l + 1 a l + b l + 1 ) a_{l+1}=σ(W_{l+1}a_{l}+b_{l+1}) al+1=σ(Wl+1al+bl+1)
a l + 2 = σ ( W l + 2 a l + 1 + b l + 2 + a l ) a_{l+2}=σ(W_{l+2}a_{l+1}+b_{l+2}+a_{l}) al+2=σ(Wl+2al+1+bl+2+al)

Datawhale2021年11月组队学习——卷积神经网络_第34张图片

Datawhale2021年11月组队学习——卷积神经网络_第35张图片

6. Densenet

DenseNet中,两个层之间都有直接的连接,因此该网络的直接连接个数为L(L+1)/2。
对于每一层,使用前面所有层的特征映射作为输入,并且使用其自身的特征映射作为所有后续层的输入

Datawhale2021年11月组队学习——卷积神经网络_第36张图片

5层的稠密块示意图:
Datawhale2021年11月组队学习——卷积神经网络_第37张图片

DenseNets可以自然地扩展到数百个层,而没有表现出优化困难。在实验中,DenseNets随着参数数量的增加,在精度上产生一致的提高,而没有任何性能下降或过拟合的迹象。

优点

  • 缓解了消失梯度问题
  • 加强了特征传播,鼓励特征重用
  • 一定程度上减少了参数的数量

主要应用

图像处理领域

  • 图像分类(物体识别):整幅图像的分类或识别
  • 物体检测:检测图像中物体的位置进而识别物体
  • 图像分割:对图像中的特定物体按边缘进行分割
  • 图像回归:预测图像中物体组成部分的坐标

语音识别领域

  • 将卷积神经网络的思想应用到语音识别的声学建模中,则可以利用卷积的不变性来克服语音信号本身的多样性。

自然语言处理领域

  • 情感分析:分析文本体现的情感(正负向、正负中或多态度类型)

TextCNN 模型是由 Harvard NLP 组的 Yoon Kim 在2014年发表的 Convolutional Neural Networks for Sentence Classification 一文中提出的模型,由于 CNN 在计算机视觉中,常被用于提取图像的局部特征图,且起到了很好的效果,所以该作者将其引入到 NLP 中,应用于文本分类任务,试图使用 CNN 捕捉文本中单词之间的关系。

Datawhale2021年11月组队学习——卷积神经网络_第38张图片

你可能感兴趣的:(深度学习,人工智能,机器学习,计算机视觉)