图解前向、反向传播算法,一看就懂!

简介: 前向传播是神经网络中信息从输入层经过隐藏层传递到输出层的过程。每个神经元接收前一层的输出,通过加权求和和激活函数处理后传递给下一层,最终生成预测结果。此过程涉及输入信号、加权求和、激活函数应用等步骤。前向传播用于生成预测结果,在训练阶段与真实标签比较以计算损失函数,并在推理阶段直接生成预测值。反向传播则利用链式法则计算损失函数相对于权重的梯度,调整参数以减小误差,从而优化模型性能。两者结合实现神经网络的有效训练和预测。

前向传播算法

前向传播(Feedforward)是神经网络中信息从输入层经过隐藏层传递到输出层的过程。在这个过程中,每一层的神经元接收来自前一层神经元的输出作为输入,并通过激活函数处理后输出给下一层,直到到达输出层并生成最终预测结果。

image.png

具体来说,前向传播涉及以下几个关键步骤:

1.输入信号:首先,输入数据被馈送到神经网络的输入层。这些输入可以视为特征向量,代表了我们要分析或预测的对象的属性。

2.加权求和:在每一层中,每个神经元将接收到的输入与该层权重矩阵相乘,并加上偏置项。这一操作可以用公式表示为:

image.png

3.激活函数应用:得到加权求和的结果之后,会将其传递给一个非线性的激活函数image.png,以生成该层神经元的实际输出。这个过程可以写作:

image.png

激活函数的选择取决于任务需求,例如分类问题常用 Sigmoid 或 Softmax 函数,回归问题可能使用线性激活函数,而在隐藏层中 ReLU 函数非常流行因为它的计算效率高且有助于缓解梯度消失的问题。

4.重复上述过程:对于多层神经网络而言,上述两步会在每一层重复执行,直到达到输出层为止。最终输出层产生的结果就是整个网络对输入样本的预测值。

5.输出预测:一旦所有层都完成了它们各自的计算,最后一层即输出层就会给出模型的预测结果。如果是二分类问题,可能会使用 Sigmoid 函数来确保输出位于 [0, 1] 区间内;如果是多分类问题,则通常采用 Softmax 函数来获得类别概率分布。

前向传播的目的

前向传播是神经网络进行预测和分类的基础过程。

训练阶段,前向传播用于生成预测结果,并与真实标签进行比较以计算损失函数的值。然后,通过反向传播算法将损失函数的梯度信息反向传递回网络,用于更新权重和偏置等参数。

推理阶段,神经网络仅使用前向传播过程来生成预测结果。此时,输入数据通过网络进行前向传播,直到输出层生成最终的预测结果。

image.png

反向传播算法

反向传播(Backpropagation,缩写为BP)是 “误差反向传播” 的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。该算法的核心思想是将输出误差以某种形式通过隐藏层向输入层逐层反转。具体来说,反向传播利用了微积分中的链式法则来高效地计算损失函数相对于网络中每个权重的梯度。这意味着它可以确定每个权重对最终预测误差的影响程度,并据此调整这些权重以减小误差。

在神经网络中,前向传播是指数据从输入层经过一系列变换到达输出层的过程,在此过程中,每一层的激活值都是基于前一层的输出和当前层的权重矩阵计算得出。而反向传播则是指一旦得到了输出层的预测结果,就会比较它与真实标签之间的差异,即计算损失函数;然后,这个误差信息会沿着网络从输出层向后传递到每一层,直到输入层,从而使得每一层都可以根据其对总误差的贡献来调整自身的参数。

image.png

反向传播的目的

反向传播的主要目标是训练神经网络通过监督学习做出更优质的预测。为了实现这一目标,反向传播需要解决两个关键问题:

  • 计算权重、偏置等超参数的梯度:这是为了方便使用优化算法更新参数时所必需的信息。通过计算损失函数关于各个权重和偏置的偏导数,可以获得一个指向损失最小化方向的梯度向量。这个梯度告诉了我们如何改变权重才能使损失变得更小。

  • 最小化模型预测误差:更根本的是,反向传播的目标是确定如何调整模型权重和偏差,从而最小化由损失函数衡量的预测误差。随着迭代次数增加,理想情况下,网络应该能够逐渐逼近最优解,即找到一组使得损失尽可能低的权重配置

image.png

算法讲解

当询问熟悉BP(Backpropagation)算法的人“如何推导BP算法?”时,常见的回答往往是“那不就是应用链式法则吗?”。虽然这样的回答在技术上是正确的,但它可能无法满足提问者的真正需求——他们通常希望获得一个更加直观、易于理解的解释。确实,BP算法的核心在于利用链式法则来计算梯度,但这只是冰山一角。对于那些寻求深入理解的人来说,更重要的是要能够看到整个过程是如何运作的,以及各个组件之间是如何相互作用的。

