(三)有监督卷积神经网络

1 使用卷积提取特征

1.1 概述

前面的内容练习都是涉及低分辨率的图像,如小的图像块和手写字符。本节将对现实中的较大的图像进行扩展。

1.2 全连接网络

在稀疏的自动编码器中,我们所做的一个设计选择是将所有隐藏单元“全连接”到所有输入单元。在相对较小的图像上(例如,稀疏自动编码器任务中8x8块,MNIST数据集的28x28图像),在整个图像上全连接学习特征在计算上是可行的。然而,使用更大的图像(例如,96x96图像)在整个图像(全连接的网络)上的计算非常耗时。大约有104个输入单元,并且假设要学习100个特征,那么将有106个参数待学习。与28x28图像相比,前馈和反向传播计算也将减慢102倍。

1.3 局部连接网络

该个问题的一个简单的解决方法是限制隐单元和输入单元之间的连接,仅允许每个隐单元连接到输入单元的一小部分。具体来说,每个隐单元将仅连接到输入中一个小的像素区域。(对于与图像不同的输入模式,通常还有一种选择“连续组”输入单元以连接到单个隐单元的自然方式;例如,对于音频,隐单元可能仅连接到输入单元,这些单元对应于输入音频剪辑的一定时间间隔)
这种拥有局部连接网络的想法也吸引了早期视觉系统在生物学中的接轨。具体来说,视觉皮质中的神经元具有局部接受场(即,它们仅响应某一位置的刺激)。

1.4 卷积

自然图像具有“静止”的属性,这意味着图像的一部分的统计与任何其他部分相同。这表明我们在图像的一个局部区域学习的功能也可以应用于图像的其他部分,即我们可以在所有位置使用相同的功能。
更准确地说,在从较大图像中随机抽取的小(例如8x8)块上学习了特征,我们可以在图像中的任何地方应用这个学习的8x8特征检测器。具体来说,我们可以将学习到的8x8特征去“卷积”更大图像,从而在图像的每个位置获得不同的功能激活值。
给出一个具体的例子,假设您已经学习了从96x96图像采样的8x8块的功能。进一步假设这是用一个具有100个隐藏单位的自动编码器完成的。为了获得卷积特征,对于96x96图像的每8x8区域,即从(1,1),(1,2),…(89,89),你可以提取8x8的块,并通过训练好的稀疏自动编码器,以获取功能激活。这将导致100组89x89卷积特征。
ConV
在形式上,给出一些大的 r×r 图像 xlarge ,我们首先从这些图像中抽取的小的 a×b 个块 xsmall 上训练一个稀疏的自动编码器,学习 k 个特征f=σ(W(1)xsmall)+b(1)(其中 σ 是S形函数),由权重 W(1) 和偏差 b(1) 单位到隐藏单位。对于大图像中的每个 a×b xs ,计算 fs=σ(W(1)xs)+b(1) ,给定 fconvolved ,得到一个 k×(ra+1)×(cb+1) 的卷积特征矩阵。
在下一节中,我们进一步描述如何将这些功能“池化”在一起,以获得更好的分类特征。

2 池化

2.1 概述

在使用卷积获得特征后,接下来要使用它们进行分类。在理论上,可以使用所有提取的特征用于分类,但这可能在计算上是有挑战的。考虑例如大小为96x96像素的图像,并假设我们已经学习了超过8x8输入的400个特征。每个卷积产生大小(96-8+1)*(96-8+1)=7921的输出,并且由于有400个特征,这导致892*400=3,168,400的特征向量。学习具有300万个特征的输入的分类器可能是困难的,并且也容易过拟合。
为了解决这个问题,首先回顾一下,我们决定获取得卷积特征,因为图像具有“平稳性”属性,这意味着在一个区域中有用的特征也可能对其他区域有用。因此,为了描述大型图像,一种自然的方法是在不同位置聚合这些特征的统计。例如,可以计算图像区域上的特定特征的平均值(或最大值)。这些统计数据的维度要低得多(与使用所有提取的特征相比),并且还可以提高结果(不容易过拟合)。我们的聚合操作被称为这个操作“pooling”,或者有时候是“平均池化”或“最大池化”(取决于应用的池化操作)。
以下图像显示了如何通过图像的4个非重叠区域进行池化。
Pool

