反向传播算法如何工作

简介: 反向传播算法如何工作

1.jpg

前面一章,我们通过了梯度下降算法实现目标函数的最小化,从而学习了该神经网络的权重和偏置,但是有一个问题并没有考虑到,那就是如何计算代价函数的梯度,本章的重点就是介绍计算这些梯度的快速算法——反向传播算法,首先先介绍一下上图中以及下面文章中会出现的一些数学符号:


  • : 表示网络层数

  • : 表示第层的第个神经元的偏置

  • : 表示第层的第个神经元的激活值

  • : 表示从层的第个神经元到第层的第个神经元的连接上的权重

  • : 权重矩阵,其中元素表示层连接到层神经元的权重

  • : 第层神经元的偏置向量

  • : 第层神经元的带权输入向量

  • : 第层每个神经元激活值构成的向量

  • : 第层第个神经元的误差

本篇文章是公式重灾区,但是涉及的知识并不高级,这也说明一个道理:


很多看似显而易见的想法只有在事后才变得显而易见。


热⾝:神经⽹络中使⽤矩阵快速计算输出的⽅法


通过第一章,我们已经知道每个神经元的激活值的计算方法,根据上面的公式,我们可以得出的表达方式:


举个例子:表示第二层的第三个神经元的激活值,那么该输出值怎么同上一层的输出值以及权重关联起来的呢,根据激活值的计算公式,我们可以得出:


可以看到例子中的结果满足表达式,接下来,让我们将表达式改成向量形式:


这个式子是正确的么,我们实际根据第一层到第二层的计算来看看:


首先定义第一层的激活函数输出值向量:


然后是第一层神经元连接到第二层神经元的权重矩阵:


同理,第二层神经元的偏置向量:


我们的目标是求得第二层神经元激活值构成的向量:


激活值计算如下:


可以看到的值和前面第一次举例子算出来的值一致。


关于代价函数的两个假设


我们以均方误差得出的代价函数如下:


公式说明:


  • 是目标输出

  • 是当输入是时候网络输出的激活值向量

好了,为了应⽤反向传播,我们需要对代价函数  做出什么样的前提假设呢?


第一:代价函数可以被写成⼀个在每个训练样本  上的代价函数  的均值:


第⼆:代价可以写成神经⽹络输出的函数:

21.png

为对于⼀个单独的训练样本  其⼆次代价函数可以写作:


反向传播的四个基本方程


反向传播其实是对权重和偏置变化影响代价函数过程的理解,最终极的含义其实就是计算偏导数  和 。


为了计算这些值,我们引入一个中间量 ,其表示的是第层第个神经元的误差,其中表示第层的误差向量,对于这个误差,我们应该怎样表示呢:


接下来要做的就是将这些误差和  和  联系起来,解决方案就是反向传播基于四个基本⽅程:


输出层误差的⽅程


输出层误差的⽅程, :每个元素定义如下:


矩阵形式重写⽅程:


其中就是梯度向量,其元素就是偏导数的所有元素,以上述二次代价函数为例:


可以得出:


因此方程的矩阵形式可以改成:


推导过程如下:

1.jpg

使用下一层的误差表示当前层的误差


推导过程如下:

2.jpg

代价函数关于⽹络中任意偏置的改变率


推导过程如下:

3.jpg

代价函数关于任何⼀个权重的改变率


推导过程如下:

4.jpg

反向传播的四个基本公式,靠着一个链式法则,就全都推下来了,没有什么难度

1.png

反向传播算法


反向传播算法给出了一种计算代价函数梯度的方法,算法描述如下:


  • 输入特征 x:为输⼊层设置对应的激活值

  • 前向传播:对每个计算相应的和

  • 输出层误差:


  • 反向误差传播:对每个,计算

  • 输出:代价函数的梯度由和得出

反向传播:全局观


假设我们已经对⼀些⽹络中的

5.jpg显然,这样会造成输出激活值的改变:

6.jpg

然后,会让下一层所有的激活值产生改变:

7.jpg接着,这些改变都将影响到⼀个个下⼀层,到达输出层,最终影响代价函数:

8.jpg


根据求导的思想,我们可以得出下面公式:


我们知道,


造成了第层的第神经元的激活值的变化,这个变化由下⾯的公式给出:


的变化会造成下一层所有神经元激活值的变化,我们聚焦到其中⼀个激活值上看看影响的情况,不防设:

9.jpg

实际上,这会导致下⾯的变化:


我们已经知道,我们可以得到:


就这样一直传播下去,最终将所有的影响汇聚到输出层代价的变化,假设,那么结果的表达式就是:


影响输出层代价的权重值有很多,所以我们需要进行求和:


因为:


带入上面式子,得出:


想起一句歌词,又回到最初的起点,我们竟然就是在做反向传播,神奇。


说明


  • Neural Networks and Deep Learning[1]

  • Neural Networks and Deep Learning 中文版[2]

  • 知乎上另外一篇笔记[3]


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