为了帮助读者建立更清晰的概念,我们采用图解的方式来说明反向传播的工作原理。值得注意的是,这里展示的图示虽然简化了实际深度学习中的backprop流程(后者涉及到计算图的操作),但其基本思想是一致的:即误差信息必须从输出层开始逆向传递回网络的前端,因为直接从前向后计算误差是不可行的。

接下来,我们将通过两组图像来详细介绍神经网络的前向传播与反向传播过程:

  • 第一组图:来自外部资源的一系列插图,它们以直观的方式描绘了数据流经网络的过程,非常适合视觉学习者。

  • 第二组图:提供了一个具体的实例,逐步演示了前向传播和随后的反向传播步骤,这对于希望通过具体例子加深理解的学习者尤为有用。

无论你是刚刚接触机器学习的新手,还是想要复习巩固知识的老手,本文提供的图文并茂的内容都将有助于你更好地掌握反向传播算法的本质。即使只具备基础的高等数学背景,跟随我们的引导,你也能够轻松地理解这一关键概念,并为后续的学习打下坚实的基础。

通过这种方式,我们不仅强调了理论的重要性,同时也确保了实践上的可操作性,使得每一个对神经网络感兴趣的个体都能够从中受益。

CASE 1

首先拿一个简单的三层神经网络来举例,如下:

image.png

每个神经元由两部分组成,第一部分(e)是输入值和权重系数乘积的和,第二部分(f(e))是一个激活函数(非线性函数)的输出, y=f(e)即为某个神经元的输出,如下:

image.png

下面是前向传播过程:

image.png
image.png
image.png

到这里为止,神经网络的前向传播已经完成,最后输出的y就是本次前向传播神经网络计算出来的结果(预测结果),但这个预测结果不一定是正确的,要和真实的标签(z)相比较,计算预测结果和真实标签的误差(δ \deltaδ),如下:

image.png

下面开始计算每个神经元的误差(δ \deltaδ):

image.png

如果传播的错误来自少数神经元,则会添加错误。图如下所示:

image.png

下面开始利用反向传播的误差,计算各个神经元(权重)的导数,开始反向传播修改权重(当计算每个神经元的误差信号后,每个神经元输入节点的权重系数可能被修改。以下公式中图片代表神经元激活函数的导数(即修改的权重)。)

image.png
image.png
image.png

系数η影响网络教学速度。

到此为止,整个网络的前向,反向传播和权重更新已经完成,推荐参考上面给出的本教程的链接,如果对纯理论讲解较难接受,没关系,强烈推荐第二组图的例子!!!

CASE 2

首先明确“正向传播”求损失,“反向传播”回传误差。同时神经网络每层的每个神经元都可以根据误差信号修正每层的权重,只要能明确上面两点,那么下面的例子,只要会一点链式求导规则就一定能看懂!

BP算法,也叫δ算法,下面以3层的感知机为例进行举例讲解。

image.png

上图的前向传播(网络输出计算)过程如下:(此处为网络的整个误差的计算,误差E计算方法为mse)

image.png

上面的计算过程并不难,只要耐心一步步的拆开式子,逐渐分解即可。现在还有两个问题需要解决:

1.误差E有了,怎么调整权重让误差不断减小?

2.E是权重w的函数,如何找到使函数值最小的w

解决上面问题的方法是梯度下降算法(简单图示如下),大家如有不太懂的可先行查阅别的资料,只要能达到理解线性回归梯度下降算法的水平即可,这里不再赘述。

image.png

就算上面的所有东西你都看的迷迷糊糊,通过下面的例子,相信绝大多数人也能很轻松的理解BP算法。如图是一个简单的神经网络用来举例:

image.png

下面是前向(前馈)运算(激活函数为sigmoid):

image.png

下面是反向传播(求网络误差对各个权重参数的梯度),我们先来求最简单的,求误差E对w5的导数。首先明确这是一个“链式求导”过程,要求误差E对w5的导数,需要先求误差E对out o1的导数,再求out o1对net o1的导数,最后再求net o1对w5的导数,经过这个链式法则,我们就可以求出误差E对w5的导数(偏导),如下图所示:

image.png

导数(梯度)已经计算出来了,下面就是反向传播与参数更新过程:

image.png

上面的图已经很显然了,如果还看不懂真的得去闭门思过了(开玩笑~),耐心看一下上面的几张图,一定能看懂的。