2.2 池化不变性

如果选择池化区域作为图像中的连续区域,并且仅从相同(复制)隐藏单元生成的池特征。然后,这些合并单位将是“平移不变”。这意味着即使图像经历(小)平移,相同(合并)功能也将是活动的。平移不变特征通常是可取的;在许多任务(例如,对象检测,音频识别)中,即使图像被平移,示例(图像)的标签也是相同的。 例如,如果您要使用MNIST数字并将其向左或向右平移,则无论最终位置如何,您都希望您的分类器仍然精确地将其分类为相同的数字。

2.3 形式化描述

正式地,在获得了前面所述的卷积特征之后,我们决定了该区域的大小,例如mxn来汇总我们的卷积特征。然后,我们将我们的卷积特征划分为不相交的mxn个区域,并且在这些区域上进行平均(或最大)特征激活以获得合并的卷积特征。 然后可以将这些合并的功能用于分类。
在下一节中,我们进一步描述如何将这些功能“pool”在一起,以获得更好的分类功能。

3 优化:随机梯度下降

3.1 概述

使用完整训练集来计算每次迭代中参数的下一次更新的批量方法(如LBFGS)易于收敛到局部最优。由于它们具有非常少的超参数需要调整,所以他们也提供了一个很好的现成实现(例如minFunc)。然而,数据集太大可能无法载入主存,或者在实际中计算整个训练集梯度的成本和耗时都很高。批量优化方法的另一个问题是,它们不能简单地将新数据并入“在线”设置。随机梯度下降(SGD)通过仅计算一个或几个训练样本来优化目标解决这两个问题。在完整的训练集上运行反向传播的成本较高,SGD可以克服这个成本,仍然可以快速收敛。

3.2 随机梯度下降

标准梯度下降算法将目标 J(θ) 的参数 θ 更新为,

θ=θαθE[J(θ)]

其中,上述等式中的期望值是通过评估整个训练集上的代价和梯度来近似的。随机梯度下降(SGD)仅使用一个或几个训练示例来计算参数的梯度。新的更新由给定的一对训练样本 (x(i),y(i)) 计算得到:

θ=θαθJ(θ;x(i),y(i))

通常,SGD中的每个参数更新都是与一个样本相对应或关于几个训练样本对应。其原因有两个:首先,这会减少参数更新的方差,并可以产生更好的收敛性;其次,这允许利用高度优化的矩阵操作来加快计算,这些矩阵操作可更好地计算成本和梯度。典型批处理大小尺寸为256。
在SGD中,学习率 α 通常远远小于批量梯度下降中相应的学习率,因为更新中存在更大的差异。选择适当的学习率和变化(即,随着学习进度而改变学习率的值)可能相当困难。在实践中工作良好的一种标准方法是使用足够小的恒定学习率,在初始时期(完全通过训练集)或两次训练中获得稳定的收敛,然后当因为收敛减慢时将学习率的值减半。一个更好的方法是在每个epoch之后评估一个固定的集合,并且当目标变化低于一个小的阈值时,降低学习率。另一个常用的方案是将每次迭代 t 的学习率按t=ab+t进行更新,其中 a b规定初始学习率。更复杂的方法包括使用回溯搜索来查找最佳更新。
关于SGD最后的一个且重要的一点是我们将数据传送给算法的顺序。如果数据以某种有意义的顺序给出,则可能会导致收敛性差。通常,避免这种情况的好方法是在每个训练epoch之前随机打乱数据。

3.3 动量

