深度学习——对于反向传播的理解(举例验证)

BackPropagation是BP神经网络的基础算法,不过相信有很多人对于各种资料上教程书籍上看到的反向传播的推导看的云里雾里,刚开始看花书的时候也是这样,不过之后又带着迷惑查找看了许多讲解,勉强能够看懂了,其中用具体数值代替链式法则公式推导的方法很容易理解,在这里我和大家分享一下。

讲到神经网络,tensor传播图是最为清晰的了,如下所示:

深度学习——对于反向传播的理解(举例验证)_第1张图片

第一层是输入层,包括两个神经元i1,i2,和截距项b1,第二层是隐藏层,包括两个神经元h1,h2,和截距项b2。第三层是输出o1,o2,wi是层与层之间的权重,激活函数默认为sigmoid函数。

现在对他们赋上初值,如下图:

深度学习——对于反向传播的理解(举例验证)_第2张图片

其中输入数据 i1=0.05,i2=0.10;

输出数据o1=0.01,o2=0.99

目标:给出输入数据i1,i2(0.05,0.10),使输出尽可能和原始输出接近。

step1 前向传播

1.输入层--->隐藏层:

计算输入神经元h1的加权和:

深度学习——对于反向传播的理解(举例验证)_第3张图片

神经元h1的输出o1(激活函数为sigmoid函数):


同理,可计算出神经元h2的输出o2:


2.隐藏层--->输出层:

计算出输出层o1和o2的值:

深度学习——对于反向传播的理解(举例验证)_第4张图片


这样,前向传播就结束了,我们看到结果离我们想要的最终结果还有一段距离,下面我们进行反向传播,更新权值参数。

step2 反向传播

1.计算总误差:

总误差(square error)

深度学习——对于反向传播的理解(举例验证)_第5张图片

分别计算o1和o2的误差,结果为两个误差之和:




2.隐藏层--->输出层的权值更新:

以w5为例,如果我们想知道w5对于整体误差产生了多少影响,用整体误差对w5偏导求出:(链式法则)


深度学习——对于反向传播的理解(举例验证)_第6张图片

下面分别计算这三项:

第1项:

深度学习——对于反向传播的理解(举例验证)_第7张图片

第2项:

深度学习——对于反向传播的理解(举例验证)_第8张图片

第3项:

深度学习——对于反向传播的理解(举例验证)_第9张图片

最后三者相乘:

深度学习——对于反向传播的理解(举例验证)_第10张图片

更新w5权重参数的值:


同理:

深度学习——对于反向传播的理解(举例验证)_第11张图片

3.隐藏层--->隐藏层权值更新:

第1项




深度学习——对于反向传播的理解(举例验证)_第12张图片


同理,计算出:


相加得到:


链式法则里的第二项:

深度学习——对于反向传播的理解(举例验证)_第13张图片

第三项:

深度学习——对于反向传播的理解(举例验证)_第14张图片

三者相乘:

深度学习——对于反向传播的理解(举例验证)_第15张图片

更新w1的权值参数:


同理,其他参数:

深度学习——对于反向传播的理解(举例验证)_第16张图片

在上述这个例子第一次迭代时,总误差E(total)由0.298371109下降至0.291027924。迭代10000次之后,总误差为0.000035085,输出为[0.015912196,0.984064734](原预期输出为[0.01,0.99])。


你可能感兴趣的:(神经网络,DeepLearning)