卷积神经网络CNN模块化剖析


文章目录

  • 一、深度学习概述
    • 1.1 发展历程
    • 1.2 深度学习的兴起
    • 1.3 深度学习的特点
    • 1.4 深度学习的优势
  • 二、卷积神经网络剖析
    • 2.1 卷积层
    • 2.2 池化层
    • 2.3 非线性激活函数
    • 2.4 全连接层
    • 2.5 损失函数
    • 2.6 反向传播
    • 2.7 网络优化
  • 三、项目实战


一、深度学习概述

1.1 发展历程

上世纪60年代,Hubel等人通过对猫视觉皮层细胞的研究,提出了感受野这个概念。
到80年代,日本科学家福岛邦彦(Kunihiko Fukushima)提出Neocognitron(神经认知机),直接启发了后来的卷积神经网络。
1998年,Yann LeCun提出的卷积神经LeNet,首次提出了多层级联的卷积结构,可对手写数字进行有效识别。
2012年, Alex依靠卷积神经网络AlexNet夺得ILSVRC 2012比赛的冠军,吹响了卷积神经网络研究的号角。AlexNet成功应用了ReLu、Dropout、最大池化、LRN(Local Response Normalization,局部响应归一化)、GPU加速等新技术,启发了后续更多的技术创新,加速了卷积神经网络和深度学习的研究。从此,深度学习研究进入蓬勃发展的新阶段。
2014年Google提出的GoogleNet,运用Inception Module这个可以反复堆叠高效的卷积网络结构,获得了当年的ImageNet ILSVRC比赛的冠军,同年的亚军VGGNet全程使用3×3的卷积,成功训练了深度达19层的网络。
2015年,微软提出了ResNet,包含残差学习模块,成功训练了152层的网络,一举拿下当年ILSVRC比赛的冠军。
2019年3月27日 ——ACM宣布,深度学习的三位创造者Yoshua Bengio, Yann LeCun, 以及Geoffrey Hinton获得了2018年的图灵奖。
卷积神经网络CNN模块化剖析_第1张图片
Hinton最重要的贡献:1983年发明的玻尔兹曼机(Boltzmann Machines),1986年发明反向传播的论文“Learning Internal Representations by Error Propagation”,AlexNet,在计算机视觉领域掀起一场革命。

Yann LeCun:代表贡献之一是卷积神经网络,拓展了神经网络的应用范围。

Bengio的贡献:在1990年代发明的Probabilistic models of sequences。发表了划时代的论文“A Neural Probabilistic Language Model”,使用高维词向量来表征自然语言。

1.2 深度学习的兴起

传统方法的瓶颈:人工设计特征是浅层特征,无法有效刻画对象的变化,所采用的识别网络是浅层网络。

浅层学习:2006年前,多种浅层机器学习模型被提出,如感知机、BP神经网络、支持向量机等。这些模型的结构基本上可以看成带有一层隐层节点,或没有隐层节点的神经网络结构。

兴起的标志:2006后,深度学习之父Hinton在《科学》杂志提出神经网络的深度学习方法,自此开启了深度学习在学术界和工业界的浪潮。

深度学习的动机:更复杂的分布往往需要更深层的网络结构。更深层次的网络具有更强的非线性拟合能力

1.3 深度学习的特点

1)与人脑相似的信息处理:从低层到高层的深层次特征抽象。
2)深层结构实现更复杂的非线性拟合。其本质是解决思路为维度空间映射,深层结构能够实现更复杂的非线性拟合。
3)深度特征的自动提取:利用反向传播自动学习深度特征。

1.4 深度学习的优势

1)更优的大数据学习能力:与传统机器学习算法相比,深度网络的结构可以随数据的增加而充分挖掘数据内在的分布规律,获得更优的性能。
2)更高层的特征提取机制:经典的机器学习算法需要复杂的特征提取过程。而深度神经网络可自适应地学习特征提取器,降低人工参与。
3)更优异的泛化性能:与传统的ML算法相比,深度学习可通过迁移学习实现不同图像域的域自适应学习能力,从而更容易适应不同的领域和应用。

