BP算法详解 - Go语言中文社区

BP算法详解


预先说明

由于有些人实在太蠢,没办法只能加上这一段。首先,这里面什么看成变量,什么看成常量。
变量:网络的权值W(偏置b默认在W内。)以及输入X。
常量:就是target
你可能会说呃呃呃,不是输入都是有值得吗,不都是数吗,怎么会是变量啊。。我还能说什么呢?一般来说网络的反向传播就是两种类型。一种是更新网络权值W,这是属于常规的,一种是更新输入X。 不管哪种情况,我们都要把W和X看成变量,才能有反向传播。
推导过程中,W和X都是变量,输出是W和X的函数。

字母说明

  • W(l)ij :第 l 层到第 l+1 层的权值,并且是 l 层的第 j 个单元到 l+1 层的第 i 个单元的权值。

  • Z(l)i :第 l 层的第 i 个结点的输入和
    显然 Z(l)i=s(l1)j=0Wl1ijxj , 其中 sl1 代表 l1 层的结点个数(不计算偏置单元)。可以这样说,第0个单元是偏置,1~ s(n1) 是权重项。

  • a(l)i :表示第 l 层的第 i 个结点的激活值,就是下面说的out的输出,或是说 a=f(net) ,写成 a=f(z) 也是一样的。

  • δ(l)i : 叫做“残差”,这里表示第 l 层的第 i 个节点的残差。这个非常重要,残差的定义就是——总的代价函数对于某个节点的“net”的偏导。注意的是这里的“net”指的是W*x+b这样的函数结构。可以这样看网络:

    现在只需要看每个结点是如何处理数据的。不要看箭头,可以看到,h1和h2再加上“1”共三个结点输入,构成输入 x⃗  , 而相应的权值 W⃗  w5 , w6 , b2 , 也就是说 W⃗ x⃗  就是这里的“net”,然后“out”是指激活后的值,就是 f(net) .残差就是 Enet ,*不是 Eout 哦!

BP算法细节

参数说明:假设有n层。J表示代价函数,和上面的E是同样的意思,只不过用不同的字母写而已。
1: 首先当然是正向计算咯,分别求出 L2,L3,... 直至最后一层 Ln 激活值。我们这里把输入当做第一层。下面是真正的反向传播。

2: 对于第n层(最后一层是特殊的,必须单独拿出来)每个输出单元 i ,下面的 l 的值为 n , 计算每个结点的残差:

δ(l)i=J(W,b;x,y)z(l)i=z(l)i12yh 版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/sinat_29552923/article/details/74040208
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-03 10:06:57
  • 阅读 ( 372 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