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

前向传播算法

前向传播(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.youkuaiyun.com/ft_sunshine/article/details/90221691

<think>好的,用户想了解传播反向传播的定义及其在神经网络中的作用。我需要先回忆这两个概念的基本定义,然后解释它们的工作原理和在神经网络中的具体作用。 首先,传播应该是指数据从输入层经过隐藏层到输出层的传播过程,每步都会计算加权和并应用激活函数。这时候需要举例说明,比如用公式表示每层的计算,比如$z^{(l)} = W^{(l)}a^{(l-1)} + b^{(l)}$,然后$a^{(l)} = \sigma(z^{(l)})$。这样用户能直观看到计算过程。 然后是反向传播,这部分可能比较复杂。反向传播用于计算损失函数对各个参数的梯度,通过链式法则从输出层往回逐层计算。需要提到损失函数,比如均方误差或交叉熵,然后如何通过求导来更新权重和偏置。例如,输出层的梯度计算,然后反向传播到隐藏层,每步的具体导数如何计算,比如$\frac{\partial L}{\partial W^{(l)}} = \delta^{(l)} a^{(l-1)T}$,其中$\delta^{(l)}$是误差项。 还要说明两者的作用,传播负责推理和预测,反向传播负责优化参数,使得模型能够通过梯度下降等方法进行学习。可能需要提到训练循环,即传播计算输出,计算损失,反向传播计算梯度,然后用优化器更新参数。 用户可能需要更具体的例子,比如简单神经网络的架构,或者具体的数学推导步骤。不过根据用户的问题,定义和作用是重点,所以需要简明扼要,同时保持准确。 还要注意格式要求,行内公式用$...$,独立公式用$$...$$,并且正确使用LaTeX语法。例如,传播的公式可能需要用独立公式,而每步的激活函数可以用行内公式。需要检查数学符号是否正确,比如矩阵乘法、激活函数符号等。 最后生成相关问题,可能涉及梯度消失问题、激活函数的选择、优化器的比较,或者实际应用中的调整方法。需要确保问题相关且有深度,帮助用户进步学习。 现在需要组织语言,结构清晰,分点说明传播反向传播的定义、工作原理、作用,然后列出相关问题。同时注意引用标识,但用户提供的示例中没有具体引用来源,可能需要根据实际情况处理。</think>### 传播反向传播的定义及作用 #### 1. 传播(Forward Propagation) **定义**: 传播是神经网络中数据从输入层逐层传递到输出层的过程。每层的神经元通过加权求和(线性变换)和激活函数(非线性变换)生成输出,最终得到预测结果。例如,第$l$层的计算可表示为: $$ z^{(l)} = W^{(l)}a^{(l-1)} + b^{(l)}, \quad a^{(l)} = \sigma(z^{(l)}) $$ 其中,$W^{(l)}$为权重矩阵,$b^{(l)}$为偏置向量,$\sigma$为激活函数(如ReLU或Sigmoid),$a^{(l-1)}$是上层的输出。 **作用**: - 实现模型推理:通过逐层计算生成预测值,例如分类概率或回归结果。 - 计算损失函数:通过比较预测值$a^{(L)}$与真实标签$y$,计算误差(如交叉熵损失$L = -\sum y_i \log a_i^{(L)}$)[^1]。 --- #### 2. 反向传播(Backward Propagation) **定义**: 反向传播是基于链式法则计算损失函数对网络参数的梯度(如$\frac{\partial L}{\partial W^{(l)}}$和$\frac{\partial L}{\partial b^{(l)}}$)的过程。从输出层开始,逐层反向计算梯度,用于参数更新。例如,输出层的梯度为: $$ \delta^{(L)} = \frac{\partial L}{\partial a^{(L)}} \odot \sigma'(z^{(L)}) $$ 第$l$层的梯度计算为: $$ \delta^{(l)} = (W^{(l+1)T}\delta^{(l+1)}) \odot \sigma'(z^{(l)}) $$ 最终,参数梯度为: $$ \frac{\partial L}{\partial W^{(l)}} = \delta^{(l)} a^{(l-1)T}, \quad \frac{\partial L}{\partial b^{(l)}} = \delta^{(l)} $$ **作用**: - 优化模型参数:通过梯度下降等优化算法调整$W$和$b$,最小化损失函数。 - 实现自动微分:避免手动推导复杂导数,高效支持深层网络训练[^2]。 --- ### 工作流程示例 1. **传播**:输入数据 → 逐层计算 → 输出预测值 → 计算损失。 2. **反向传播**:计算损失对参数的梯度 → 从输出层反向传递误差 → 更新权重和偏置。 3. **迭代优化**:重复上述步骤直至模型收敛。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值