1
30
你在这里发布的教程实际上是做错了。我对照Bishop的两本标准书和两个工作实现对它进行了复查。我将在下面指出确切的位置。 要记住的一件重要的事情是,你总是在寻找误差函数相对于单位或重量的导数。前者是三角形,后者是用来更新权重的。 如果你想了解反向传播,你必须了解链规则。这都是关于链式规则的。如果你不知道它到底是怎么工作的,去维基百科看看吧-没那么难。但一旦你了解了它们的起源,一切都会发生。答应!:) e/w可以通过链式规则组合成e/o/w。o/w很容易计算,因为它只是一个单位的激活/输出相对于权重的导数。E/O实际上就是我们所说的三角洲。(我假设E、O和W是这里的向量/矩阵) 我们有输出单位,因为这是我们可以计算误差的地方。(大多数情况下,我们有一个误差函数,可以归结为(t_k-o_k)的增量,例如线性输出的二次误差函数和逻辑输出的交叉熵。) 现在的问题是,我们如何得到内部单位的导数?好吧,我们知道一个单位的输出是所有输入单位的加权和一个传递函数的应用。所以o_k=f(和(w_k j*o_j,对于所有j))。 所以我们要做的是,导出关于o_j的o_k,因为delta_j=e/o_j=e/o_k o_k/o_j=delta_k o_k/o_j,所以给定delta_k,我们可以计算delta_j! 我们来做这个。O椆k=f(和(w椆k j*o椆j,对于所有j))=>椆椆o椆k/u椆o椆j=f'(和(w椆kj*o椆j,对于所有j))*W椆kj=f'(z椆k)*W椆kj。 对于乙状结肠传递函数,这就变成了z_k(1-z_k)*w_k。( 这是教程中的错误,作者说o_k(1-o_k)*w_k! ) |
2
8
我不知道你的问题是什么,但我实际上自己完成了教程,我可以向你保证,除了一个明显的错别字,没有什么不对的。 我假设你的问题是因为你对反向传播的方式感到困惑 隐藏的 delta是派生的。如果这确实是你的问题,那么请考虑 alt text http://pandamatak.com/people/anand/771/html/img334.gif 你可能对作者是如何得出这个方程式感到困惑。这实际上是多元链式规则的直接应用。即(以下内容摘自 wikipedia ) “假设z=f(u,v)的每个参数是一个双变量函数,使得u=h(x,y)和v=g(x,y),并且这些函数都是可微的。那么链式规则看起来像:
“ 现在想象一下通过归纳论证将链式规则扩展到 E(Z) 一 ,Z’ 二 ,..,z n ) Z的地方 K 是第k输出层预激活的输出, Z’ K (W) 冀 )也就是说,e是z'的函数,z'本身是w的函数 冀 (如果你一开始不明白 认为 非常小心地设置n n。)将链式规则直接扩展到n个变量: δE(Z) 一 ,Z’ 二 ,..,z n ) / δW 冀 = K δE / δz′ K δz′ K / 增量w 冀 这是最重要的一步,作者随后再次应用链式规则,这次在总和内展开 δz′ K / δW 冀 术语,即 δz′ K / δW 冀 = δz′ K / δO j δO J / δz J δz J / δW 冀 . 如果你在理解链式规则方面有困难,你可能需要上一门多元微积分的课程,或者阅读教科书中的这一节。 祝你好运。 |
3
3
我从步骤3的方程式中看到的是:
每个单元只有一个输出,但是输出和下一层之间的每个链接都是加权的。所以输出是相同的,但是在接收端,如果链路的权重不同,每个单元将收到不同的值。o_h总是指这个神经元在最后一次迭代中的值。错误不适用于输入层,根据定义,输入本身没有“错误”。 误差需要从输出端开始逐层计算,因为我们需要n+1层的误差值来计算n层。你说得对,反向传播中输入和输出之间没有直接的联系。 我相信这个公式是正确的,如果违反直觉的话。可能令人困惑的是,在每个单元的正向传播中,我们必须考虑单元左侧的所有单元和链接(输入值),但对于错误传播(反向传播),则必须考虑正在处理的单元右侧的单元(输出值)。 |
alpaca · 在“tf”的输入函数中返回多个值。py\u函数` 6 年前 |
lelli · python中的反向传播:无法理解一行代码 7 年前 |
rwallace · 显示二次内存消耗的反向传播 7 年前 |
blue-sky · 反向传播中的矩阵维数不匹配 7 年前 |
Harsh kumar · 神经网络中的线性函数产生较大的输出值 7 年前 |
Sridhar · 使用scipy实现反向传播梯度下降。优化减少 7 年前 |
Moran Reznik · 神经网络终止规则 7 年前 |
Josh Korn · 反向传播公式似乎无法实现 7 年前 |
sezanzeb · 神经网络函数收敛到y=1 8 年前 |