误差反向传播算法

这篇具有很好参考价值的文章主要介绍了误差反向传播算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

通过单个感知机或者单层神经网络只能够实现线性分类的问题,而多层神经网络可以解决非线性分类问题。

神经网络中的模型参数,是神经元模型中的连接权重以及每个功能神经元的阈值,
误差反向传播算法
这些模型参数并不是我们人工设计或者指定的,而是通过算法自动学习到的。

和其他机器学习算法一样,神经网络的训练,就是给定训练集,通过学习算法,确定学习参数的过程。可以直接使用梯度下降法需要计算损失函数的梯度,在没有隐含层的单层神经网络中,可以通过计算直接得到梯度。
误差反向传播算法
在多层神经网络中,上一层的输出是下一层的输入,要在网络中的每一层计算损失函数的梯度会非常的复杂,
误差反向传播算法
为了解决这个问题,科学家提出一种解决方法,即利用链式法则,反向传播损失函数的梯度信息,只要从后往前遍历一遍神经网络,就能够计算出损失函数对网络中所有模型参数的梯度。这种方法被称之为误差反向传播算法。

需要注意的是,很多人认为误差反向传播算法是多层神经网络的学习算法。这是不对的。

误差反向传播算法仅仅是一种在神经网络的训练过程中用来计算梯度的方法,它能够计算损失函数对网络中所有模型参数的梯度,这个梯度会反馈给某种学习算法,例如梯度下降法,用来更新权值,最小化损失函数,这里梯度下降法才是学习算法,除了梯度下降法,也可以采用其他的学习算法。另外,误差反向传播法并不仅仅适应于多层神经网络,原则上它可以计算任何函数的导数。

为了便于理解,我们首先来看一个简单的例子,
误差反向传播算法
上图为一个最简单的两层神经网络。它的输入层、隐含层和输出层都只有一个节点。隐含层和输出层的激活函数都使用 Sigmoid 函数,隐含层神经元接收输入值 x ,
误差反向传播算法
首先,进行线性变换,然后将线性变换的结果 zh 作为激活函数函数的输入,从而产生隐含层的输出 yh ,
误差反向传播算法
输出层神经元接收隐含层的输出yh 作为输入,对其进行线性变换,产生zo
误差反向传播算法
然后再将 zo 作为激活函数函数的输入,从而产生神经网络的输出 yo
误差反向传播算法
这个神经网络中的所有模型参数是 wh ,bh ,wo ,bo .

训练的过程就是将样本数据x输入网络中,从而通过学习算法,寻找合适的模型参数,使得网络的输出yo 与样本数据的标签一致。

假设现在有一个样本
误差反向传播算法
我们将其输入到这个神经网络中,看看网络是如何进行训练的,
步骤一:设置模型参数初始值
误差反向传播算法
步骤二:正向计算预测值
使用模型参数初始值和输入值x,逐层计算,得到神经网络的预测值0.59,它而样本标签0.8相差比较大,因此需要使用误差函数来调整模型参数,也就是训练网络。

第三步:计算误差
使用平方损失函数计算出预测值和标签值之间的误差。

第四步:误差反向传播
使用误差反向传播算法对误差损失函数的梯度信息进行反向传播,同时更新所有的模型参数,首先更新输出层模型参数。

梯度下降法的参数更新公式如下:
误差反向传播算法
这里要计算误差损失函数对 wo 和 bo 的偏导数,在之前,我们在编程实现逻辑回归时,直接使用了 TensorFlow 中提供的自动求导函数,并没有关心这个倒数是如何计算出来的。

现在,来手动计算一下,
误差反向传播算法
可以发现,这三个函数之间是嵌套的关系,要得到损失函数对wo 的偏导数,可以使用链式求导法则来进行计算。
误差反向传播算法
下面来分别对每一项进行计算。
误差反向传播算法
再将这三个得到的值进行相乘,
误差反向传播算法
就得到了损失函数对 wo 的偏导数。

取学习率 η 等于 0.5 ,根据迭代公式,更新 wo 的值。
误差反向传播算法
同样的方法可得
误差反向传播算法
其中,
误差反向传播算法
再使用迭代公式更新 bo
误差反向传播算法
现在,输出层的参数就已经更新好了。
误差反向传播算法
下面,继续更新隐含层的参数,同样,梯度下降法的参数更新公式如下:
误差反向传播算法
这里要计算误差损失函数对 wh 和 bh 的偏导数。

