反向传播

为了更好的理解BP算法,我们先分析一个具体的例子,然后根据这个具体的例子,可以得到Ng给的总结(https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/),网络结构如下,同时,初始的值也标注在了图上:

RNN的反向传播 lr反向传播_多分类


首先前向传播: 激活函数sigmold

RNN的反向传播 lr反向传播_二分类_02


然后是反向传播:

首先计算现在的cost function,假设 cost function 为 squared error function:

RNN的反向传播 lr反向传播_多分类_03


所以有:

RNN的反向传播 lr反向传播_二分类_04


然后是更新系数:

首先更新系数 w5

RNN的反向传播 lr反向传播_RNN的反向传播_05


w6,w7,和w8的更新与 w5相似,这里,对于最后一层,假设:

RNN的反向传播 lr反向传播_二分类_06


则有:

RNN的反向传播 lr反向传播_多分类_07


然后更新 Hidden Layer,也就是 w1到w4,此处以w1为例:

RNN的反向传播 lr反向传播_二分类_08


这里要注意一个变形:

RNN的反向传播 lr反向传播_二分类_09


所以有:

RNN的反向传播 lr反向传播_RNN的反向传播_10


这里再假设:

RNN的反向传播 lr反向传播_反向传播_11


所以就可以得到Ng给出的反向传播公式,以下是Ng在讲义中提到的反向传播的理解过程:首先我们是在分类问题中讲BP传播,用吴恩达的课件,中对网络的定义,假设一共有L层,第l层的的神经元有 S_l个,如下图,最终的输出有二分类的,也可以是多分类的,只在于最后一层神经元的数量

RNN的反向传播 lr反向传播_二分类_12


定义好网络结构之后,定义cost function:

对于二分类问题,我们一般定义cost function为:

RNN的反向传播 lr反向传播_RNN的反向传播_13


如果为多分类问题,分为k类别,则其cost function 可以被定义为:

RNN的反向传播 lr反向传播_多分类_14


其中yi和 h(x_i)都变成了向量

RNN的反向传播 lr反向传播_反向传播_15


得到网络结构和cost function之后,我们就可以使用梯度下降法,来获得每一个参数的更新了。

那么具体的反向传播要怎么做呢:Ng直接给我们了公式,对于每一层,都可以得到一个 “error”,这个error是通过反向传播得到的:

RNN的反向传播 lr反向传播_反向传播_16


这里的公式和上面例子中,区别仅仅是将激活层的导数放的位置不同而已,整个过程是完全相同的,所以我们在真实的机器学习中,可以先求出每一层的“error”然后根据这个error直接求解每一个参数的偏导数即可,求解error的过程,就是将方向完全反过来的过程,将输出层的error作为输入,然后箭头方向反向即可得到每一层的error,所以又叫反向传播

RNN的反向传播 lr反向传播_多分类_17


2021.06.16:

关于VAE 重参数化技巧的一篇博文分享