深度学习产业化的核心要素:数据+运算能力+神经网络

二、卷积神经网络剖析

一般的卷积神经网络由以下几个层组成:卷积层,池化层,非线性激活函数,全连接层。这四者构成了常见的卷积神经网络。当然,损失函数也至关重要,还有各种各样的网络的优化,使得网络准确率更高。
卷积神经网络CNN模块化剖析_第2张图片

2.1 卷积层

卷积层:卷积层是一个卷积神经网络最重要的部分,也是卷积神经网络得名的缘由。卷积层中每一个节点的输入是上一层神经网络的一小块,卷积层试图将神经网络中的每一个小块进行更加深入地分析从而得到抽象程度更高的特征。

CNN正式通过卷积的方式实现输入特征的提取和变换映射,从而获得数据的特征表示。卷积层本质上执行的是相关计算。
卷积神经网络CNN模块化剖析_第3张图片
步长:卷积核移动的距离(包括下和左)。步长为n,则每次移动n个数值。
卷积神经网络CNN模块化剖析_第4张图片
卷积后数据大小变化了,不再是原来数据的尺寸,怎么办?
在原始数据周围补充0,以保持卷积后的数据大小与输入数据一致。即为padding操作。
卷积神经网络CNN模块化剖析_第5张图片
可根据需要设定补零的层数, 是一个可以设置的超参数, 但要根据卷积核的大小, 步幅, 输入矩阵的大小进行调整, 以使得卷积核恰好滑动到边缘。

一般情况下, 输入的图片矩阵以及后面的卷积核, 特征图矩阵都是方阵, 这里设输入矩阵大小为 w w w, 卷积核大小为 k k k, 步幅为 s s s, 补零层数为 p p p, 则卷积后产生的特征图大小计算公式为:
在这里插入图片描述
通常卷积层会使用多个滤波器实现特征的提取,如果将不同滤波器的输出级联起来,卷积层的输出可以看成是三维矩阵。
卷积神经网络CNN模块化剖析_第6张图片
生成数据的深度:由滤波器的数量决定。
生成数据每一层的宽和高:由滤波器的大小和步长决定
卷积神经网络CNN模块化剖析_第7张图片
在输出的某个位置 ( w , h ) (w,h) (w,h)沿着depth方向汇聚着不同滤波器提取的特征.
随着网络层的深入,卷积层抽取的特征逐渐由底层细化的边缘信息向高层抽象的语义信息过渡。

通常图片有红绿蓝(RGB)三个颜色通道(Channel),那一个滤波器也需要三层滤波器对每个颜色通道进行过滤,于是6x6x3的图片经过3x3x3的滤波器过滤之后最终会得到一个4x4x1的图片,此时输出层图片的深度就是1。

思考:为什么用卷积?
计算量更低,并能保证性能

卷积神经网络CNN模块化剖析_第8张图片
局部连接实现权值共享、稀疏连接、等变表示。

稀疏连接:卷积核的连线数量相比于全连接的连线数量极为稀疏。

等变表示:处于卷积网络更深层中的单元,他们的接受域要比处于浅层单元的接收域更大。如果网络还包含类似步幅卷积或者池化之类的结构特征,这种效应会加强。

局部感受野:由于图像的空间联系是局部的,每个神经元不需要对全部的图像做感受,只需要感受局部特征即可,然后在更高层将这些感受得到的不同的局部神经元综合起来就可以得到全局的信息了,这样可以减少连接的数目。

权值共享:不同神经元之间的参数共享可以减少需要求解的参数,使用多种滤波器去卷积图像就会得到多种特征映射。权值共享其实就是对图像用同样的卷积核进行卷积操作,也就意味着第一个隐藏层的所有神经元所能检测到处于图像不同位置的完全相同的特征。其主要的能力就能检测到不同位置的同一类型特征,也就是卷积网络能很好的适应图像的小范围的平移性,即有较好的平移不变性(比如将输入图像的猫的位置移动之后,同样能够检测到猫的图像)

