当前位置:  开发笔记 > 前端 > 正文

理解神经网络反向传播

如何解决《理解神经网络反向传播》经验,为你挑选了2个好方法。

更新:更好地解决问题.

我试图以XOR神经网络为例来理解反向传播算法.对于这种情况,有2个输入神经元+ 1个偏置,隐藏层中的2个神经元+ 1个偏置,以及1个输出神经元.

 A   B  A XOR B
 1    1   -1
 1   -1    1
-1    1    1
-1   -1   -1

XOR神经网络示例

我正在使用随机反向传播.

在阅读了一点之后我发现输出单元的错误传播到隐藏层...最初这是令人困惑的,因为当你到达神经网络的输入层时,每个神经元都会得到一个错误调整来自隐藏层中的两个神经元.特别是,首先很难掌握错误的分配方式.

步骤1计算每个输入实例的输出.
步骤2计算输出神经元(在我们的例子中只有一个)和目标值(s)之间的误差:
步骤2 http://pandamatak.com/people/anand/771/html/img342.gif
步骤3我们使用步骤2中的错误计算每个隐藏单元的错误h:
步骤3 http://pandamatak.com/people/anand/771/html/img343.gif

"权重kh"是隐藏单元h和输出单元k之间的权重,这是令人困惑的,因为输入单元没有与输出单元相关联的直接权重.在盯着公式几个小时后,我开始思考求和意味着什么,并且我开始得出结论,连接到隐藏层神经元的每个输入神经元的权重乘以输出误差并总结.这是一个合乎逻辑的结论,但公式似乎有点令人困惑,因为它清楚地说明了'权重kh'(在输出层k和隐藏层h之间).

我在这里正确理解了一切吗?任何人都可以证实吗?

什么是输入层的O(h)?我的理解是每个输入节点有两个输出:一个进入隐藏层的第一个节点,另一个进入第二个节点隐藏层.应该将两个输出中的哪一个插入O(h)*(1 - O(h))公式的一部分?
第3步http://pandamatak.com/people/anand/771/html/img343.gif



1> bayer..:

你在这里发布的教程实际上做错了.我仔细检查了Bishop的两本标准书和我的两个工作实现.我将在下面指出确切的位置.

要记住的一件重要事情是,您始终在搜索单位或重量的误差函数的导数.前者是增量,后者是你用来更新权重的.

如果您想了解反向传播,您必须了解链规则.这都是关于链规则的.如果您不知道它是如何工作的,请查看维基百科 - 这并不难.但是一旦你理解了这些推导,一切就会到位.诺言!:)

∂E/∂W可以通过链规则组成∂E/∂o∂o/∂W.∂o/∂W很容易计算,因为它只是单位激活/输出相对于权重的导数.∂E/∂o实际上​​就是我们所说的增量.(我假设E,o和W是这里的矢量/矩阵)

我们确实将它们用于输出单元,因为这是我们可以计算误差的地方.(大多数情况下,我们有一个误差函数,其下降到(t_k - o_k)的delta,例如,对于线性输出,则为二次误差函数;对于逻辑输出,则为交叉熵.)

现在的问题是,我们如何获得内部单位的衍生品?好吧,我们知道单位的输出是所有输入单位的总和,它们的权重和之后的转移函数的应用加权.所以o_k = f(sum(w_kj*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(sum(w_kj*o_j,对于所有j))=>∂o_k/∂o_j= f'(sum(w_kj*o_j,对于所有j))*w_kj = f'(z_k)*w_kj.

对于S形传递函数的情况,这变为z_k(1-z_k)*w_kj.(这是教程中的错误,作者说o_k(1 - o_k)*w_kj!)


+1用于将计算细节与反向传播背后的直觉交织在一起。
本教程没有错。f'(z_k)= f(z_k)(1-f(z_k))`,等效于o_k(1-o_k)。

2> ldog..:

我不确定你的问题是什么,但我实际上已经完成了这个教程,我可以向你保证,除了一个明显的错字之外,没有任何不正确之处.

我将假设您的问题是因为您对反向传播隐藏的 delta 如何导出感到困惑.如果这确实是你的问题那么请考虑

alt text http://pandamatak.com/people/anand/771/html/img334.gif

你可能会对作者如何得出这个等式感到困惑.这实际上是多变量链规则的直接应用.即,(以下内容来自维基百科)

"假设z = f(u,v)的每个参数都是双变量函数,使得u = h(x,y)和v = g(x,y),并且这些函数都是可微分的.链规则看起来像:

替代文字

替代文字 "

现在想象一下通过归纳论证扩展链规则

E(Z" 1,Z" 2,...,Z" Ñ)其中Z" ķ是第k个输出层预活化的输出,和z" ķ(瓦特),其是说,E是一个函数在Z"和Z"本身就是W的功能(如果这样做没有意义的,你首先想到的应用直接推广到n个变量的链式法则非常仔细地考虑一个NN是如何设置.):

δE(Z ' 1,Z' 2,...,Z ' Ñ)/ΔW ķ δE/ΔZ' ķ ΔZ" ķ/ΔW

这是最重要的一步,笔者再次应用链式法则,这个时间的总和内扩大ΔZ" ķ/ΔW 来看,这是

ΔZ" ķ/ΔW = ΔZ" ķ/ΔO Ĵ ΔO Ĵ/ΔZ Ĵ ΔZ Ĵ/ΔW .

如果您在理解链规则时遇到困难,您可能需要学习多元微积分课程,或阅读教科书中的这一部分.

祝好运.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有