
文章目录一. 神经元感知器模型二. 神经网络模型三. 学习方式四. 学习规则:修改神经网络的权重和偏置1. 反向传播算法(Back-propagationBP)1.1. 算法基本思想1.2. 反向传播算法学习过程1.2.1. 正向传播求误差1.2.2. 反向传播求偏导ing五. 激活函数1. 常见激活函数2. 为什么选择ReLU激活函数六. 优化器寻找损失函数的极值点-损失最小化1. 批量梯度下降2. 随机梯度下降3. 小批量梯度下降人工神经网络是基于生物学中脑认知神经网络的基本原理模仿大脑神经系统工作原理所创建的数学模型它有并行的分布处理能力、高容错性、自我学习等特征。一. 神经元感知器模型人工神经网络中最基本的单元叫神经元又叫感知器如图所示。它是模拟人脑神经系统的神经元(分析和记忆)、树突(感知)、轴突(传导)的工作原理借助计算机的快速计算和存储来实现。从上图可以看到人工神经网络中一个基本的神经元由以下几个部分组成:输入 ( Input ) : 一个神经元可以接收多个输入{ x 1 , x 2 , . . . , x n ∣ x i ∈ R } \{x_1,x_2,...,x_n|x_i∈R\}{x1,x2,...,xn∣xi∈R}权值(Weight)每个输入都有一个权值w i ∈ R w_i∈Rwi∈R。偏置值(Bias)b∈R激活函数(Activate Function)激活函数给神经元引入了非线性因素使得神经网络可以任意逼近任何非线性函数 从而可以应用到众多非线性模型中。输出(Output): 神经元输出该输出可由下面公式计算y f { Σ i 0 n ( w i ∗ x i ) b } y f\{ Σ_{i0}^n(w_i * x_i) b \}yf{Σi0n(wi∗xi)b}二. 神经网络模型下图为神经网络的结构模型图最左边的层叫作输入层(Input Layer)最右边的层叫作输出层(Output Layer)。输入层和输出层之间的层叫作隐藏层(Hidden Layer)。含多个隐藏层的神经网络叫作深度神经网络。对于拟合任意一个函数而言浅层神经网络浅而宽需要大量的神经元而深层神经网络深而窄需要更多的层和较少的神经元。一般来说深层网络参数更少更节省资源但是深层网络并不好训练需要大量的数据和很好的技巧才能去拟合并训练出好的神经网络。三. 学习方式神经网络的学习方式很多根据有无数据训练可以将其分为3大类。有监督学习:将训练样本的数据加入到神经网络的输入端 将期望答案和实际输出做差可以得到误差信号通过误差信号来调 整权值大小以此来优化模型输出。无监督学习:首先并不给定标准数据样本而是直接将网络置于环境之中由自身根据数据特征进行自动学习。半监督学习:输入信息介于有监督和无监督之间不需要给定标准数据样本但需要对网络的输出做出评判以此来调整网络参数。四. 学习规则:修改神经网络的权重和偏置学习规则是用来修改神经网络的权值和偏置值的过程和方法其目的是训练网络更好地拟合应用的需求从而完成特殊的任务。常见的学习规则有Hebb学习规则Delta算法反向传播算法(Back- propagationBP)1. 反向传播算法(Back-propagationBP)1.1. 算法基本思想是一种监督学习算法常用于训练多层感知机BP算法是人工神经网络较常采用的学习方法其基本思想是逐一地由样本集中的样本( X k Y k ) (X_k Y_k)(XkYk)计算出实际输出$O_k$和误差测度$E_p$对w 1 w 2 . . . w n w_1w_2...w_nw1w2...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. 反向传播求偏导ingBP算法虽然是经典的深度学习算法但对于深层网络仍然有许多不足主要原因是Sigmoid激活函数易出现梯度减小甚至消失这也是为什么深层卷积神经网络利用ReLU函数代替Sigmoid激活函数的原因。五. 激活函数激活函数又叫激励函数主要作用是对神经元所获得的输入进行非线性变换以此反映神经元的非线性特性。常用的激活函数有以下几种类型。1. 常见激活函数激活函数描述线性激活函数f(x) kx ck、c为常数线性函数常用于线性神经网络中符号激活函数f ( x ) { 0 , x 0 1 , x 0 f(x)\{^{1 , x0}_{0, x0}f(x){0,x01,x0Sigmoid激活函数f ( x ) 1 / ( 1 e − x ) f(x)1/(1e^{-x})f(x)1/(1e−x)双曲正切激活函数高斯激活函数ReLU激活函数f ( x ) { 0 , x 0 x , x 0 f(x)\{^{x , x0}_{0, x0}f(x){0,x0x,x0也可表示为 f(x)max(0,x)。2. 为什么选择ReLU激活函数在神经网络中ReLU激活函数得到广泛应用如图5-10所示尤其在卷积神经网络中往往不选择Sigmoid或tanh函数而选择ReLU函数原因有以下几点:代价更小计算速度更快与Sigmoid函数必须计算指数和导数比较ReLU代价小计算速度更快。梯度不会丢失Sigmoid函数导数最大值为1/4并且链式求导导致梯度越来越小训练深度神经网络容易导致梯度丢失但是ReLU函数的导数为1不会出现梯度下降以及梯度消失问题从而更易于训练深层网络。较为理想的激活率有研究表明人脑在工作时只有大概5%的神经元被激活而Sigmoid函数大概有50%的神经元被激活而人工神经网络在理想状态时有15%~30%的激活率所以ReLU函数在小于0的时候是完全不激活的所以可以适应理想网络的激活率要求。当然没有一种完美的激活函数不同的神经网络有不同的需求函数需要根据具体的模型选取合适的激活函数。六. 优化器寻找损失函数的极值点-损失最小化梯度下降法是神经网络模型训练中最常用的优化算法之一。梯度下降法是一种致力于找到函数极值点的算法。前面介绍过机器学习其实就是不断改进模型参数以便通过大量训练步骤将损失最小化。有了这个概念将梯度下降法应用于寻找损失函数(Loss Function) 或代价函数(Cost Function)的极值点便构成依据输入数据的模型进行自我优化的学习过程。常见的梯度下降法主要有如下三类1. 批量梯度下降批量梯度下降法是指在每一次迭代时使用所有样本来进行梯度的更新。有以下几个优点每次更新使用全部样本能更准确地朝向极值所在的方向。如果目标函数是凸函数一定能收敛到全局最小值是对梯度的无偏估计样例越多估计越准确一次迭代是对所有样本进行计算可以利用向量化操作实现并行。BGD的缺点也很明显遍历计算所有样本不仅耗时而且需要大量资源每次更新遍历所有样本但有一些样本参数对参数更新价值不大如果是非凸函数可能会陷入局部最小值。其迭代的收敛曲线如下图2. 随机梯度下降随机梯度下降不同于批量梯度下降每次迭代时只使用一个样本对参数进行更新。优点每次只计算一个样本更新速度大大加快在学习过程中加入了噪声和随机性提高了泛化误差对于非凸函数SGD算法的随机性有助于逃离某些不理想的局部最小值获得全局最优解。缺点也很明显更新所有样本需要大量时间学习过程波动较大。其迭代的收敛曲线如上图。3. 小批量梯度下降小批量梯度下降介于以上两者之间使用一个以上但不是全部的训练样本即Batch Size。Batch Size通常是一个相对较小的数如32128等。当训练集大小增加时Batch Size保持不变。小批量梯度下降兼具批量梯度下降和随机梯度下降的特点优点在于计算速度比BGD快因为只遍历部分样例就可执行更新每次不是使用全部样本因此可以得到随机梯度下降的效果非凸函数也不太容易陷入局部最优解。缺点学习过程会有更多的震荡为更接近最小值需要增加学习率衰减项以降低学习率避免过度震荡batch_size的不当选择可能会带来一些额外问题。