2.2 池化层

用滤波器进行窗口滑动过程中,实际上"重叠"计算了很多冗余的信息,而池化操作就是去除这些冗余信息,并加快运动。

思考:池化层有什么作用?
1)池化用于降低尺度,从而避免大尺度所带来的高计算负担。
2)通过降低特征的分辨率使得特征对平移和其他形式变形的敏感度降低,增强特征的鲁棒性。
3)此外,池化层还能够降低特征维度(相比使用所有提取得到的特征),改善网络输出(不容易过拟合)

池化操作包括最大池化操作Max Pooling平均池化操作Mean Pooling
卷积神经网络CNN模块化剖析_第9张图片

2.3 非线性激活函数

通常需要对卷积层和全连接层的输出使用激活函数进行处理,提升CNN的性能。

• 常用的非线性激活函数:
卷积神经网络CNN模块化剖析_第10张图片
卷积神经网络CNN模块化剖析_第11张图片

1.整流线性单元(Relu)使用激活函数
在这里插入图片描述
整流线性单元易于优化,整流线性单元在其一半的定义域上输出为零。
这使得只要整流线性单元处于激活状态,它的导数都能保持较大。它的梯度不但大而且一致,一阶导数处处为1。

整流线性单元通常作用于仿射变换之上:
在这里插入图片描述
整流线性单元的一个缺陷是它们不能通过基于梯度的方法学习那些使它们激活为零的样本。

整流线性单元的3个扩展:基于当 z i < 0 z_i<0 zi<0时使用一个非零的斜率 α i α_i αi
在这里插入图片描述
1)绝对值整流:固定 α i = − 1 α_i=-1 αi=1 来得到 g ( z ) = ∣ z ∣ g(z)=|z| g(z)=z
2)渗漏整流线性单元(Leaky ReLU):将 α i α_i αi 固定成一个类似0.01的小值,
3)参数化整流线性单元(parametric ReLU)或者 PReLU 将 α i α_i αi作为学习的参数。

2.maxout单元(maxout unit)进一步扩展了整流线性单元。maxout单元将z划分为每组具有k个值的组,
在这里插入图片描述
这里 G ( ( i ) ) G^((i)) G((i)) 是组 i i i的输入索引集 { ( i − 1 ) k + 1 , … , i k } \{(i-1)k+1,…,ik\} {(i1)k+1,,ik}

maxout单元具有抵抗一种被称为灾难遗忘(catastrophic forgetting)的现象,这个现象是说神经网络忘记了如何执行它们过去训练的任务.

原因:每一组中可以容许一些冗余来保存之前训练的知识。

3.logistic sigmoid与双曲正切函数
之前,大多数神经网络使用 logistic sigmoid 激活函数:
在这里插入图片描述
或者是双曲正切激活函数
在这里插入图片描述
这些激活函数紧密相关,因为 t a n h ⁡ ( z ) = 2 σ ( 2 z ) − 1 tanh⁡(z)=2σ(2z)-1 tanh(z)=2σ(2z)1
卷积神经网络CNN模块化剖析_第12张图片
sigmoid单元作为输出单元用来预测二值型变量取值为1的概率。sigmoid单元在其大部分定义域内都饱和——当z取绝对值很大的正值时,它们饱和到一个高值,当z取绝对值很大的负值时,它们饱和到一个低值,并且仅仅当z接近0时它们才对输入强烈敏感。sigmoid单元的广泛饱和性会使得基于梯度的学习变得非常困难。
卷积神经网络CNN模块化剖析_第13张图片
t a n h ⁡ ( 0 ) = 0 tanh⁡(0)=0 tanh(0)=0 σ ( 0 ) = 1 / 2 σ(0)=1/2 σ(0)=1/2 的意义上,前者更像是单位函数。

当必须要使用sigmoid激活函数时,双曲正切激活函数通常要比 logistic sigmoid函数表现更好。
sigmoid 激活函数在除了前馈网络以外的情景中更为常见,如循环网络、许多概率模型以及一些自编码器。

