实例讲解反向传播(简单易懂)

转至:https://blog.csdn.net/ft_sunshine/article/details/90221691?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162087108216780357254016%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162087108216780357254016&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-90221691.first_rank_v2_pc_rank_v29&utm_term=%E5%8F%8D%E5%90%91%E4%BC%A0%E6%92%AD&spm=1018.2226.3001.4187

首先明确,“正向传播”求损失,“反向传播”回传误差。同时,神经网络每层的每个神经元都可以根据误差信号修正每层的权重,只要能明确上面两点,那么下面的例子,只要会一点链式求导规则,就一定能看懂!

BP算法,也叫δ \deltaδ算法,下面以3层的感知机为例进行举例讲解。

在这里插入图片描述
上图的前向传播(网络输出计算)过程如下:(此处为网络的整个误差的计算,误差E计算方法为mse)

在这里插入图片描述

上面的计算过程并不难,只要耐心一步步的拆开式子,逐渐分解即可。现在还有两个问题需要解决:

1. 误差E有了,怎么调整权重让误差不断减小?
2. E是权重w的函数,何如找到使得函数值最小的w。


解决上面问题的方法是梯度下降算法(简单图示如下),大家如有不太懂的可先行查阅别的资料,只要能达到理解线性回归梯度下降算法的水平即可,这里不再赘述。


划重点,划重点,划重点!!!
BP算法的具体例子来喽!!

就算上面的所有东西你都看的迷迷糊糊,通过下面的例子,相信绝大多数人也能很轻松的理解BP算法。如图是一个简单的神经网络用来举例:

在这里插入图片描述
 

下面是前向(前馈)运算(激活函数为sigmoid):

在这里插入图片描述
 

下面是反向传播(求网络误差对各个权重参数的梯度):

我们先来求最简单的,求误差E对w5的导数。首先明确这是一个“链式求导”过程,要求误差E对w5的导数,需要先求误差E对out o1的导数,再求out o1对net o1的导数,最后再求net o1对w5的导数,经过这个链式法则,我们就可以求出误差E对w5的导数(偏导),如下图所示:

在这里插入图片描述


导数(梯度)已经计算出来了,下面就是反向传播与参数更新过程:

在这里插入图片描述

上面的图已经很显然了,如果还看不懂真的得去闭门思过了(开玩笑~),耐心看一下上面的几张图,一定能看懂的。 

如果要想求误差E对w1的导数,误差E对w1的求导路径不止一条,这会稍微复杂一点,但换汤不换药,计算过程如下所示:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42018521/article/details/116749809