Backpropagation

本文深入讲解神经网络中的反向传播算法,重点介绍残差计算及损失函数对权值的偏导计算过程。从链式法则入手,逐步解析输出层与隐藏层的残差计算方法,帮助读者理解神经网络参数更新的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

残差的计算

前向传播与反向传播比较

神经网络全程回顾


链接:http://speech.ee.ntu.edu.tw/~tlkagk/courses/MLDS_2015_2/Lecture/DNN%20backprop.pdf

今天我还是比较开心,因为解决了屯了很久的问题,即BP反向传播。很多人会觉得奇怪,它不就是链式法则、求偏导和梯度下降法更新吗?是的,确实知识点就这么多,但是这个东西让人细思极恐啊。比如:损失函数一般是均方误差、交叉熵,这些是因为我们在学习的时候好推导,看着方便。但在论文中损失函数并非这些简单的公式,如果换成其他的怎么办?与此同时,为了避免过拟合,在损失函数后面还会加一个惩罚项,一般都是二范,但是如果换成其他的,比如一范加二范,又改如何处理?大家都说神经网络是一个黑盒,里面是什么东西咋们不用管,但是这个黑盒也是人去设计的,要是里面出了问题,我们需要知道哪里的问题,这个反向传播具体的计算我们是不得不吃透。

现在,就让我们来学习反向传播吧。首先,需要的知识点:链式法则,求偏导。不会的就回去洗洗睡吧~~~哈哈哈

神经网络之所以牛逼是因为参数(权值和偏置)都是自动更新。所以主要的计算是通过损失函数去计算关于参数的偏导。这里,我们主要讲的是求权值的偏导。

损失函数对权值求偏导的公式,我们可以拆分成两个部分。对于第一个部分,Z表示激活函数的输入。当在第一层的时候,上一层的“输出”是input;在第一层之后的隐含层的时候,上一层的输出是神经元通过激活函数输出的结果,为a。a是早已经通过前向传播算出来了。

残差的计算

 

对于损失函数对权值的偏导公式第二个部分的计算我们称之为残差计算。关于残差的计算分为两步,第一步是求输出层的残差计算,第二步是根据输出层的残差以此类推前面的残差。

输出层的残差计算就是求关于损失函数对激活函数输入的偏导,由链式法则可以得到最后的结果,即如上图所示。这里,损失函数对最终输出结果的偏导计算是一个难点,因为不同的损失函数计算难度和相应的结果都是不同的。而对激活函数的偏导计算比较简单,公式都有模版,网上随便找就可以找到,需要注意一下,这里的激活函数括号里面的输入是激活函数的输入,而不是输出,别搞混了。

对于每一层的计算,我们可以把每一个神经元之间做对应的计算,即element-wise multiplication。这里的参数结果是一个vector。

每一层之间的残差关系公式计算,我在其他的博客里面找过,都写得很复杂不好理解。这里,我们先理解那个求和公式,即l+1层中有k个神经元,所有有k个残差,中间红色连线部分的偏导比较简单,就是乘以权值。通过激活函数得到时候和上面一样,也需要对激活函数求偏导。这里逆向理解可能很复杂。

我们可以这么思考,我们最开始(l+1层)求的第一个残差是一组vector,当做网络的输入,输入乘以权值,传到激活函数那里(三角形部分),此时激活函数是一个常数值,并作为一个“放大器”的作用,所以把乘以权值之后的结果再乘上一个常数,从而得到l层的输出,即我们求得l层残差。所以说,前向传播是一个网络,反向传播也是一个网络。

前向传播与反向传播比较

向前传播:matrix*vector, non-linear transform

反向传播:matrix*vector, *scalar

异曲同工之妙

以下公式参考博客:https://blog.youkuaiyun.com/chenyukuai6625/article/details/74304992

神经网络全程回顾

假设训练的样本集包含m个样例,对于这个包含m个样本集的数据集而言,整体的代价函数应为:

上式关于J(W,b)定义中的第一项是一个均方差项。第二项是一个权重衰减项,其目的是减小权重的幅度,防止过度拟合。nl 表示神经网络的层数。sl表示第 l 层神经元个数,不包含偏置单元。

(1)进行前馈传导计算,利用前向传导公式,得到L2、L3直到输出层Ln的激活值。

(2)对输出层(第nl层),计算其残差:

(3)对于l=nl-1,nl-2,…,2的各层,计算其对应的残差:

(4)计算出每个神经元对应的偏导数值:

(5)将计算得到的偏导数值带入到权重W和偏置b对应的更新公式中去:

这里,我们需要注意的是在反向传播每一层中的权值和偏置都需要更新。这就是为什么去求每一层与每一层之间的残差。注意:第一层没有残差。

对于W和b的更新,如果后面有惩罚项,在每一层权值的更新中需要加入更新。