4:其他激活函数

径向基函数(radial basis function, RBF):这个函数在z接近模板 W : , i W_{:,i} W:,i时更加活跃。因为它对大部分 x x x都饱和到0,因此很难优化。

softplus函数 g ( a ) = ζ ( a ) = l o g ⁡ ( 1 + e a ) g(a)=ζ(a)=log⁡(1+e^a) g(a)=ζ(a)=log(1+ea)。这是整流线性单元的平滑版本,Glorot et al.比较了softplus和整流线性单元,发现后者的结果更好。
在这里插入图片描述
卷积神经网络CNN模块化剖析_第14张图片
硬双曲正切函数(hard tanh):它的形状和tanh以及整流线性单元类似,但是不同于后者,它是有界的,
在这里插入图片描述
上式最小为-1,最大为1。

针对非线性激活函数的设计仍然是一个活跃的研究领域,许多有用的隐藏单元类型仍有待发现。

2.4 全连接层

全连接层把卷积层的输出拉直成向量,然后使用传统的神经网络实现特征变换。
在这里插入图片描述

全连接层的作用:
• 把卷积层的输出转换为向量形式
• 可以通过内积运算实现
• 每个输出神经元与所有的输入神经元连接
卷积神经网络CNN模块化剖析_第15张图片
通常情况下,全连接层常加在卷积层后,进行结果的预测。

2.5 损失函数

我们到目前为止看到的线性模型和神经网络的最大区别,在于神经网络的非线性导致大多数我们感兴趣的代价函数都变得非凸。这意味着神经网络的训练通常使用迭代的、基于梯度的优化,仅仅使得代价函数达到一个非常小的值;而不是像用于训练线性回归模型的线性方程求解器,或者用于训练逻辑回归或SVM的凸优化算法那样保证全局收敛。

用于非凸损失函数的随机梯度下降没有这种收敛性保证,并且对参数的初始值很敏感。

和其他的机器学习模型一样,为了使用基于梯度的学习方法我们必须选择一个代价函数,并且我们必须选择如何表示模型的输出。深度神经网络设计中的一个重要方面是代价函数的选择。

在大多数情况下,我们的参数模型定义了一个分布 p ( y ∣ x ; θ ) p(y|x;θ) p(yx;θ)并且我们简单地使用最大似然原理。这意味着我们使用训练数据和模型预测间的损失作为代价函数。

如果我们对于同一个随机变量x有两个单独的概率分布 P ( x ) P(x) P(x) Q ( x ) Q(x) Q(x),我们可以使用KL散度( Kullback-Leibler (KL) divergence)来衡量这两个分布的差异:
在这里插入图片描述
举例:P和Q分别代表目标标签和网络输出标签,则KL散度刻画两个分布的相似性。

KL散度有很多有用的性质,最重要的是它是非负的。
KL散度为0当且仅当P和Q在离散型变量的情况下是相同的分布,或者在连续型变量的情况下是“几乎处处”相同的。
因为KL散度是非负的并且衡量的是两个分布之间的差异,它经常被用作分布之间的某种距离。
然而,它并不是真的距离因为它不是对称的:对于某些 P P P Q Q Q, D K L ( P ‖ Q ) ≠ D K L ( Q ‖ P ) D_KL (P‖Q) \neq D_{KL} ( Q‖P) DKL(PQ)̸=DKL(QP)

一个和KL散度密切联系的量是交叉熵(cross-entropy),即 H ( P , Q ) = H ( P ) + D K L ( P ‖ Q ) H(P,Q)=H(P)+D_{KL} (P‖Q) H(P,Q)=H(P)+DKL(PQ),它和KL散度很像但是缺少左边一项:
在这里插入图片描述
在这里插入图片描述
针对Q最小化交叉熵等价于最小化KL散度,因为Q并不参与被省略的那一项。

理解:x(类)在P的分布很大(即为目标类),则期望Q(x)的分布也很大,即输出概率要大,与我们的训练吻合。

