计算机视觉中的深度学习
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1 神经元概述

大脑的基本感知单元是神经元。神经网络仿照了人类大脑的工作方式,也用神经元作为基本学习单元。本节介绍感知器、激活函数和神经元模型。

3.1.1 感知器

感知器也被称为神经认知机,是最简单的神经网络模型,它的灵感基于Hubel和Weisel等人对单个神经元行为的记录。生物神经元是人体中一种特殊的细胞,通常,研究人员认为它是生物智能的来源,由神经元组成的复杂的脑神经网络使生物更加聪明。神经元细胞由大量树突和一根由胞体发出的轴突组成,轴突末端有突触。当树突接收信息时,树突会向胞体发送冲动,如果胞体接收到的冲动满足阈值,冲动就会沿轴突传到末端的突触,然后由突触传给下一个神经元。也就是说,当神经元突触连接大量其他神经元树突时,可以构成复杂的生物神经网络。基于这种认知,人们建立了感知器的数学模型,用于模仿生物神经元,了解感知器是学习神经网络的第一步。

在深度学习发展历程中,感知器模型占有很特殊的历史地位——它是第一个具有完整算法描述的神经网络模型,其中的算法被称为感知器学习算法。1958年,心理学家Rosenblatt[1]提出了这个算法,因此它也叫作Rosenblatt感知器。感知器是用于线性分类的最简单的神经网络模型,它由一个具有可调树突权值和偏置的神经元组成。图3-1是感知器的结构图。

从图3-1可见一个感知器由三个部分构成,分别是感知器参数、求和单元和激活函数,感知器参数又包括感知器权重和偏置。感知器通常有多个输入,每个输入都有对应的权重,感知器的每一个输入都被权重加权,然后求和单元将所有结果以及相应偏置相加,最后用激活函数激活。感知器的输出结果可以表示为式(3-1),式(3-2)[2]将向量乘法写成分量的形式。

图3-1 感知器的结构

其中sgn表示符号函数,是感知器的激活函数,W是感知器权重向量,b是偏置,x是感知器输入向量,wixi分别是感知器权重向量和输入向量的分量。根据阶跃函数的特点,当输入小于等于0时,输出结果为0,此时感知器模仿生物神经元的非激活状态,当阶跃函数的输入大于0时,阶跃函数的输出结果为1,此时感知器模仿生物神经元的激活状态。

从逻辑运算上看,感知器具有一定的拟合能力,可以对输入进行二分类,也就是把输入数据分成两种类别,即0或1。单个感知器只能模拟and或or这样简单的逻辑运算,没办法模仿复杂的逻辑运算,比如xor,但多个感知器连接在一起可以获得模仿复杂逻辑运算的能力。

3.1.2 激活函数

研究人员设计复杂的神经网络结构不仅仅希望它可以解决简单的线性问题,这些问题不依靠神经网络也可以轻松解决。更加重要的是,研究人员希望神经网络可以解决非常复杂的非线性问题,例如图像压缩、音频检索、增强学习和图像分割。这种情况下,激活函数的作用就非常关键了,它们可以将非线性特性引入神经网络,对神经网络中一个节点的输入信号进行信息变换,从而增强神经网络的非线性表达能力。激活函数为神经元引入了非线性因素,如果不使用激活函数,无论神经网络有多少层,输出结果都会是输入信号的线性组合,而线性组合的复杂度是有限的,从大量数据中学习复杂关系的能力不足。因此在神经网络每层输出时,研究人员会设置激活函数对输出结果进行非线性变换,这个过程叫作激活。常用的激活函数有Sigmoid、Tanh、ReLU、Maxout、Softmax等。下面简单介绍这几种激活函数。

1.Sigmoid

Sigmoid函数是神经网络中最常用的激活函数之一,函数曲线如图3-2所示,其函数表达式如式(3-3)所示。

图3-2 Sigmoid函数曲线