同样可以使用链式求导法则来进行计算。
误差反向传播算法
并且存在下述嵌套关系,
误差反向传播算法
计算其中所有的偏导数,
误差反向传播算法
最后把他们的各自结果代入上面的链式求导公式,
误差反向传播算法
最终求得损失函数对 wh 的偏导数结果,采用同样的方法,最终也可以得到损失函数对 bh 的偏导数。

误差反向传播算法
(计算技巧:与损失函数对 wh 的偏导数公式相比,只有最后一项不同。)

最后代入上述公式可以得到。
误差反向传播算法
得到
误差反向传播算法
之后,就可以根据迭代公式得到
误差反向传播算法
到此为止,我们已经将这个神经网络中的四个模型参数都更新了,完成了一轮训练。
误差反向传播算法
接下来,再使用新的参数逐层正向计算得到新的预测值,然后和标签值进行比较计算误差,再逐层反向传播损失函数的梯度信息,更新模型参数,完成下一轮训练,如此循环,直到误差收敛到一个理想的值。

这个神经网络相对简单,每层只有一个神经元,因此,输出层的误差和梯度全部被反向传播给隐含层。

如果隐含层中有多个神经元,那么误差项就会根据不同神经元的贡献程度,进行反向传播。这个贡献程度,是由它们的权值来决定的。
误差反向传播算法
例如,一个是 0.4 ,一个是 0.6
误差反向传播算法
那么就会把输出层的误差按照这个权值的比例分别传递给节点 E 和结点 F,同样隐含层节点 E 的误差,也按照连接的权值分别传递给节点 C 和结点 D。
误差反向传播算法
下图分别是节点 C 和结点 D 接收到的来自节点 E 的误差,误差反向传播算法
结点 F 的误差也按照权值分别传递给节点 C 和结点 D,下图即为节点 C 和结点 D 接收到的来自结点 F 的误差,
误差反向传播算法
对于节点 C 来说,它分别接收来自节点 E 和 F 传递过来的误差,下图为它接收到的误差,
误差反向传播算法
同样对于节点 D 来说,它也是分别接收来自节点 E 和 F 传递过来的误差,下图为它接收到的误差。
误差反向传播算法
当隐含层中,有多个结点时,神经网络就是这样逐层按照权值反向传播误差的。

如果再复杂一点,输出层也有两个神经元,
误差反向传播算法
那么输出层结点 G 的误差分别传递给节点 E 和结点 F ,
误差反向传播算法
而 H 的误差也分别传递给节点 E 和结点 F ,
误差反向传播算法
下图分别为 E 和 F 接收到的误差,
误差反向传播算法
继续按照权值比例逐层反向传递误差。
误差反向传播算法
可以想象,随着网络层数的加深以及每层中神经元个数的增加,误差反向传播算法得计算也会越来越复杂。

幸运的是,TensorFlow 为我们计算梯度的功能,我们在编程时是不需要这样手动推导公式,并且编写代码实现的。

总结一下,这节课的内容,就是多层神经网络的训练是通过梯度下降法训练模型参数,其中,梯度的计算是通过误差反向传播算法来进行的。训练的过程可以概括为:正向传递信号,反向传递误差。
误差反向传播算法
首先,在输入层接收输入样本特征 X ,然后在神经网络中逐层传递,直到在输出层得到预测值 Yo 。 接着将神经网络输出的预测值和 Yo 和标签值 Y 相比较,然后计算损失,
误差反向传播算法
如果损失值比较大,就使用梯度下降法调整最后一层神经元的参数,然后反向传播梯度信息,逐层后退,更新模型参数,完成一轮训练。
误差反向传播算法
参数调整后的网络,再次根据样本特征,正向计算预测值,反向传播误差,调整模型参数,最终通过这样不断地训练,直到网络输出与标签值一致。

这就好像我们学习,每个人都有自己的学习习惯和学习方法,
比如如何测试,如何写作业,如果做笔记等等,
误差反向传播算法
我们输入的知识就可以当做是 X ,经过这一系列环节之后,迎来一场考试,这就是知识正向传播的过程,输出就是考试的成绩。

如果没有自动更新的能力,那么这个考试成绩就不会去改变学习习惯,下次再考,还是这个成绩,而如果具备这种误差反向传播的能力,那么就会根据试卷上的错题,分析自己学习方法的不足,然后一层一层倒回去,调整自己的学习方式和学习习惯,完成对学习活动中各个环节的参数的调整,然后再下一轮的学习中就可以表现的更好,得到一个满意的成绩。
误差反向传播算法
如果泛化能力很强,那么使用这套调整后的学习方法再今后学习不同领域的知识时,也能取得一个好成绩。文章来源地址https://www.toymoban.com/news/detail-460758.html