在这里插入图片描述
代价函数的具体形式随着模型而改变,取决于 l o g ⁡ p m o d e l log ⁡p_{model} logpmodel的具体形式

如果 p m o d e l ( y │ x ) = N ( y ; f ( x ; θ ) , I ) p_{model} (y│x)=N(y;f(x;θ),I) pmodel(yx)=N(y;f(x;θ),I),那么我们就重新得到了均方误差代价:
卷积神经网络CNN模块化剖析_第16张图片
即:给定特征h,线性输出单元层产生一个向量 y = w T h + b y=w^T h+b y=wTh+b。线性输出层经常被用来产生条件高斯分布的均值:
在这里插入图片描述
最大化其对数似然此时等价于最小均方误差。

如果用Bernoulli输出,所对应的分布采用sigmoid单元

sigmoid单元输出定义为:

在这里插入图片描述
我们可以认为sigmoid输出单元具有两个部分。首先,它使用一个线性层来计算 z = w T h + b z=w^T h+b z=wTh+b 。接着,它使用sigmoid激活函数将 z z z转化成概率。

P ( y ) P(y) P(y)可由非归一化(和不为1)的概率分布 p ~ ( y ) \tilde{p}(y) p~(y)来得到。
卷积神经网络CNN模块化剖析_第17张图片
这种在对数空间里预测概率的方法可以很自然地使用最大似然学习。因为用于最大似然的代价函数是 − l o g ⁡ P ( y ∣ x ) -log⁡P(y|x) logP(yx),代价函数中的 l o g log log抵消了sigmoid 中的 e x p exp exp。它的损失函数为:
卷积神经网络CNN模块化剖析_第18张图片
卷积神经网络CNN模块化剖析_第19张图片
通过将损失函数写成softplus函数的形式,我们可以看到它仅仅在 ( 1 − 2 y ) z (1-2y)z (12y)z取绝对值非常大的负值时才会饱和。因此饱和只会出现在模型已经得到正确答案时——当 y = 1 y=1 y=1 z z z取非常大的正值时,或者 y = 0 y=0 y=0 z z z取非常小的负值时。

如果Multinoulli输出分布softmax单元
看作是sigmoid函数的扩展,softmax函数最常用作分类器的输出,来表示 n 个不同类上的概率分布。

softmax 函数的形式为:
卷积神经网络CNN模块化剖析_第20张图片
交叉熵为:
在这里插入图片描述
其中:
卷积神经网络CNN模块化剖析_第21张图片
多个样本下:
卷积神经网络CNN模块化剖析_第22张图片
对输出 x k ( n ) x_k^{(n)} xk(n) 经过softmax处理后,每一个 p ^ k ( n ) \hat{p}_k^{(n)} p^k(n)的取值范围被限定在 [ 0 , 1 ] [0,1] [0,1]之内,而且要满足 ∑ k = 1 K p ^ k ( n ) = 1 \sum_{k=1}^{K}\hat{p}_k^{(n)}=1 k=1Kp^k(n)=1。这时,某个 p ^ k ( n ) \hat{p}_k^{(n)} p^k(n)的增大势必会导致其他 p ^ k ( n ) \hat{p}_k^{(n)} p^k(n)减小。因此,在优化的时候只需要针对标签为 k k k的样本的输出值 p ^ k ( n ) \hat{p}_k^{(n)} p^k(n)进行优化,使其增大。
在这里插入图片描述
Softmax Loss 在二分类情况下的特殊情形 :
在这里插入图片描述

2.6 反向传播

反向传播是训练神经网络的常用方法,通过链式求导法则和梯度下降法,从最后一层到第一次,逐渐实现神经网络参数的训练。
与 BP神经网络一样, CNN 也是通过梯度下降和反向传播算法进行训练的, 则全连接层的梯度公式与 BP网络完全一样, 这里就不重复了. 下面介绍卷积层和池化层的梯度公式。
在这里插入图片描述
现在的目标是求出 δ i j δ_{ij} δij ∂ v i j ∂ w i j \frac{∂v_{ij}}{ ∂w_{ij}} wijvij的表达式. 首先求 δ i j δ_{ij} δij, 从一个简单情况开始.

