人工神经网络是基于生物学中脑认知神经网络的基本原理,模仿大脑神经系统工作原理所创建的数学模型,它有并行的分布处理能力、高容错性、自我学习等特征。

一. 神经元感知器模型

人工神经网络中最基本的单元叫神经元,又叫感知器,如图所示。它是模拟人脑神经系统的神经元(分析和记忆)树突(感知)轴突(传导)的工作原理,借助计算机的快速计算和存储来实现。

在这里插入图片描述

从上图可以看到,人工神经网络中一个基本的神经元由以下几个部分组成:

  • 输入 ( Input ) : 一个神经元可以接收多个输入 { x 1 , x 2 , . . . , x n ∣ x i ∈ R } \{x_1,x_2,...,x_n|x_i∈R\} {x1,x2,...,xnxiR}
  • 权值(Weight):每个输入都有一个权值 w i ∈ R w_i∈R wiR
  • 偏置值(Bias):b∈R
  • 激活函数(Activate Function):激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数, 从而可以应用到众多非线性模型中
  • 输出(Output): 神经元输出,该输出可由下面公式计算:

y = f { Σ i = 0 n ( w i ∗ x i ) + b } y = f\{ Σ_{i=0}^n(w_i * x_i) +b \} y=f{Σi=0n(wixi)+b}

 

二. 神经网络模型

下图为神经网络的结构模型图,最左边的层叫作输入层(Input Layer),最右边的层叫作输出层(Output Layer)。输入层和输出层之间的层叫作隐藏层(Hidden Layer)。含多个隐藏层的神经网络叫作深度神经网络。

对于拟合任意一个函数而言,浅层神经网络浅而宽,需要大量的神经元,而深层神经网络深而窄,需要更多的层和较少的神经元。

一般来说深层网络参数更少,更节省资源,但是深层网络并不好训练,需要大量的数据和很好的技巧才能去拟合并训练出好的神经网络。

在这里插入图片描述

 

三. 学习方式

神经网络的学习方式很多,根据有无数据训练可以将其分为3大类。

  1. 有监督学习:将训练样本的数据加入到神经网络的输入端, 将期望答案和实际输出做差,可以得到误差信号,通过误差信号来调 整权值大小,以此来优化模型输出。
  2. 无监督学习:首先并不给定标准数据样本,而是直接将网络置于环境之中,由自身根据数据特征进行自动学习。
  3. 半监督学习:输入信息介于有监督和无监督之间,不需要给定标准数据样本,但需要对网络的输出做出评判,以此来调整网络参数。

 

四. 学习规则:修改神经网络的权重和偏置

学习规则是用来修改神经网络的权值和偏置值的过程和方法,其目的是训练网络,更好地拟合应用的需求,从而完成特殊的任务。常见的学习规则有:

  • Hebb学习规则
  • Delta算法
  • 反向传播算法(Back- propagation,BP)

 

1. 反向传播算法(Back-propagation,BP)

1.1. 算法基本思想

  • 是一种监督学习算法,常用于训练多层感知机
  • BP算法是人工神经网络较常采用的学习方法,其基本思想是逐一地由样本集中的样本 ( X k , Y k ) (X_k ,Y_k) (XkYk)计算出实际输出$O_k$误差测度$E_p$,对 w 1 , w 2 , . . . , w n w_1,w_2,...,w_n w1w2...wn权值做调整重复这个循环,直到误差降至最低
  • 用输出层的误差调整输出层权值矩阵,并用此误差估计输出层的直接前导层误差,再用输出层前导层误差估计更前一层的误差,如此获得所有其他各层的误差估计,并用这些估计实现对权矩阵的修改,形成将输出端表现出的误差沿着与输入信号相反的方向逐级向输入端传递的链式求解过程。
  • 算法利用输出层误差来调整输出层权值矩阵,然后以此估算前导层误差,形成将(输出端表现出的)误差沿着输入信号反方向逐级向输入端传递的链式求解过程。

 

1.2. 反向传播算法学习过程

BP算法学习过程应用到深度学习中分为两个子过程:输入数据正向传递子过程误差数据反向传递子过程,即“正向传播求误差,反向传播求偏导”

完整的学习过程是:

对于一个训练样本,将输入正向传播到输出此时产生误差,然后将误差信号反向从输出层传递到输入层,利用该误差信号求出权重修改量 W j i ( h ) W_{ji}^{(h)} Wji(h) ( h表示层数),通过它更新权值 W j i ( h ) W_{ji}^{(h)} Wji(h) ,称为一次迭代过程。当误差或者 W j i ( h ) W_{ji}^{(h)} Wji(h)仍不满足要求时重复上述操作。

下图以三层神经网络模型为例,详细说明BP算法的原理及推导求解过程。

在这里插入图片描述

 

1.2.1. 正向传播求误差

在这里插入图片描述

至此,完成了从输入层到输出层的数学表达与计算推导。其中, 在初始化计算时,即第一次完成从输入经过隐藏层计算后到输出的权 值 矩阵的初始值,一般根据实际情况采用随机值或者经验值。

 

