Back Propagation-BP神经网络

一,简介

反向传播(Back Propagation,BP)是一种监督学习下的训练神经网络的方法。它基于梯度下降法,通过计算损失函数关于网络参数的梯度,并将梯度沿着网络进行反向传播,以更新网络参数。

在具体操作上,首先进行前向传播,即将输入样本通过神经网络进行前向传递,计算每个节点的输出值;然后根据网络输出和真实标签计算损失函数,用于衡量预测值与真实值之间的差异;接着从输出层开始,根据链式法则计算每个节点的梯度;最后根据计算得到的梯度,使用梯度下降等优化算法更新网络参数。

这个过程会在训练样本上进行迭代,直到达到停止条件(如达到一定的训练轮数或损失函数收敛)为止。反向传播算法的关键在于计算梯度的过程,它通过将网络中的每个节点的局部梯度相乘,从输出层向输入层传播梯度。对于常见的激活函数(如sigmoid、ReLU等),它们的导数可以计算得到。通过链式法则,可以计算每个节点的梯度,并将梯度反向传播到前面的层。

反向传播算法使得神经网络能够通过梯度下降等优化算法来调整参数,从而最小化损失函数,提高网络在训练数据上的性能。它是神经网络训练中的关键步骤,使得网络能够学习到输入与输出之间的映射关系。

BP算法的基本思想是:学习过程由信号的正向传播和误差的反向传播两个过程组成。

二,引言

反向传播算法(Backpropagation)是目前用来训练人工神经网络最常用且最有效的算法。1986年,Hinton,深度学习之父,和他的合作者发表了论文,首次系统地描述了如何利用BP算法有训练神经网络。从这一年开始,BP在有监督的神经网络算法中占着核心地位。它描述了如何利用错误信息,从最后一层(输出层)开始到第一个隐层,逐步调整权值参数,达到学习的目的。

三,深入了解

1.代价函数

BP神经网络的代价函数(Cost Function)通常采用均方误差(Mean Squared Error,MSE)作为损失函数,也称为二次代价函数。

这个函数计算的是网络输出值与真实标签之间的差异,通过平方运算后除以训练样本的个数,以得到每个样本误差的平均值。这个值越小,说明网络的预测性能越好。

代价函数并没有准确的定义,一般我们可以理解为是一个人为定义的函数,我们可以利用这个函数来优化模型的参数。最简单且常见的一个代价函数是均方差(MSE)代价函数,也称为二次代价函数:

                                         E=\frac{1}{2N}(T-N)^{2}=\frac{1}{2N}\sum_{t=1}^{N}(t_{i}-y_{i})^{2}

矩阵可以用大写字母来表示,这里的T表示真实标签,Y表示网格输出,i表示第i个数据。N表示训练样本的个数(注意,这里的N是一个大于0的整数,不是矩阵)

TY可以得到每个训练样本与真实标签的误差。误差的值有正有负,我们可以求平方,把所有的误差都变成正的,然后除以2N.这里的2没有特别的含义,主要是我们对均方差代价函数求导的时候,式子中的2次方的2可以跟分母中的2约掉,使得公式推导看起来更整齐简洁。除以\sum表示求每个样本的误差平均的平均值。

公式可以用矩阵形式来表达,也可以拆分为用∑来累加各个训练样本的真实标签与网络输出的误差的平方。

2. 梯度下降法

梯度下降法(Gradient Descent)是一种基于搜索的最优化方法,常用于机器学习和人工智能中递归性地逼近最小偏差模型。其核心思想是利用函数的梯度(导数)信息,沿着梯度反方向迭代更新参数,使得目标函数(损失函数)达到最小值。梯度下降法可以应用于求解最小二乘问题(线性和非线性都可以),是无约束优化问题中最常采用的方法之一。

在实际操作中,先求取损失函数的梯度,然后将参数向梯度的反方向移动一定的步长,不断迭代更新参数,直到损失函数达到最小值。这个步长也被称为学习率,它决定了参数更新的速度。如果学习率过大,可能会导致参数在最小值附近震荡而无法收敛;如果学习率过小,则会导致训练速度过慢。因此,合适的学习率对于梯度下降法的成功应用至关重要。

梯度下降法只能得到局部最优解,而不能得到全局最优解。如果损失函数是非凸函数,可能会陷入局部最优解中无法自拔。为了克服这个问题,人们通常会随机初始化多个参数集合,然后分别对每个参数集合使用梯度下降法进行优化,最后从这些结果中选取最优的参数集合作为最终的解。这种方法被称为随机梯度下降法(Stochastic Gradient Descent,SGD)。

梯度下降法广泛应用于各种机器学习算法中,如线性回归、逻辑回归、神经网络等。它是这些算法中的核心优化方法,用于求解模型参数以最小化损失函数。

3. 梯度下降的详细算法

梯度下降法是一种一阶最优化算法,用于找到一个函数的局部极小值。要使用梯度下降法,必须向函数上当前点对应梯度(或近似梯度)的反方向的规定步长距离点进行迭代搜索。如果相反地向梯度正方向迭代进行搜索,则会接近函数的局部极大值点,这个过程被称为梯度上升法。

梯度下降法的学习率通常是一个固定的值,但在一些特殊情况下也可以动态调整学习率。学习率的选择对梯度下降法的性能有很大的影响。如果学习率过大,可能会导致参数在最小值附近震荡而无法收敛;如果学习率过小,则会导致训练速度过慢。