设输入是 3×3的矩阵, 卷积核是 2×2 的矩阵.
(1) 当步长为 1 时, 则可得到 2×2的特征图矩阵. 如下图所示:
卷积神经网络CNN模块化剖析_第23张图片
绿色矩阵是第 l − 1 l−1 l1层神经元, 红色的是第 l l l 层, 黄色的是第 l l l层的卷积核, 图中省略掉了第 l − 1 l−1 l1 层的卷积核.。每个矩阵的元素可以看成一个神经元, 于是和 BP网络一样, 可以对每个神经元定义局部梯度, 为了看着清楚, 把矩阵的元素换成 δ δ δ. 神经网络中数值的传递也可以看成导数的传递. 假设已经求出了 δ l δ^l δl, 则 δ l − 1 δ^{l−1} δl1的计算公式为:
在这里插入图片描述
这是一个递归公式. δ δ δ, w w w, v v v 是矩阵形式, 公式中 rot180() 函数表示将矩阵逆时针旋转 180 180 180度, 参数 full 表示进行的完全的卷积运算, 这种运算形象的解释如下:
卷积神经网络CNN模块化剖析_第24张图片
首先将特征图矩阵补一圈零, 然后用权重矩阵对补零后的特征图矩阵进行 vaild 型卷积运算.。这里补零的层数等于卷积核矩阵的大小减去 1, full型 卷积的内涵在于使卷积从边缘开始, 即先计算 w 11 l δ 11 l { w^{l}_{11}} δ_{11}^l w11lδ11l, 然后是 w 12 l δ 11 l + w 11 l δ 12 l { w^{l}_{12}} {δ_{11}^l}+{ w^{l}_{11}} δ_{12}^l w12lδ11l+w11lδ12l, 以此类推。

(2) 当滑动步幅大于 1 时
卷积神经网络CNN模块化剖析_第25张图片
上图分别是步长为 1, 2 时的卷积过程, 可以发现步长为 1 是一个比较完全的卷积, 当步长增大时, 会跳过某些区域, 因此可以通过对特征图补零的方式将步幅为 2 时生成的特征图转换为步幅 1 的特征图, 然后直接利用前面推导的公式即可求出 δ l − 1 δ^{l−1} δl1. 补零如下图所示:
卷积神经网络CNN模块化剖析_第26张图片
(3) 当卷积核数目为 N 时, 与 BP 网络隐藏层神经元局部梯度计算类似, 每一个权重的改变, 都会影响到下一层每一个神经元输入的改变, 所以误差的反响传递需要把误差之和传到前一层, 则公式可简单地修改为
在这里插入图片描述
(4) 对于池化层的梯度传递, 情况就简单了一些, 下面以 Max Pooling 为例
卷积神经网络CNN模块化剖析_第27张图片
图中滑动窗口大小为 2×2, 步幅为 2, 则得到一个 2×2 的特征图, Max Pooling 方法是选择最大的数值作为输出, 由于过程中没有任何运算, 不存在梯度的变化, 所以误差可以直接由第 l l l 层传递到第 l − 1 l−1 l1 层, 如下图所示:
卷积神经网络CNN模块化剖析_第28张图片
图中假设四个角上的元素值最大, 则对应位置的局部梯度可直接反向传递, 其它位置由于没有连接, 则梯度设为 0.

