无公式理解反向传播算法之精髓

简介: 无公式理解反向传播算法之精髓

本篇为100天搞定机器学习之第37天,亦为3Blue1Brown《深度学习之反向传播算法》学习笔记。


640.png

上集提到我们要找到特定权重和偏置,从而使代价函数最小化,我们需要求得代价函数的负梯度,它告诉我们如何改变连线上的权重偏置,才能让代价下降的最快。反向传播算法是用来求这个复杂到爆的梯度的。


640.jpg


上一集中提到一点,13000维的梯度向量是难以想象的。换个思路,梯度向量每一项的大小,是在说代价函数对每个参数有多敏感。如下图,我们可以这样里理解,第一个权重对代价函数的影响是是第二个的32倍。


640.jpg


我们先不要管反向传播算法这一堆公式,当我们真正理解了这算法,这里的每一步就会无比清晰了。


640.jpg


我们来考虑一个还没有被训练好的网络。我们并不能直接改动这些激活值,只能改变权重和偏置值。但记住,我们想要输出层出现怎样的变动,还是有用的。我们希望图像的最后分类结果是2,我们期望第3个输出值变大,其余输出值变小,并且变动的大小应该与现在值和目标值之间的差成正比。举个例子,增大数字2神经元的激活值,就应该比减少数字8神经元的激活值来得重要,因为后者已经很接近它的目标了。


640.jpg


进一步,就来关注数字2这个神经元,想让它的激活值变大,而这个激活值是把前一层所有激活值的加权和加上偏置值。


要增加激活值,我们有3条路可以走,一增加偏置,二增加权重,或者三改变上一层的激活值。先来看如何调整权重,各个权重它们的影响力各不相同,连接前一层最亮的神经元的权重,影响力也最大,因为这些权重与大的激活值相乘。增大这几个权重,对最终代价函数造成的影响,就比增大连接黯淡神经元的权重所造成的影响,要大上好多倍。

640.jpg


请记住,说到梯度下降的时候,我们并不只看每个参数是增大还是变小,我们还看改变哪个参数的性价比最大。


640.jpg

第三个可以增加神经元激活值的方法是改变前一层的激活值,如果所有正权重链接的神经元更亮,所有负权重链接的神经元更暗的话,那么数字2的神经元就会更强烈的激发。我们也要依据对应权重的大小,对激活值做成比例的改变,我们并不能直接改变激活值,仅对最后一层来说,记住我们期待的变化也是有帮助的。


640.jpg


不过别忘了,从全局上看,只只不过是数字2的神经元所期待的变化,我们还需要最后一层其余的每个输出神经元,对于如何改变倒数第二层都有各自的想法。


640.jpg


我们会把数字2神经元的期待,和别的输出神经元的期待全部加起来,作为如何改变倒数第二层的指示。这些期待变化不仅是对应的权重的倍数,也是每个神经元激活值改变量的倍数。


640.jpg


这其实就是在实现反向传播的理念了,我们把所有期待的改变加起来,得到一串对倒数第二层改动的变化量,然后重复这个过程,改变倒数第二层神经元激活值的相关参数,一直循环到第一层。


我们对其他的训练样本,同样的过一遍反向传播,记录下每个样本想怎样修改权重和偏置,最后再去一个平均值。


640.jpg


这里一系列的权重偏置的平均微调大小,不严格地说,就是代价函数的负梯度,至少是其标量的倍数。神奇吧?


640.jpg


如果梯度下降的每一步都用上每一个训练样本计算的话,那么花费的时间就太长了。实际操作中,我们一般这样做:


首先把训练样本打乱,然后分成很多组minibatch,每个minibatch就当包含了100个训练样本好了。然后你算出这个minibatch下降的一步,这不是代价函数真正的梯度,然而每个minibatch会给一个不错的近似,计算量会减轻不少。


640.jpg

640.jpg



可以这样比喻:


沿代价函数表面下山,minibatch方法就像醉汉漫无目的的溜下山,但是速度很快。而之前的方法就像细致入微的人,事先准确的算好了下山的方向,然后谨小慎微的慢慢走。


640.jpg


这就是随机梯度下降


640.png


总结一下:反向传播算法算的是单个训练样本怎样改变权重和偏置,不仅说每个参数应该变大还是变小,还包括这些变化的比例是多大才能最快地降低cost。真正的梯度下降,对好几万个训练范例都这样操作,然后对这些变化取平均值,这样计算太慢了,我们要把所有样本分到各个minibatch中,计算每个minibatch梯度,调整参数,不断循环,最终收敛到cost function的局部最小值上。理解是一回事,如何表示出来又是另一回事,下一期,我们一起将反向传播算法用微积分的形式推导出来,敬请期待!

640.jpg



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