在早期的神经网络中,Sigmoid函数是最常见的激活函数,因为它的输出在(0,1)这个开区间内,可以由此联想到概率,而神经网络需要解决的很多问题都与概率学相关。Sigmoid函数的优点是导数形式非常简单,能够极大地减少神经网络训练和测试时的运算量,但这个函数也存在很多缺点。从Sigmoid函数图像可以直观地看到,当输入值x>5或者x<-5的时候,Sigmoid函数曲线非常平缓,函数梯度非常小甚至接近0,而函数梯度接近于0会导致误差反向传播且更新参数时无法通过梯度传递到上一层,进而导致神经网络训练无法正常进行,这个现象叫作梯度消失,也称梯度弥散,这也是早期的神经网络只能搭建浅层神经网络的主要原因。除此之外,Sigmoid函数输出结果不是以0为中心,这会使参数更新效率降低。

2.Tanh

Tanh函数又被称为双曲正切函数,其函数表达式如式(3-4)所示,函数曲线如图3-3所示。

Tanh函数试图解决Sigmoid函数关于原点不对称的问题。由图像可知,将Sigmoid函数向下平移再收缩可以得到Tanh函数,Tanh函数的输出区间是(-1,1),而且整个函数以0为对称中心,这一点要优于Sigmoid函数,但它仍然存在梯度消失问题。因为Tanh函数完全可微分,而且反对称中心和对称中心都在原点,所以在分类任务中,它逐渐取代了原来的标准激活函数Sigmoid函数。这个函数有很多更加平缓的变体,例如Log-log、Softsign和Symmetrical Sigmoid,它们可以进一步解决学习缓慢和梯度消失的问题。

图3-3 Tanh函数曲线

3.ReLU

ReLU(Rectified Linear Unit)函数曲线如图3-4所示,其函数表达式如式(3-5)[2]所示。

图3-4 ReLU函数曲线

Krizhevsky在2012年的一篇论文[2]中提出,使用非线性函数max(0,x)而不是Sigmoid函数或者Tanh函数,可以使神经网络收敛得更快,在试验中达到了之前6倍的速度。

相较于Sigmoid函数和Tanh函数,ReLU函数可以极大地加快SGD(随机梯度下降,Stochastic Gradient Descent)收敛的速度,而且输入为正数时,梯度不会饱和,同时ReLU函数不含有指数运算,计算更加简单,速度更快。另外ReLU函数会使输入小于0的神经元输出为0,导致训练时的神经网络比测试时稀疏,减少了参数的相互依存关系,缓解了过拟合问题的发生。

但是ReLU函数也存在缺点,即当输入是负数的时候,ReLU函数不能被激活,这意味着一旦输入变成负数,ReLU函数就会导致该神经元死亡。这种现象在前向传播的过程中不会出现问题,神经网络中有的区域敏感,有的区域抑制,这是合理的。但是在反向传播过程中会出现梯度消失现象。同时ReLU函数也不是以0为对称中心的函数,这会使参数更新效率降低。为了解决这些缺点,ReLU函数还有很多变体,例如Leaky ReLU、PReLU和ELU。

4.Maxout

Maxout[3]函数是对ReLU和Leaky ReLU的一般性归纳,它的数学公式如式(3-6)[3]所示。

其中W1W2是两种不同的神经网络权重矩阵,x是神经网络输入向量,b1b2是偏置。ReLU和Leaky ReLU都是这个公式的特殊情况,Maxout函数拥有ReLU函数所有的优点而没有它的缺点,但是参数数量增加了一倍,会导致神经网络整体参数数量激增。

5.Softmax

Softmax函数的表达式如式(3-7)所示,示例图如图3-5所示。

其中xi表示第i个输入,σi表示第i个输出,N表示输入数据和输出数据数目。Softmax函数是Sigmoid函数的扩展,当N=2时,Softmax函数退化为Sigmoid函数。Softmax函数的作用就是,将输出结果映射到(0,1)之间,且所有结果的累和为1,可以将它理解为概率,但需要强调的一点是,它并不是真正的概率。通常Softmax函数都作为最后一层的激活函数,然后选取概率最大的值作为预测目标。此外,Softmax函数搭配交叉熵损失会使反向传播的计算过程非常简单。

图3-5 Softmax函数示例图

3.1.3 神经元模型

将感知器中的sgn函数换成各种非线性激活函数,就是常见的神经元模型,例如Sigmoid、Tanh和ReLU。图3-6是神经元模型示意图,输入信号经过加权、求和并加偏置,然后再用激活函数激活,引入非线性。神经元是神经网络的基本结构单元。

图3-6 神经元模型示意图