前言:
此时兄弟们对“反向传播算法简单例题及答案”大致比较关心,兄弟们都需要学习一些“反向传播算法简单例题及答案”的相关知识。那么小编在网摘上网罗了一些关于“反向传播算法简单例题及答案””的相关文章,希望兄弟们能喜欢,兄弟们一起来学习一下吧!反向传播是训练神经网络的常用方法。这篇文章是我尝试解释它是如何工作的一个具体例子,人们可以比较他们自己的计算,以确保他们正确理解反向传播。
概述
对于本教程,我们将使用具有两个输入,两个隐藏神经元,两个输出神经元的神经网络。此外,隐藏和输出神经元将包括偏差。
这是基本结构:
为了得到一些可用的数字,以下是初始权重、偏差和训练输入/输出:
反向传播的目标是优化权重,以便神经网络可以学习如何正确地将任意输入映射到输出。
对于本教程的其余部分,我们将使用单个训练集:给定输入0.05和0.10,我们希望神经网络输出0.01和0.99。
Forward Pass
首先,让我们看看神经网络目前在给定上面的权重和偏差以及0.05和0.10的输入时预测的内容。要做到这一点,我们要把这些输入信息传送到网络上。
我们计算出每个隐藏层神经元的总网络输入,使用激活函数压缩总网络输入(这里我们使用logistic 函数),然后对输出层神经元重复这个过程。
下面是计算h1的总净输入的方法:
然后我们使用logistic函数压缩它以获得输出h1:
执行相同的过程,h1我们得到:
我们使用隐藏层神经元的输出作为输入,对输出层神经元重复此过程。
这是输出o1:
并执行相同的过程o2:
计算总误差
我们现在可以使用平方误差函数计算每个输出神经元的误差,并将它们相加以得到总误差:
1/2包含在内,这样我们以后求导时指数就消去了。不管怎样,最终的结果是乘以一个学习率所以我们在这里引入一个常数并不重要。
例如,o1的目标输出为0.01,而神经网络的输出为0.75136507,因此其误差为:
重复o2(记住目标是0.99)这个过程,我们得到:
神经网络的总误差是这些误差的总和:
Backwards Pass
我们使用反向传播的目标是更新神经网络中的每个权重,以便它们使实际输出更接近目标输出,从而最小化每个输出神经元和整个网络的误差。
输出层
考虑的例句。我们想知道变化的例句对总误差的影响程度,也就是说
被理解为“
相对于w5的偏导数”。你也可以说“关于w5的梯度”。
通过应用链式法则则,我们知道:
在视觉上,这是我们正在做的事情:
我们需要弄清楚这个等式中的每个部分。
首先,总误差相对于输出变化了多少?
-(target-out)有时表示为 out-target
当我们采用总误差对out_o1求偏导数时,
变为零,因为out_o1不影响它,这意味着我们采用的是常数的导数,即零。
接下来,o1相对于总净输入的变化输出多少呢?
logistic 函数的偏导数是输出乘以1减去输出:
最后,o1的总净输入相对于w5变化了多少呢?
把它们放在一起:
为了减少误差,我们从当前的权重中减去这个值(可选地乘以某个学习率,eta,我们将其设置为0.5):
一些 使用α(alpha)来表示学习率,有些η(eta),有些甚至使用ε(epsilon)。
我们可以重复这个过程中获得新的权重w_6,w_7以及w_8:
在我们将新权重导入隐藏层神经元之后,我们在神经网络中执行实际更新(即,当我们继续下面的反向传播算法时,我们使用原始权重,而不是更新的权重)。
隐藏层
接下来,我们将通过计算w1、w2、w3和w4的新值继续backwards。
重点,这是我们需要弄清楚的:
视觉上:
我们将使用与输出层类似的过程,但略微不同,因为每个隐藏层神经元的输出都会影响多个输出神经元的输出(因此也会产生误差)。我们知道out_h1会影响两者out_o1和out_o2,因此需要考虑它对两个输出神经元的影响:
开始:
我们使用前面计算的值来计算:
所以:
做相同处理,我们得到:
因此:
我们计算总的净输入对h1的偏导数,对于w1,就像我们对输出神经元所做的一样:
把它们放在一起:
您可能还会看到以下内容:
我们现在可以更新w1:
重复这些w2,w3和w4
最后,我们更新了所有权重!当我们最初fed forward 0.05和0.1输入时,神经网络上的误差是0.298371109。在第一轮反向传播之后,总误差现在降至0.291027924。它可能看起来不多,但是在重复此过程10,000次之后,例如,错误直线下降到0.0000351085。此时,当我们fed forward 0.05和0.1时,两个输出神经元产生0.015912196(对比0.01目标)和0.984065734(对比0.99目标)。
标签: #反向传播算法简单例题及答案 #反向传播算法简单例题及答案解析 #反向传播算法例题及答案 #反向传播算法理解题 #反向传播算法举例