反向传播
为了更好的理解BP算法,我们先分析一个具体的例子,然后根据这个具体的例子,可以得到Ng给的总结(https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/),网络结构如下,同时,初始的值也标注在了图上:
首先前向传播: 激活函数sigmold
然后是反向传播:
首先计算现在的cost function,假设 cost function 为 squared error function:
所以有:
然后是更新系数:
首先更新系数 w5
w6,w7,和w8的更新与 w5相似,这里,对于最后一层,假设:
则有:
然后更新 Hidden Layer,也就是 w1到w4,此处以w1为例:
这里要注意一个变形:
所以有:
这里再假设:
所以就可以得到Ng给出的反向传播公式,以下是Ng在讲义中提到的反向传播的理解过程:首先我们是在分类问题中讲BP传播,用吴恩达的课件,中对网络的定义,假设一共有L层,第l层的的神经元有 S_l个,如下图,最终的输出有二分类的,也可以是多分类的,只在于最后一层神经元的数量
定义好网络结构之后,定义cost function:
对于二分类问题,我们一般定义cost function为:
如果为多分类问题,分为k类别,则其cost function 可以被定义为:
其中yi和 h(x_i)都变成了向量
得到网络结构和cost function之后,我们就可以使用梯度下降法,来获得每一个参数的更新了。
那么具体的反向传播要怎么做呢:Ng直接给我们了公式,对于每一层,都可以得到一个 “error”,这个error是通过反向传播得到的:
这里的公式和上面例子中,区别仅仅是将激活层的导数放的位置不同而已,整个过程是完全相同的,所以我们在真实的机器学习中,可以先求出每一层的“error”然后根据这个error直接求解每一个参数的偏导数即可,求解error的过程,就是将方向完全反过来的过程,将输出层的error作为输入,然后箭头方向反向即可得到每一层的error,所以又叫反向传播
2021.06.16:
关于VAE 重参数化技巧的一篇博文分享