1.2.2. 反向传播求偏导(ing)

BP算法虽然是经典的深度学习算法,但对于深层网络仍然有许多不足,主要原因是Sigmoid激活函数易出现梯度减小甚至消失,这也是为什么深层卷积神经网络利用ReLU函数代替Sigmoid激活函数的原因。

 

五. 激活函数

激活函数又叫激励函数,主要作用是对神经元所获得的输入进行非线性变换以此反映神经元的非线性特性。常用的激活函数有以下几种类型。

1. 常见激活函数

激活函数 描述
线性激活函数 f(x) = kx + c
k、c为常数,线性函数常用于线性神经网络中
符号激活函数 f ( x ) = { 0 , x < 0 1 , x > = 0 f(x)=\{^{1 , x>=0}_{0, x<0} f(x)={0,x<01,x>=0
Sigmoid激活函数 f ( x ) = 1 / ( 1 + e − x ) f(x)=1/(1+e^{-x}) f(x)=1/(1+ex)
在这里插入图片描述
双曲正切激活函数 在这里插入图片描述
高斯激活函数 在这里插入图片描述
ReLU激活函数 f ( x ) = { 0 , x < 0 x , x > = 0 f(x)=\{^{x , x>=0}_{0, x<0} f(x)={0,x<0x,x>=0 也可表示为 f(x)=max(0,x)。

 

2. 为什么选择ReLU激活函数

在神经网络中,ReLU激活函数得到广泛应用,如图5-10所示,尤其在卷积神经网络中,往往不选择Sigmoid或tanh函数而选择ReLU函数,原因有以下几点:
在这里插入图片描述

  1. 代价更小,计算速度更快:与Sigmoid函数必须计算指数和导数比较,ReLU代价小,计算速度更快
  2. 梯度不会丢失:Sigmoid函数导数最大值为1/4,并且链式求导导致梯度越来越小,训练深度神经网络容易导致梯度丢失,但是ReLU函数的导数为1,不会出现梯度下降,以及梯度消失问题,从而更易于训练深层网络。
  3. 较为理想的激活率:有研究表明,人脑在工作时只有大概5%的神经元被激活,而Sigmoid函数大概有50%的神经元被激活,而人工神经网络在理想状态时有15%~30%的激活率,所以ReLU函数在小于0的时候是完全不激活的,所以可以适应理想网络的激活率要求。

当然,没有一种完美的激活函数,不同的神经网络有不同的需求函数,需要根据具体的模型选取合适的激活函数。

 

六. 优化器:寻找损失函数的极值点->损失最小化

梯度下降法是神经网络模型训练中最常用的优化算法之一。梯度下降法是一种致力于找到函数极值点的算法。前面介绍过,机器学习其实就是不断改进模型参数,以便通过大量训练步骤将损失最小化

有了这个概念,将梯度下降法应用于寻找损失函数(Loss Function) 或代价函数(Cost Function)的极值点,便构成依据输入数据的模型进行自我优化的学习过程。常见的梯度下降法主要有如下三类

1. 批量梯度下降

批量梯度下降法是指在每一次迭代时使用所有样本来进行梯度的更新。

有以下几个优点:

  1. 每次更新使用全部样本,能更准确地朝向极值所在的方向。如果目标函数是凸函数,一定能收敛到全局最小值;
  2. 是对梯度的无偏估计,样例越多,估计越准确;
  3. 一次迭代是对所有样本进行计算,可以利用向量化操作实现并行

BGD的缺点也很明显:

  1. 遍历计算所有样本不仅耗时,而且需要大量资源
  2. 每次更新遍历所有样本,但有一些样本参数对参数更新价值不大;
  3. 如果是非凸函数,可能会陷入局部最小值。

其迭代的收敛曲线如下图:
在这里插入图片描述

 

2. 随机梯度下降

随机梯度下降不同于批量梯度下降,每次迭代时只使用一个样本对参数进行更新。

优点

  1. 每次只计算一个样本,更新速度大大加快;
  2. 在学习过程中加入了噪声和随机性,提高了泛化误差
  3. 对于非凸函数,SGD算法的随机性有助于逃离某些不理想的局部最小值,获得全局最优解。

缺点也很明显

  1. 更新所有样本需要大量时间;
  2. 学习过程波动较大。其迭代的收敛曲线如上图。

 

3. 小批量梯度下降

小批量梯度下降介于以上两者之间,使用一个以上但不是全部的训练样本,即Batch Size。Batch Size通常是一个相对较小的数,如32128等。当训练集大小增加时,Batch Size保持不变。

小批量梯度下降兼具批量梯度下降和随机梯度下降的特点,
优点在于

  1. 计算速度比BGD快,因为只遍历部分样例就可执行更新;
  2. 每次不是使用全部样本,因此可以得到随机梯度下降的效果,非凸函数也不太容易陷入局部最优解。

缺点

  1. 学习过程会有更多的震荡,为更接近最小值,需要增加学习率衰减项,以降低学习率,避免过度震荡;
  2. batch_size的不当选择可能会带来一些额外问题。

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