如果要想求误差E对w1的导数,误差E对w1的求导路径不止一条,这会稍微复杂一点,但换汤不换药,计算过程如下所示:

image.png

至此,“反向传播算法”及公式推导的过程完毕!


参考文献:

https://blog.csdn.net/ft_sunshine/article/details/90221691

相关文章
|
5月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习还不如浅层网络?RL教父Sutton持续反向传播算法登Nature
【9月更文挑战第24天】近年来,深度学习在人工智能领域取得巨大成功,但在连续学习任务中面临“损失可塑性”问题,尤其在深度强化学习中更为突出。加拿大阿尔伯塔大学的研究人员提出了一种名为“持续反向传播”的算法,通过选择性地重新初始化网络中的低效用单元,保持模型的可塑性。该算法通过评估每个连接和权重的贡献效用来决定是否重新初始化隐藏单元,并引入成熟度阈值保护新单元。实验表明,该算法能显著提升连续学习任务的表现,尤其在深度强化学习领域效果明显。然而,算法也存在计算复杂性和成熟度阈值设置等问题。
104 2
WK
|
5月前
|
机器学习/深度学习 监控 算法
反向传播算法是如何工作的
反向传播算法通过最小化损失函数优化神经网络。首先,输入数据经由前向传播得到预测结果,并计算损失;接着,反向传播计算各参数的梯度,并利用梯度下降法更新权重和偏置。这一过程反复进行,直至满足停止条件。算法具备高效性、灵活性及可扩展性,能处理复杂模式识别与预测任务,适用于不同类型与规模的神经网络,显著提升了模型的预测准确性和泛化能力。
WK
121 3
|
8月前
|
机器学习/深度学习 算法
**反向传播算法**在多层神经网络训练中至关重要,它包括**前向传播**、**计算损失**、**反向传播误差**和**权重更新**。
【6月更文挑战第28天】**反向传播算法**在多层神经网络训练中至关重要,它包括**前向传播**、**计算损失**、**反向传播误差**和**权重更新**。数据从输入层流经隐藏层到输出层,计算预测值。接着,比较预测与真实值计算损失。然后,从输出层开始,利用链式法则反向计算误差和梯度,更新权重以减小损失。此过程迭代进行,直到损失收敛或达到训练次数,优化模型性能。反向传播实现了自动微分,使模型能适应训练数据并泛化到新数据。
86 2
|
8月前
|
机器学习/深度学习 人工智能 算法
反向传播算法
深度学习中,反向传播是神经网络训练的关键,它通过计算损失函数对参数的梯度来调整网络权重,减少预测与真实值的差距。该过程包括:1) 前向传播,输入数据通过网络;2) 计算损失,评估预测输出与实际值的偏差;3) 反向传播,利用链式法则计算所有参数的梯度;4) 参数更新,使用梯度下降法更新权重。这一循环不断迭代,提高模型性能。反向传播使得神经网络能适应复杂任务,推动了现代机器学习的发展。
|
8月前
|
机器学习/深度学习 算法 PyTorch
神经网络反向传播算法
神经网络中的反向传播算法是用于训练的关键步骤,通过计算损失函数梯度更新权重。它始于前向传播,即输入数据通过网络得出预测输出,接着计算预测与实际值的误差。反向传播利用链式法则从输出层开始逐层计算误差,更新每一层的权重和偏置。例如,一个包含隐藏层的网络,初始权重随机设定,通过反向传播计算损失函数梯度,如sigmoid激活函数的网络,调整权重以减小预测误差。在Python的PyTorch框架中,可以使用`nn.Linear`定义层,`optimizer`进行参数优化,通过`backward()`计算梯度,`step()`更新参数。
|
9月前
|
机器学习/深度学习 算法
大模型开发:解释反向传播算法是如何工作的。
反向传播算法是训练神经网络的常用方法,尤其适用于多层前馈网络。它包括前向传播、计算损失、反向传播和迭代过程。首先,输入数据通过网络层层传递至输出层,计算预测值。接着,比较实际输出与期望值,计算损失。然后,从输出层开始,利用链式法则反向计算误差和权重的梯度。通过梯度下降等优化算法更新权重和偏置,以降低损失。此过程反复进行,直到损失收敛或达到预设训练轮数,优化模型性能,实现对新数据的良好泛化。
301 4
|
9月前
|
机器学习/深度学习 算法
反向传播原理的梯度下降算法
反向传播原理的梯度下降算法
|
9月前
|
机器学习/深度学习 算法 数据挖掘
反向传播算法
反向传播算法
|
9月前
|
机器学习/深度学习 人工智能 算法
神经网络算法——反向传播 Back Propagation
神经网络算法——反向传播 Back Propagation
99 0