1、第8章 深度学习与神经网络第8章 深度学习与神经网络8.1 深度学习的基础深度学习的基础8.2 卷积神经网络卷积神经网络本章小结本章小结第8章 深度学习与神经网络8.1 深度学习的基础深度学习的基础深度学习(DeepLearning,DL)是机器学习(MachineLearning,ML)领域中一个新的研究方向。深度学习主要学习样本数据的内在规律和表示层次,学习过程中获得的信息对诸如文字、图像和声音等数据的解释有很大的帮助。深度学习的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。第8章 深度学习与神经网络深度学习的动机在于建立模拟人脑学习的神经网络,它通过模仿人
2、脑的机制来解释数据,如图像、声音和文本。深度学习的概念源于人工神经网络的研究,通过组合低层特征,形成更加抽象的高层属性或特征,以发现数据的分布特征。神经网络曾经是机器学习领域的热点研究方向之一,但后来慢慢淡出,原因主要包括以下两个方面:(1)容易过拟合,参数比较难调整,而且需要很多训练技巧。(2)训练速度慢,在层数比较少(小于3)的情况下的效果并不比其他方法更优。第8章 深度学习与神经网络第8章 深度学习与神经网络图8-1 MP模型第8章 深度学习与神经网络取反运算符(NOT 运算符)可以使用图8-2(a)所示的单输入单输出 MP模型来表示。使用取反运算符时,如果输入0,则输出1,如果输入1,
3、则输出0。把它们代入 MP模型的公式(8.1),可以得到wi=-2,h=-1。第8章 深度学习与神经网络图8-2 用 M P模型表示逻辑运算第8章 深度学习与神经网络逻辑或(OR运算符)和逻辑与(AND运算符)可以使用图8-2(b)所示的双输入单输出MP模型来表示。各运算符的输入与输出关系如表8-1所示。根据表8-1所示的关系,以 OR运算为例时,w1=1,w2=1,h=0.5,把它们代入式(8.1)可以得到:第8章 深度学习与神经网络第8章 深度学习与神经网络8.1.2 感知器感知器误差修正学习的公式如下:其中,是确定连接权重调整值的参数,r 是期望输出,y 是实际输出。增大,则误差修正速度
4、增加;减小,则误差修正速度降低。第8章 深度学习与神经网络感知器中调整权重的基本思路如下:(1)实际输出y 与期望输出r 相等时,wi和h 不变。(2)实际输出y 与期望输出r 不相等时,调整wi和h 的值。为了解决线性不可分等更复杂的问题,人们提出了多层感知器模型,如图8-3所示。第8章 深度学习与神经网络图8-3 多层感知器的结构第8章 深度学习与神经网络8.1.3 前向传播前向传播1.前向传播流程前向传播流程前向传播流程是指根据输入x 得到输出y 的过程。前向传播流程示意图如图8-4所示。第8章 深度学习与神经网络图8-4 前向传播流程第8章 深度学习与神经网络第8章 深度学习与神经网络
5、2.激活函数激活函数激活函数类似于人类神经元,用于对输入信号进行线性或非线性变换。MP模型中使用阶跃函数作为激活函数,多层感知器中使用 Sigmoid函数。利用输入层与中间层之间或中间层与输出层之间的连接权重wi 乘以相应单元的输入值xi,将该乘积之和 u 经Sigmoid函数计算即得到激活值:式中:第8章 深度学习与神经网络如图8-5(b)所示,使用Sigmoid函数时,对输入数据进行加权求和,如果得到的结果较大,则输出1,如果较小,则输出0。MP 模型中使用的是阶跃函数(如图8-5(a)所示),当u 等于0时,输出结果在0和1之间发生剧烈变动,而Sigmoid函数的曲线变化则较平缓。第8章
6、 深度学习与神经网络图8-5 Step函数和Sigmoid函数第8章 深度学习与神经网络3.损失函数损失函数损失函数用来估量模型的预测值f(x)与真实值y 的不一致程度,它是一个非负值函数,通常用L(y,f(x)来表示。损失函数是经验风险函数的核心部分,也是结构风险函数的重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可以表示成其中,等号右边第一项表示的是经验风险损失函数,L 表示的是损失函数;等号右边第二项是正则化项。第8章 深度学习与神经网络第8章 深度学习与神经网络2)SmoothL1损失函数在目标检测中常用到SmoothL1损失函数,其计算式如下:第8章 深度学习与神经网
7、络3)交叉熵损失函数交叉熵损失函数刻画的是两个概率分布之间的距离。交叉熵通过概率分布q 来表达概率分布p 的困难程度,其中p 为真实分布,q 为预测分布。交叉熵越小,两个概率分布越接近。在深度学习中,二分类通常通过Sigmoid函数作为预测输出,得到预测分布;对于多分类,则通过Softmax得到预测分布,具体公式如下:第8章 深度学习与神经网络8.1.4 后向传播后向传播1.链式法则链式法则链式法则是在反向传播(又称后向传播)过程中对各个映射中的可变参数进行求导的法则。该法则使映射中的各个可变参数接近想要的值,使误差更小。深度学习将多种映射叠加在一起,对输入进行多个映射处理。理论上,多个映射叠
8、加的表达能力将比单一的映射更强,对其进行优化后可以使误差变得更小。第8章 深度学习与神经网络假设误差(cost)的计算方式如下:式中:x 是输入,y 是目标值。第8章 深度学习与神经网络2.梯度下降梯度下降多层感知器中,输入数据从输入层输入,经过中间层,最终从输出层输出。因此,反向传播算法就是通过比较实际输出和期望输出得到误差信号,把误差信号从输出层逐层向前传播,再通过链式法则对误差函数求导来更新各层的连接权重以减小误差。权重的调整主要使用梯度下降法(GradientDescentMethod),如图8-6所示。第8章 深度学习与神经网络图8-6 梯度下降法第8章 深度学习与神经网络学习率是用
9、来确定权重连接调整程度的系数。将梯度下降法的计算结果乘以学习率,可得到权重调整值。如果学习率过大,则有可能修正间隔过大,导致损失无法收敛,训练效果不佳;反之,如果学习率过小,则收敛速度会很慢,导致训练时间过长。实际训练过程中一般会根据经验确定学习率,先设定一个较大的值,然后逐步减小训练率。第8章 深度学习与神经网络梯度下降法主要是对损失函数进行最小化的优化。目前常用算法有三种,分别是批量梯度下降(BatchGradientDescent,BGD)、随 机 梯 度 下 降(StochasticGradientDescent,SGD)、小批量梯度下降(Mini-BatchGradientDesce
10、nt,MBGD)。第8章 深度学习与神经网络1)批量梯度下降 BGD第8章 深度学习与神经网络由上述过程可以看到,在每个迭代过程中,每迭代一步,都要用到训练集中的所有数据。如果样本数目很大,则训练过程会很慢。同时,BGD 无法处理超出内存容量限制的数据集。BGD同样也不能在线更新模型,即在运行的过程中,不能增加新的样本。BGD 收敛如图8-7所示。第8章 深度学习与神经网络图8-7 BGD收敛第8章 深度学习与神经网络2)随机梯度下降SGD针对BGD训练速度过慢的缺点,提出了SGD。BGD每次迭代需把所有样本都过一遍,每训练一组样本就需要更新梯度;而SGD是从样本中随机抽出一组,训练后按梯度更
11、新一次,然后抽取一组,再更新一次。采用SGD,在样本量极大的情况下,在不用训练完所有样本的情况下就可以获得一个损失值在可接受范围之内的模型。但是,SGD伴随的一个问题是噪声较大,使得SGD并不是每次迭代都向整体最优化方向更新。SGD收敛如图8-8所示。第8章 深度学习与神经网络图8-8-SGD收敛第8章 深度学习与神经网络3)小批量梯度下降 MBGDSGD的计算速度快,但是也存在问题。由于单个样本的训练可能会带来很多噪声,使得SGD并不是每次迭代都向着整体最优化的方向,因此在刚开始训练时可能收敛得很快,但是训练一段时间后就会变得很慢。小批量梯度下降 BGD最终结合了BGD和SGD的优点,每次从
12、样本中随机抽取一小批数据进行训练,而不是一组。这样不仅可以减少参数更新的方差,还可以得到更加稳定的收敛结果。现在所说的SGD一般都指 MBGD,但是该方法也容易陷入局部最优。第8章 深度学习与神经网络3.参数修正参数修正上述梯度下降算法存在一些问题:第一,选择合适的学习率比较困难;第二,对所有的参数更新使用同样的学习率,更新不灵活;第三,容易收敛到局部最优,并且容易被困在鞍点。基于以上问题,研究人员提供了很多优化改进算法。第8章 深度学习与神经网络1)Momentum第8章 深度学习与神经网络图8-9 梯度更新第8章 深度学习与神经网络2)AdagradAdagrad是一种自适应学习速率的迭代
13、算法,主体的更新过程就是基础的梯度下降,而主要的改变在于学习速率,实现方法如下:第8章 深度学习与神经网络3)Adadelta和 RMSpropAdadelta和 RMSprop这两个方法都是为解决 Adagrad的缺点而提出的。在 Adadelta中通过衰减来使用最近梯度的平方,通过使用期望来保证它不会过大,而使学习率降为0。期望更新是带权重的,该权重称为衰减系数v,具体的公式如下:第8章 深度学习与神经网络RMSprop是 Adadelta的特例,具体的计算方法如下:式中:是衰减系数。第8章 深度学习与神经网络4)AdamAdam(AdaptiveMomentEstimation)是带有动
14、量项的 RMSprop,它利用梯度的一阶矩和二阶矩估计,动态调整每个参数的学习率。Adam 的优点主要在于经过偏置校正后,每一次迭代学习率都有确定范围,使得参数比较平稳。具体的公式如下:第8章 深度学习与神经网络第8章 深度学习与神经网络8.2 卷积神经网络卷积神经网络8.2.1 概述概述卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值参数的数量。该优点在网络输入是多维图像时表现得更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取过程。卷积神经网络是为识别二维形
15、状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜等变形具有高度不变性。第8章 深度学习与神经网络卷积神经网络是第一个真正成功训练多层网络结构的学习算法。它利用空间关系减少需要学习的参数数目,以提高一般反向传播算法的训练性能。在卷积神经网络中,图像作为层级结构的最底层的输入,信息依次传输到不同的层,每层通过一个数字滤波器去获得观测数据的最显著特征。该方法能够获取平移、缩放和旋转不变的观测数据的显著特征,因为图像的局部感受区域允许神经元或处理单元访问最基础的特征,例如,定向边缘或者角点。第8章 深度学习与神经网络8.2.2 卷积运算卷积运算1.卷积的基本原理卷积的基本原理在机器学习
16、的应用中,输入通常是多维数组的数据,核函数通常有多维数组参数并由学习算法优化,这些多维数组叫张量。我们经常在多个维度上进行卷积运算。例如,把一张二维图像I 作为输入,使用一个二维的卷积核 K,卷积过程可以表示为第8章 深度学习与神经网络卷积运算可交换性的出现是因为我们将核相对输入进行了翻转。从 m 增大的角度来看,输入的索引在增大,但是核的索引在减小。我们将核翻转的唯一目的是实现可交换性,尽管可交换性在证明时很有用,但在神经网络的应用中却不是一个重要的性质。与之不同的是,许多神经网络库会实现一个相关的函数,称为互相关函数,和卷积运算几乎一样,但是并没有对核进行翻转,互相关函数如下:第8章 深度
17、学习与神经网络许多机器学习库实现的是互相关函数,但是称之为卷积。本书中,我们把两种运算都叫作卷积,在与核翻转有关的上下文中,我们会特别指明是否对核进行翻转。在机器学习中,一个基于核翻转的卷积运算学习算法所学得的核是对未进行翻转的算法所学得的核的翻转。单独使用卷积运算在机器学习中是很少见的,卷积经常与其他的函数一起使用。无论卷积运算是否对它的核进行了翻转,这些函数的组合通常是不可交换的。第8章 深度学习与神经网络2.卷积的运算思想卷积的运算思想卷积运算依据三个关键方法来改进神经网络模型,分别是稀疏交互(SparseInteractions)、参数共享(ParameterSharing)、等变表示
18、(EquivariantRepresentations)。第8章 深度学习与神经网络1)稀疏交互传统的全连接神经网络使用矩阵乘法来建立输入与输出的连接关系。其中,参数矩阵中的每个参数都描述了一个输入单元与一个输出单元的关系。这意味着网络需要训练的参数太多,因此需要一种小幅度降低网络性能、大幅度减少训练参数的算法。稀疏交互(也叫作稀疏连接或稀疏权重)是指卷积神经网络最后的全连接层与输入层之间的“间接连接”是非全连接的。多次卷积可以找出一种合理的连接,使输入图片分成各种“小区域”,这种“小区域”再作为全连接层的输入。第8章 深度学习与神经网络2)参数共享参数共享(也叫作权重共享)是指在一个模型的多
19、个函数中使用相同的参数。在传统的神经网络中,当计算一层的输出时,权重矩阵的每一个元素只使用一次,当它乘以输入中的某个元素后就再不使用。在卷积神经网络中,核的每一个元素都作用在输入的每一个位置上。卷积运算中的参数共享保证我们只需学习一个参数集合,而不是对每个位置单独的参数集合都学习。这虽然没有改变前向传播的运行时间,但可以显著降低模型的存储需求。第8章 深度学习与神经网络3)等变表示等变是指一个函数的输入和输出以同样的方式改变的性质。对于卷积,参数共享的特殊形式使得神经网络层具有对平移变换等变的性质。第8章 深度学习与神经网络3.可分离卷积的运算可分离卷积的运算现代卷积神经网络的应用通常需要包含
20、超过百万个单元的网络。卷积等效于使用傅里叶变换将输入与核都转换到频域,执行两个信号的点乘,再使用傅里叶逆变换转换回时域。设计更快的卷积或近似卷积而不损害模型准确性的方法,是一个活跃的研究领域。甚至仅提高前向传播效率的技术也是有用的,因为在商业应用中,通常部署网络比训练网络还要耗资源。第8章 深度学习与神经网络8.2.3 网络结构网络结构卷积神经网络因其对于图像的缩放、平移、旋转等变换有着不变性,所以有着很强的泛化性。图 8-10是一个图像识别的 CNN 模型示意图。第8章 深度学习与神经网络图 8-10 图像识别的 CNN 模型示意图第8章 深度学习与神经网络1.基本组成基本组成卷积神经网络的
21、基本结构一般包括输入层、卷积层、池化层、全连接层和分类层。首先是输入层,即输入的图片等数据。在卷积层中,可以并行计算多个卷积产生一组线性激活响应,之后每一个线性激活响应将会通过一个非线性的激活函数。之后会通过池化层(也叫下采样层),可以有效缩减矩阵的尺寸,进一步减少参数量。经过若干层卷积和池化之后,再经过全连接层和分类层,进行最后的分类。第8章 深度学习与神经网络2.卷积层卷积层卷积层是卷积神经网络的核心构建块之一,它负责将特定的卷积核应用于输入图像的每个子区域进行卷积运算。卷积层由多个特定的卷积核单元构成,每一个特定的卷积核权值都是经过反向传播算法学习得到的。在计算过程中,卷积核里的每个参数
22、都可以看作传统神经网络里的参数,和相对应子区域的像素连接,把卷积核的权重和子区域中对应位置的像素值进行乘法后求和,一般还会加上偏置参数,从而计算出一个标量值。所有像素位置的标量值组合通常称为特征映射,如图8-11所示。第8章 深度学习与神经网络图8-11 特征映射第8章 深度学习与神经网络3.激活函数激活函数激活函数运行时,激活神经网络中某一部分神经元将激活信息向后传入下一层的神经网络。神经网络之所以能解决非线性问题,本质上就是激活函数加入了非线性因素,弥补了线性模型的表达力,把“激活的神经元的特征”通过函数保留并映射到下一层。激活函数不会更改输入数据的维度,也就是输入和输出的维度是相同的。第
23、8章 深度学习与神经网络1)Sigmoid函数这是传统神经网络中最常用的激活函数之一,如图8-12(a)所示,对应的公式如下:第8章 深度学习与神经网络2)Tanh函数Tanh函数具有软饱和性,它的输出以 0 为中心,收敛 速 度 比 Sigmoid 要 快,如 图8-12(b)所示,对应的公式如下:第8章 深度学习与神经网络图8-12 Sigmoid函数与 Tanh函数第8章 深度学习与神经网络3)ReLU 函数ReLU 函数是目前最受欢迎的激活函数。Softplus可以看作 ReLU 的平滑版本。ReLU定义为f(x)=max(x,0),Softplus定义为f(x)=log(1+exp(
24、x)。由图8-13可见,ReLU 在x0时硬饱和。第8章 深度学习与神经网络图8-13 Softplus与 ReLU 函数第8章 深度学习与神经网络4)Dropout函数在 Dropout函数中,一个神经元将以一定概率决定是否被抑制。如果被抑制,该神经元的输出就为00;如果不被抑制,那么该神经元的输出值将被放大到原来的1/keep_prob倍(keep_prob为不被抑制的比率)。第8章 深度学习与神经网络4.池化池化卷积神经网络中的池化实际上是一个向下采样的操作。池化函数使用某位置的相邻的总体统计特征来代替网络在该位置的输出,如最大池化函数(MaxPooling)、平均池化函数(Averag
25、ePooling)。图8-14所示为最大池化操作。第8章 深度学习与神经网络图8-14 池化和最大池化第8章 深度学习与神经网络5.结构化输出结构化输出卷积神经网络可以用于输出高维的结构化对象,而不仅仅是预测分类任务的类标签或回归任务的实数值。通常这个对象只是一个张量,由标准卷积层产生。例如,模型可以产生张量S,其中Si,j,k是网络的输入像素(j,k)属于类i的概率。经常出现的问题是输出尺寸可能比输入尺寸要小。例如,用于图像中对单个对象分类的常用结构,它的网络空间维数的最大减少来源于使用大步幅的池化层。为了产生与输入大小相似的输出映射,我们可以避免把池化放在一起。另一种策略是单纯地产生一张低分辨率的标签网格。第8章 深度学习与神经网络本本 章章 小小 结结深度学习技术以其无与伦比的自学习能力,在诸多视觉应用中都取得了举世瞩目的成果。本章首先介绍了深度学习的基础知识,包括神经元、感知器、前向传播、后向传播等;然后针对图像处理介绍了卷积神经网络,包括卷积运算和网络结构基本组成等。基于深度学习与神经网络的图像处理技术,使得更加复杂的图像处理应用成为可能。