梯度下降法通常采用批量梯度下降(Batch Gradient Descent)或随机梯度下降(Stochastic Gradient Descent)两种方式来计算梯度。

  1. 批量梯度下降法(Batch Gradient Descent)

批量梯度下降法在每次迭代时,计算整个样本集上的梯度,并使用该梯度来更新参数。但是,当样本集非常大时,这种方法可能会非常耗时,因为需要处理整个样本集。

     2. 随机梯度下降法(Stochastic Gradient Descent)

随机梯度下降法每次只随机选择一个样本进行更新,这使得训练速度更快,但可能会导致更大的波动。这种方法在处理大规模数据集时非常有效。

梯度下降法的迭代过程通常如下:

  1. 初始化参数(如权重和偏差)。
  2. 计算损失函数关于每个参数的梯度。
  3. 按照梯度的反方向,以学习率乘以梯度的步长进行参数更新。
  4. 重复步骤2和3,直到满足停止条件(如达到最大迭代次数或损失函数变化小于某个阈值)。

在训练神经网络时,梯度下降法通常与反向传播算法结合使用。反向传播算法计算神经网络中每个层的梯度,并将这些梯度用于更新网络中的参数。通过多次迭代,梯度下降法可以逐渐优化神经网络的参数,提高网络的预测性能。

4. 梯度下降的算法调优

  1. 选择合适的学习率:学习率过大可能会导致参数在最小值附近震荡而无法收敛,学习率过小则会导致训练速度过慢。因此,需要选择一个合适的学习率,使得参数能够快速收敛,并且训练速度也能够接受。在实际应用中,可以采用学习率衰减的方法,即随着训练的进行,逐渐减小学习率。
  2. 选择合适的批量大小:批量梯度下降法和随机梯度下降法都需要选择合适的批量大小。批量大小的选择会影响训练速度和收敛性能。批量大小过大可能会导致内存不足,批量大小过小则会导致训练速度变慢。因此,需要选择一个合适的批量大小,以充分利用计算机的内存和计算能力。
  3. 使用动量法:动量法可以帮助梯度下降法更快地收敛,并且减少震荡。动量法的思想是在更新参数时,不仅考虑当前时刻的梯度,还考虑前一时刻的梯度。这样可以使得参数更新更加平滑,减少震荡。
  4. 使用正则化:正则化可以防止过拟合,提高模型的泛化能力。在梯度下降法中,可以使用L1正则化或L2正则化来约束模型的复杂度。正则化项可以添加到损失函数中,作为惩罚项,以防止模型过于复杂。
  5. 选择合适的停止条件:梯度下降法需要选择合适的停止条件,以防止过拟合或欠拟合。常见的停止条件包括最大迭代次数、损失函数变化小于某个阈值等。在实际应用中,需要根据具体情况选择合适的停止条件。
  6. 优化器选择:有许多优化器可用于改善梯度下降的性能,如Adam、RMSProp等。这些优化器通过调整学习率或使用动量等方法来改进梯度下降的收敛性能。

5. 梯度下降三大方法

  1. 批量梯度下降法(BGD):在更新参数时使用所有的样本来进行更新。优点是全局最优解,易于并行实现;缺点是当样本数目很大时,训练过程会很慢。
  2. 随机梯度下降法(SGD):在更新参数时使用一个样本来进行更新。每次更新参数都用一个样本,更新很多次。如果样本量很大的话,可能只用其中几万条或者几千条的样本,就已经将参数迭代到最优解了。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。
  3. 小批量梯度下降法(MBGD):在更新每一参数时都使用一部分样本来进行更新。

6. 梯度下降算法和其他无约束算法的比较

在机器学习中的无约束优化算法,除了梯度下降以外,还有前面提到的最小二乘法,此外还有牛顿法和拟牛顿法。

梯度下降法和最小二乘法相比,梯度下降法需要选择步长,而最小二乘法不需要。梯度下降法是迭代求解,最小二乘法是计算解析解。如果样本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有优势,计算速度很快。但是如果样本量很大,用最小二乘法由于需要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度下降法比较有优势。

梯度下降法和牛顿法/拟牛顿法相比,两者都是迭代求解,不过梯度下降法是梯度求解,而牛顿法/拟牛顿法是用二阶的海森矩阵的逆矩阵或伪逆矩阵求解。相对而言,使用牛顿法/拟牛顿法收敛更快。但是每次迭代的时间比梯度下降法长。

四,BP算法推导总结

BP算法是一种通过反向传播来训练神经网络的方法。它通过前向传播计算网络的输出值和预期输出值之间的误差,然后通过反向传播调整网络参数以减少误差。

在BP算法中,首先会进行前向传播的计算过程。这个过程会根据输入样本和初始化的网络权重和偏置值,计算出网络的输出值。然后,将这个输出值与期望的输出值进行比较,计算出误差。

如果误差不在给定的范围内,就会进行反向传播的过程。反向传播是通过将误差分摊给各层的所有单元,从而获得各层单元的误差信号。这个误差信号会被用来更新网络的权重和偏置值,使得网络的输出值更接近于期望的输出值。

在反向传播的过程中,需要使用链式法则计算梯度。梯度是函数在某一点的导数,表示函数在该点的变化率。通过计算梯度,可以确定每个参数应该以多大的程度进行更新。

最后,通过多次迭代,BP算法可以逐渐优化网络的参数,提高网络的预测性能。总的来说,BP算法是一种有效且广泛应用的神经网络训练方法。

  • 14
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值