到了这里,关于误差反向传播算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉:卷积核的参数可以通过反向传播学习到吗?

    在深度学习中,卷积神经网络(Convolutional Neural Networks, CNN)是一种常用的神经网络结构,其中卷积核是CNN的核心组件之一。卷积核是一个小矩阵,用于对输入数据进行卷积操作。卷积操作可以提取输入数据的特征,通过不同的卷积核可以提取不同的特征。   在前面课程中我

    2024年02月16日
    浏览(27)
  • Pytorch深度学习笔记(五)反向传播算法

    目录 1.为什么要使用反向传播算法 2.二层神经网络 3.反向传播算法更新权值的过程 4.张量Tensor 推荐课程:04.反向传播_哔哩哔哩_bilibili 1.为什么要使用反向传播算法 简单模型可以使用解析式更新w 复杂模型,如图,输入矩阵为5*1矩阵,等一层权重矩阵H1为6*5矩阵,则需要30个解

    2023年04月22日
    浏览(29)
  • 机器学习17:训练神经网络-反向传播算法

    反向传播算法对于快速训练大型神经网络至关重要。本文将介绍算法的工作原理。 目录 1.简单的神经网络 2.激活函数 3.错误函数 4.正向传播 4.1 更新隐藏层 5.反向传播 5.1 求导数

    2024年02月12日
    浏览(43)
  • 深度学习 | 前馈神经网络与反向传播算法

    目录 一、Logistic函数 二、前馈神经网络(FNN) 三、反向传播算法(BP算法) ​四、基于前馈神经网络的手写体数字识别 Logistic函数是学习前馈神经网络的基础。所以在介绍前馈神经网络之前,我们首先来看一看Logistic函数。 Logistic函数定义为: Logistic函数可以看成是一个“挤

    2024年02月04日
    浏览(34)
  • 【深度学习基础】反向传播BP算法原理详解及实战演示(附源码)

    需要源码请点赞关注收藏后评论区留言私信~~~ 神经网络的设计灵感来源于生物学上的神经网络。如图所示,每个节点就是一个神经元,神经元与神经元之间的连线表示信息传递的方向。Layer 1表示输入层,Layer 2、Layer 3表示隐藏层,Layer 4表示输出层。我们希望通过神经网络,

    2024年01月21日
    浏览(28)
  • 手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇)

    本文承接上篇上篇在此和中篇中篇在此,继续就Sepp Hochreiter 1997年的开山大作 Long Short-term Memory 中APPENDIX A.1和A.2所载的数学推导过程进行详细解读。希望可以帮助大家理解了这个推导过程,进而能顺利理解为什么那几个门的设置可以解决RNN里的梯度消失和梯度爆炸的问题。中

    2024年02月16日
    浏览(48)
  • 手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(中篇)

    近期因俗事缠身,《通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解》的中下篇鸽了实在太久有些不好意思了。为了避免烂尾,还是抽时间补上(上篇在此)。本文承接上篇,继续就Sepp Hochreiter 1997年的开山

    2024年02月11日
    浏览(41)
  • pytorch 前向传播与反向传播代码+ fp16

    optim.zero_grad() : 将模型的梯度参数设置为0,即清空之前计算的梯度值,在训练模型过程中,每次模型反向传播完成后,梯度都会累加到之前的梯度值上,如果不清空,这些过时的梯度将会影响下一次迭代的结果。因此,使用 optim.zero_grad() 来清空梯度避免这种情况的发生。保证

    2024年02月05日
    浏览(33)
  • 8. 损失函数与反向传播

    ① Loss损失函数一方面计算实际输出和目标之间的差距。 ② Loss损失函数另一方面为我们更新输出提供一定的依据。  ① L1loss数学公式如下图所示,例子如下下图所示。 结果: 结果:  ① MSE损失函数数学公式如下图所示。   结果: ① 交叉熵损失函数数学公式如下图所示。

    2024年02月10日
    浏览(25)
  • pytorch(三)反向传播

    前馈过程的目的是为了计算损失loss 反向传播的目的是为了更新权重w,这里权重的更新是使用随机梯度下降来更新的。 前馈过程 反馈过程 运行结果 在神经网路中,经常对线性的结果做一个非线性函数的变幻的展开,这就是激活函数。激活函数可以使得模型具有非线性。激活

    2024年01月24日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包