关于反向传播的笔记

参考《ML Lecture 7: Backpropagation》:

 

假设一个比较简单的网络结构如下:

 

 

我们取其中一部分做详细的分析:

 

对于一个输入 x1,x2,它能计算出对应的 loss C(x;θ),我们如果想要更新参数 θ={w1,w2,,b1,b2,},就要计算 θC(θ),即所有的 Cw,Cb

对于上图,第一个神经元的三个参数有

其中 Cz 不好算,但是 zw1,zw2,zb 是很好算的

这其实对于所有的神经元都是一样的,某个神经元中的求和结果 z 对于 weight 的偏导就是对应的 input(即这条有向边的起点),对于 bias 的偏导就是 1。这就是 forward pass,在参数确定、输入确定的情况下,可以很快的计算出所有的 zw,zb

 

然后就是比较难的问题,怎么计算 Cz 呢?

a=σ(z) 是一个激活函数,就有

而对于 Ca 又有

所以计算 Cz 的表达式是这样的

在输入确定的情况下 σ(z) 就也是确定的(相当于乘一个放缩系数),很明显能看出一种逆推的关系

其实这时已经能感受到反向传播的味道了。为了更加易懂,不妨来看看这个网络的最后一层(假设是如下图的参数,y1,y2 是网络的输出)

那么就有

其中 Cy1,Cy2 取决于你的函数 C,假设你的函数 C=iyi2=y12+y22,那么 Cy1=2y1,Cy2=2y2,再把网络的输出,确定的 y1,y2 值代入就好了。至于 y1z=σ(z),y2z=σ(z) 之前就讲过了,相当于一个确定的放缩系数。

所以,我们就可以从网络的最后一层,往前一层一层地逆推出所有的 Cz,这就是 backward pass。

 

这样一来,我们经过一次 forward pass 得到了所有的 zw,zb,又经过一次 backward pass 得到了所有的 Cz,两者相乘就可以得到所有的 Cw,Cb,即 θC(θ)

posted @   Dilthey  阅读(229)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示