<think>嗯,用户让我介绍一下反向传播backpropagation)和循环神经网络(RNN)。首先,我需要确保自己正确理解这两个概念,然后以清晰的结构解释给用户。用户可能有一定的机器学习基础,但可能需要从基础讲起,所以得平衡深度和易懂性。 首先,反向传播神经网络训练中的核心算法,用于计算梯度,优化权重。我得先解释它的基本原理,比如链式法则,前向传播和反向传播的过程。然后,可能需要提到它的优缺点,比如计算高效但可能有梯度消失的问题。 然后是RNN,这是处理序列数据的网络结构,和传统神经网络的不同之处在于其隐藏状态的传递。需要解释RNN的结构,比如时间展开后的循环连接,以及它在处理时间序列、自然语言处理中的应用。同时,RNN的变体如LSTM、GRU可以简要提及,以说明如何解决长依赖问题。 要注意用户的系统级指令,比如数学公式用$...$和$$...$$格式。在解释反向传播时,可能需要写出损失函数对权重的,例如使用链式法则的公式。对于RNN,可能需要写出隐藏状态的计算公式,如$h_t = \tanh(W_{hh}h_{t-1} + W_{xh}x_t + b_h)$,并确保这些公式正确使用LaTeX语法。 还要考虑用户可能的疑问点,比如为什么RNN需要反向传播,或者RNN在处理长序列时的挑战。这时候需要在解释中自然地融入这些问题的答案,比如在RNN部分提到梯度消失或爆炸的问题,以及如何通过BPTT(随时间反向传播)来训练。 结构方面,先分别介绍两个概念,再讨论它们的联系。例如,RNN在训练时使用反向传播的一种变体,即BPTT。需要比较两者的不同,比如BPTT需要考虑时间步的展开,而标准反向传播用于前馈网络。 需要检查是否有遗漏的关键点,比如反向传播的具体步骤,或者RNN的不同架构。同时确保语言简洁,避免过于技术化,但保持准确性。最后,总结两者的关系和各自的应用场景,帮助用户形成整体理解。</think>好的!我将分步介绍反向传播Backpropagation)和循环神经网络(RNN),并说明它们的核心原理与联系。 --- ### 一、反向传播Backpropagation反向传播是训练人工神经网络的**核心算法**,其本质是通过链式法则高效计算损失函数对网络参数的梯度。 #### 1. 核心思想 - **前向传播**:输入数据通过网络逐层计算,最终得到预测值。 - **损失计算**:比较预测值与真实值的差异,得到损失函数值,例如均方误差: $$ L = \frac{1}{N}\sum_{i=1}^{N}(y_i - \hat{y}_i)^2 $$ - **反向传播**:从输出层向输入层反向传递误差,利用链式法则逐层计算梯度: $$ \frac{\partial L}{\partial W^{(k)}} = \frac{\partial L}{\partial a^{(k)}} \cdot \frac{\partial a^{(k)}}{\partial z^{(k)}} \cdot \frac{\partial z^{(k)}}{\partial W^{(k)}} $$ 其中 $W^{(k)}$ 是第 $k$ 层权重,$a^{(k)}$ 是激活值,$z^{(k)}$ 是加权输入。 #### 2. 关键特点 - **高效性**:通过动态规划避免重复计算梯度。 - **局限性**:梯度可能消失(如使用 Sigmoid 激活函数)或爆炸(权重初始化不当)。 --- ### 二、循环神经网络(RNN) RNN 是专门处理**序列数据**的神经网络,通过引入“隐状态”记忆历史信息。 #### 1. 核心结构 - **时间展开形式**:在每个时间步 $t$,输入 $x_t$ 与前一时刻隐状态 $h_{t-1}$ 结合: $$ h_t = \tanh(W_{hh}h_{t-1} + W_{xh}x_t + b_h) $$ $$ y_t = W_{hy}h_t + b_y $$ - **参数共享**:所有时间步共享同一组参数 $W_{hh}, W_{xh}, W_{hy}$。 #### 2. 典型应用 - 时间序列预测(如股票价格) - 自然语言处理(如机器翻译、文本生成) - 语音识别 #### 3. 挑战与改进 - **长依赖问题**:传统 RNN 难以捕捉远距离时序依赖 → 改进方案:LSTM、GRU。 - **训练方法**:使用**随时间反向传播BPTT)**,即对展开后的时间序列执行反向传播。 --- ### 三、反向传播与 RNN 的关系 1. **训练机制**:RNN 通过 BPTT 训练,本质是反向传播在时间维度上的扩展。 2. **梯度问题**:RNN 更容易出现梯度消失/爆炸,因梯度需跨多个时间步传递。 3. **解决方案**:LSTM/GRU 通过门控机制缓解梯度问题;梯度裁剪可应对梯度爆炸。 --- ### 四、总结对比 | **特性** | 反向传播Backpropagation) | 循环神经网络(RNN) | |-------------------|----------------------------------|----------------------------------| | **目标** | 计算梯度以优化网络参数 | 处理序列数据,捕捉时序依赖 | | **计算复杂度** | $O(n)$(n 为参数数量) | $O(T \cdot n)$(T 为时间步长度) | | **核心挑战** | 梯度消失/爆炸 | 长时序依赖、参数共享的稳定性 | 希望以上解释能帮助你理解两者的核心概念!如果有具体问题,欢迎进一步讨论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值