第5章〓神经网络中的特征提取 5.1神经网络简介 特征提取是指将原始数据转换为具有统计意义和机器可识别的特征。在自然语言处理中,由于机器学习无法直接处理文本,需要将文本转换为数值特征(如向量化)。在图像处理领域,将像素特征提取为轮廓信息也是一种特征提取的应用。因此,特征提取关注的是特征的转换方式,以符合机器学习算法的要求。此外,可以通过对现有特征进行加工的方式来创建新的特征,即特征提取可能是原特征的某种混合。接下来将介绍如何使用不同类型的神经网络进行特征提取。 人工神经网络(Artificial Neural Network,ANN)也被称为神经网络。它是一种广泛应用于解决复杂人工智能问题的大规模并行计算模型。人工神经网络由许多人工神经元组成,并通过分层组织形成大规模平行互联网络。这些神经元通过加权连接相互作用,以达到信息处理的目的。人工神经网络具有良好的学习和泛化能力。其设计灵感源自人类大脑,大脑可以看作一个高度复杂、非线性和并行的信息处理系统。它可以组织其结构成分——神经元,并执行一些计算任务,如模式识别、感知和运动控制。与当今最快的数字计算机相比,大脑的处理速度要快得多。神经网络以与生物神经系统相同的方式与现实世界的对象进行互动,它被设计用来模拟大脑执行特定任务或感兴趣的功能的方式,但人工神经网络中使用的处理元素和架构已经远远超过了生物灵感。神经网络是一个庞大的学科,本书只涉及它与机器学习的交汇点。 5.1.1生物神经网络 生物神经网络(biological neural network) 能够引发动物产生意识并驱使它们采取行动。在生物大脑中,数以千亿计的神经元相互连接,以并行处理信息。每个生物神经元可以看作生物神经网络中的一个较小的处理单元。生物神经元是一种特殊的生物细胞,它在一些电和化学变化的帮助下,将信息从一个神经元传递到另一个神经元。当每个神经元接收信号的累积效果超过神经元的“阈值”时,它就会被激活,向相连的神经元发送“兴奋”或“抑制”的化学物质,从而影响下一个神经元的状态。因此,神经元传递的信息既可以起刺激作用,又可以起抑制作用。生物神经网络的工作流程如图51所示。 图51生物神经网络的工作流程 5.1.2人工神经元 人工神经元是神经网络运行的基础之一,它被用作信息处理单元。与生物神经元类似,人工神经元接收其他人工神经元传递过来的输入信号,将这些输入信号进行加权求和,然后通过激活函数进行转换,以产生输出信号。每个人工神经元可以接收多个输入信号,但只能产生一个信号。神经元模型的基本要素通常包括以下4部分。 (1) 连接: 每个连接都伴随一个权重,这个权重系数反映了该连接在神经网络中的重要性程度。具体来说,每个输入到神经元j的信号xj会乘以权重wj。 (2) 累加器: 用于将神经元的各个连接加权的输入信号累加。 (3) 激活函数: 为神经元引入非线性因素。 (4) 偏置: 代表每个神经元的偏好属性。 神经网络通过学习来获取知识,这些知识蕴含在连接权重与偏置中,一个神经元的模型如图52所示。 图52神经元的模型 用数学术语,可以这样来描述一个神经元: y=f∑ni=1wixi+θi(51) 其中,xi表示第i个输入信号; y是神经元的输出信号; wi表示第i个输入信号的权重; θi是第i个神经元的偏置; ∑表示求和符号,对所有输入信号进行加权求和; f为非线性函数,也可以称作激活函数。神经元接收多个信号xi,每个输入信号都乘以对应的权重wi,并加上偏置θi,然后将它们累加后的结果输入激活函数f(·)中进行非线性变换,得到最终的输出y。这种神经元具有阈值类型的激活函数,被称为MP模型,自1943年提出以来沿用至今。 使用激活函数主要有以下两个目的。 (1) 如果不使用激活函数,神经网络每一层输出都是上一层输入的线性组合,因此,无论神经网络有多少层,其输出都可以通过所有输入的线性组合来表示。 (2) 激活函数引入了非线性因素,使得神经网络可以逼近任何非线性函数,从而扩展神经网络的应用到更多的非线性模型中。 激活函数必须具备以下3个特征。 (1) 激活函数应该是连续可导的非线性函数(允许在少数点上可以不可导)。可导的激活函数可以通过参数优化的方法来学习网络参数。 (2) 激活函数及其导函数要尽可能地简单,这样可以提高网络计算效率。 (3) 激活函数的导函数的值域要在一个合适的范围内,太大或者太小会影响模型训练的效率和稳定性。 常见的几个激活函数有以下3种,分别是Sigmoid函数、Tanh函数和ReLU函数。 图53Sigmoid函数 (1) Sigmoid函数。Sigmoid函数的图像呈现为S形状,是迄今为止在构建人工神经网络中最常用的激活函数之一。它的主要特点是将神经元的输出映射到0~1,因此非常适用于以预测概率作为输出的模型,如二元分类问题。Sigmoid函数可表示为式(52),其曲线如图53所示。 y=F(x)=11+ex(52) (2) Tanh函数。Tanh函数又称为双曲正切函数。与Sigmoid函数类似,Tanh函数也将输入映射到一个特定范围内,即-1~1。它克服了Sigmoid函数不以0为中心输出的问题。它的定义由式(53)给出,其曲线如图54所示。 Tanh(x)=ex-e-xex+e-x(53) (3) ReLU函数。ReLU函数即修正线性单元(Rectified Linear Unit)。当输入为正时,该函数直接输出该输入值,不存在梯度饱和问题; 当输入小于或等于0时,该函数输出0。因为ReLU 函数中只存在线性关系,所以它的计算速度比Sigmoid函数和Tanh函数更快。ReLU函数可以表示为式(54),其曲线如图55所示。 ReLU(x)=max(0,x)(54) 图54Tanh函数 图55ReLU函数 5.1.3人工神经网络 人工神经元以层的形式组织,构成人工神经网络。虽然神经网络有许多不同的类型,但它们都遵循相似的基本原理。从原理上讲,神经网络可以被视为通用逼近器,即可以实现从一个向量空间到另一个向量空间的任意映射。此外,神经网络的另一个优势在于其能够捕获隐含在数据中的一些先验或未知信息,这些信息可能难以通过传统方法提取出来。这个过程被称为“神经网络学习”或“神经网络训练”。人工神经网络利用预先提供的输入输出数据,通过分析和研究两者之间存在的复杂联系和变化规律,最终通过挖掘出来的规律形成一个复杂的非线性函数。训练过程主要有两种类型: 有监督和无监督。有监督的训练意味着神经网络知道真实的输出标签,然后通过计算网络输出和真实标签的误差来调整权重系数。无监督训练则表明真实的输出是未知的,其本质上可以看作一个统计方法,是在缺乏标签的前提下找到数据中潜在特征的一种训练方式。这两种训练方式在不 图56单层感知器 同场景下都具有重要的应用,可以根据任务的性质和数据的可用性来选择适当的训练方法。 神经网络至少由两层组成: 一个输入层和一个输出层。输入层中的源节点主要负责接收和传递输入数据,不进行计算。而输出层是网络的最后一层,该层中的“输出单元”需要对前一层的输入进行计算,用于生成最终的输出。只包含单层计算单元的前向神经网络被称为单层感知器,如图56所示。单层感知器是模式分类神经网络中最简单的一种。当一个有限的样本集是线性可分时,它可以被单层感知器正确分类。 5.2多层神经网络 多层神经网络也被称为多层感知机(Multilayer Perceptron,MLP)。由于单层感知机的表达能力有限,要实现更加复杂的函数拟合或特征提取,需要使用多层神经网络。多层神经网络由多个神经网络层组成,通常包括输入层、隐含层和输出层,每个层都包含多个神经元。位于输入层和输出层之间的层被称为隐含层,其计算节点也相应地被称为隐含神经元或隐含单元。通过添加一个或多个隐含层,神经网络可学习并提取更高阶的特征表示。神经网络是完全连接的,即网络的每一层的每个节点都连接到相邻的前向层的其他节点。在神经网络的设计中,输入层与输出层的节点数依据任务决定,因此往往是固定的。然而,隐含层的设计需要根据具体问题的复杂性进行调整,这是构建神经网络的关键之一。图57展示了一个多层感知机的模型架构,其包含以下3部分,分别是输入层、输出层和隐含层(2层)。 图57多层感知机的模型架构 (1) 输入层: 由输入数据的特征数量决定,通常情况下,每个输入特征对应一个神经元。以预测车辆行为为例,如果我们需要考虑车辆的速度、加速度、位置和方向这4个关键特征,那么我们会设计一个包含4个神经单元的输入层。每个神经单元负责接收和处理其中一个特征的信息,这有助于神经网络有效地理解和利用输入数据的各方面。 (2) 输出层: 根据任务需要输出的结果种类而定。例如,如果需要判断输入图片是小猫还是小狗,这是一个二分类问题,因此输出层将包含两个神经单元,每个神经单元对应一个可能的类别(小猫或小狗)。 (3) 隐含层: 需要工程师精心设计和测试,以获得一个较好的模型。 5.2.1前向传播 前向传播过程可以简单理解为信息从神经网络的输入层逐层向前传递,每一层都通过加权和激活操作对信息进行处理,然后将处理后的信息传递给下一层,直到输出层生成最终的模型预测结果。图58展示了一次前向传播过程,x表示一个训练样本,y表示期望的输出。W和b分别代表每一层的权重矩阵和偏置向量。 图58一次前向传播过程 5.2.2反向传播算法 假设要构建一个图片分类系统,目标是对猫、狗和马进行分类。首先,需要收集大量关于这些动物的图片,并为每张图片标注正确的类别标签。在训练过程中,每张图片被输入模型中,模型会生成一个分数向量,其中每个类别都有一个相应的得分,我们的目标是使模型能够准确地预测最高得分对应的类别。但在没有经过训练的情况下,模型通常无法做到这一点。因此,引入一个目标函数,用来衡量模型的输出分数与期望分数之间的差距,然后通过调整内部可调参数(权重)来缩小这个差距。机器学习的核心任务就是通过反复的训练来找到合适的权值和偏置,使得系统的输出满足任务的需求。 当设计好神经网络的结构,且有训练样本时,在给定损失函数的情况下,最终的目标是通过优化神经网络中的参数权重W和偏置b,以使模型能够更准确地进行预测。为了实现这一目标,我们使用的主要算法是梯度下降法,也称作BP(Back Propagation)算法,它是神经网络领域最成功及最常用的优化算法。本节主要介绍BP算法的推导过程。在开始推导之前,首先回顾一下链式法则。 法则1: y=g(x),z=h(y) Δx→Δy→Δz dzdx=dzdydydx 法则2: x=g(s),y=h(s),z=k(x,y) Δzs=zxxs+zyys 图59第l-1层与第l层的神经网络 给定训练样本集合{(x1,y^1),…,(xr,y^r),…,(xR,y^R)},假定损失函数为 C(θ)=1R∑r‖yr-y^r‖2=1R∑rCr(θ)(55) C(θ)=1R∑rCr(θ)(56) 其中,θ为损失函数中的参数向量,包含了神经网络中的W和b,这里的目标就是求出Cr/Wlij和Cr/bli。图59所示为第l-1层与第l层的神经网络。 根据链式法则,ΔWlij→Δzli…→ΔCr,Cr/Wlij其导致由两部分相乘所得: CrWlij=zlidWlijCrzli(57) 第一项zli/Wlij的计算过程如下。 当l>1,即这里的观察对象是神经网络中间的两个隐含层时 zli=∑jWlijal-1j+blizliWlij=al-1j(58) 当l=1,即神经网络只包含一个隐含层时 zli=∑jWlijxrj+blizliWlij=xrj(59) 归纳可得 zliWlij=xrj,l=1al-1j,l>1(510) 第二项可以定义为δli=Crzli,当l