如果目标具有长的浅沟渠的分布,会导致两侧陡峭的墙壁,标准SGD将倾向于摆动在狭窄的沟谷上,因为负梯度将指向一个陡峭的边,而不是沿着山沟最佳。深层架构的目标在具最优状态附近具有这种形式,因此标准SGD可能会导致非常缓慢的收敛,特别是在最初的陡峭增长之后。动量是沿着浅沟渠更快地推动目标的一种方法。动量更新由下式给出:

υ=γυ+αJ(θ;x(i),y(i))θ=θυ

在上述方程中, υ 是与参数矢量 θ 具有相同维度的当前速度矢量。学习率 α 如上所述,但是当使用动量时,由于梯度的大小越大,所以 α 可能需要较小。最后, γ(0,1] 确定先前梯度在当前更新中的迭代次数,通常将 γ 设置为0.5,直到初始学习稳定然后增加到0.9或更高。

4 卷积神经网络

4.1 概述

卷积神经网络(CNN)由一个或多个卷积层(通常还有一个子采样步骤)组成,然后由标准多层神经网络中的一个或多个全连接层组成。CNN的架构旨在利用输入图像(或其他2D输入,如语音信号)的2D结构。这是通过局部连接和权重共享实现的,然后是某种形式的池化,这导致平移不变特征。CNN的另一个优点是,它们比具有相同数量的隐单元的全连接网络更容易训练并且具有更少的参数。在本文中,我们将讨论CNN的架构和反向传播算法来计算相对于模型参数的梯度,以便使用基于梯度的优化。有关这些特定操作的更多详细信息,请参阅有关卷积和池化的相关教程。

4.2 框架

CNN由多个卷积和子采样层组成,可选择接全连接层。卷积层的输入是一个 m×m×r 的图像,其中 m 是图像的高度和宽度,r是通道数,例如。RGB图像 r=3 。卷积层将具有尺寸为 n×n×q k 个滤波器(或核),其中n小于图像的尺寸,并且 q 可以等于通道数r或更小的值,并且每个核可能会有所不同。滤波器的大小产生了局部连接的结构,它们与图像卷积产生大小为 mn+1 k 特征图。然后每个图通常采用平均池化或最大值池化,合并在p×p大小连续区域上进行采样,其中对于小图像(例如MNIST), p 范围在2之间,对于较大的输入通常不大于5。在子采样层之前或之后,对每个特征图用加性偏差和S形非线性。下图显示了由卷积和子采样层组成的CNN中的各层。相同颜色的单元具有连接权重。
在卷积层之后,可能存在若干数量的全连接层。全连接层与标准多层神经网络中的层相同。
CNN
图1 待池化的卷积神经网络的第一层。相同颜色的单元具有连接权重,不同颜色的单元表示不同的滤波器图。

4.3 反向传播

δ(l+1)为网络第 l+1 层的误差项,网络代价函数为 J(W,b;x,y) ,其中 (W,b) 为参数, (x,y) 是训练数据和标签对。如果第 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)k=upsample((W(l)k)Tδ(l+1)k)f(z(l)k)

其中 k 为滤波器索引,且f(z(l)k)是激活函数的导数。上采样upsample操作必须通过计算输入池化层的每个单元的错误错误来传播错误。例如,如果我们采用均值池化,那么上采样简单地将单个池化单元的误差均匀地分配给在上一层中供给它的单元中。在最大池中,选择值最大的单元接收所有错误,因为输入的非常小的更改将仅通过该单元扰乱结果。
最后,为了计算关于滤波器图的梯度,我们再次关注于处理卷积运算的边界,并以与卷积层中的滤波器相同的方式翻转误差矩阵 δ(l)k

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)是输入图像。操作是第 l 层的第i个输入与第 k <script type="math/tex" id="MathJax-Element-271">k</script>个滤波器误差之间的“有效”卷积。
/##############################################################
一个卷积和池化的神经网络+Softmax损失前传和后传推理:
SimpleCNN

多个卷积和池化的神经网络+Softmax损失前传和后传推理:
FullCNN
/##############################################################

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值