如果池化类型是 Mean Pooling, 即取滑动窗口内的均值作为输出, 则将 l l l 层的梯度的 1 4 \frac{1}{ 4} 41 反向传递到 l − 1 l−1 l1 层, 如下图所示:
卷积神经网络CNN模块化剖析_第29张图片
到此为止已经推导出了不同情况下的 δ δ δ 的递归公式, 下面推导 ∂ v i j ∂ w i j \frac{∂v_{ij}}{ ∂w_{ij}} wijvij 的表达式. 下图所示, 为了表达清楚, 将符号做一些替换, 相对于第 l l l 层, 第 l − 1 l−1 l1层的输出变量符号可由 y y y 变为 x x x.
卷积神经网络CNN模块化剖析_第30张图片
根据卷积的原理, 可以得到:
卷积神经网络CNN模块化剖析_第31张图片
可以发现, 由于共享权重, 一个权重 w i j wij wij 的改变, 会影响所有的 y y y. 因而对某一个权重求梯度时, 需要运用全微分公式. 现在以 ∂ E ∂ w i j l \frac{∂E}{ ∂w_{ij}^l} wijlE 为例, 求得表达式:
在这里插入图片描述
同理可得:
卷积神经网络CNN模块化剖析_第32张图片
根据得到的结果, 可以发现计算 ∂ E ∂ w i j l \frac{∂E}{ ∂w_{ij}^l} wijlE 的规律:
卷积神经网络CNN模块化剖析_第33张图片
首先将前面的图中卷积核和特征图调换一下位置, 将特征图矩阵的元素替换为 δ δ δ, 将卷积核矩阵的元素替换为 E E E w w w 的偏导. 根据前面得到的偏导公式, 可以发现特征图对输入矩阵卷积可得到右边黄色的偏导矩阵. 即
在这里插入图片描述
公式中 w w w, δ δ δ, x x x 是以矩阵形式表达的. 同时, 可得到
卷积神经网络CNN模块化剖析_第34张图片

2.7 网络优化

1 反向传播算法(Back Propagation Algorithm)

反向传播是训练神经网络的常用方法,通过链式求导法则和梯度下降法,从最后一层到第一次,逐渐实现神经网络参数的训练。

卷积神经网络CNN模块化剖析_第35张图片
基于梯度下降的参数更新算法:
卷积神经网络CNN模块化剖析_第36张图片

使用最多的GD算法:Mini-batch SGD
结合了GD和SGD,对小批量数据使用梯度下降,是一种有效的参数更新方法
在这里插入图片描述
算法
卷积神经网络CNN模块化剖析_第37张图片
Mini-batch SGD 算法中,有两个需要预先设置的参数:权重衰减(weight decay),和动量系数(momentum)

Weight Decay:与2-范数配合使用,避免网络过拟合。取值较小,通常设置为 0.0005。
在这里插入图片描述
2 梯度消失
卷积神经网络CNN模块化剖析_第38张图片
对于sigmoid、tanh等激活函数,由于其导数值 σ ′ ( x ) {\sigma }'(x) σx在某些情况下接近于 0 ,导致传到网络底层的梯度数值很小,造成网络参数更新缓慢,难以收敛。

解决(减缓)办法:

1)使用ReLU激活函数
• ReLU激活函数的导数值非0即1
• 避免传统sigmoid激活函数导数值过低的问题
卷积神经网络CNN模块化剖析_第39张图片
2)Batch Normalization
• 对每一层的计算结果进行尺度归一化
• 收敛速度加速5~20倍
• 作为一种正则化技术可以提高网络的泛化能力
卷积神经网络CNN模块化剖析_第40张图片
卷积神经网络CNN模块化剖析_第41张图片
3)Dropout 连接方式提高网络性能
• 训练阶段通过随机地选择神经元进行网络训练
• 有效防止网络过拟合,提高泛化能力
卷积神经网络CNN模块化剖析_第42张图片
卷积神经网络CNN模块化剖析_第43张图片
好啦,搞懂了每个模块之后,就可以去看懂文章啦!现在很多改进、优化的方法,就是在这些模块上的改进。

三、项目实战

项目实战请转至:tensorflow学习笔记(七):CNN手写体(MNIST)识别。

系列相关论文:
1.BP神经网络的详细推导
2.用于图像分类的经典的卷积神经网络CNN
3.神经⽹络可以计算任何函数的可视化证明

你可能感兴趣的:(计算机视觉,机器学习,深度学习,数据挖掘与数据竞赛)