反向传播算法

本贴最后更新于 955 天前,其中的信息可能已经渤澥桑田

概述

对于这个教程,我们将使用 2 个输入神经元、2 个隐含层神经元以及 2 个输出层神经元组成一个神经网络,另外,隐含层和输出层神经元各包含一个偏差。
这是基本结构:

目的让神经网络工作,我们对权重偏差和训练的输入/输出设置一个初始值:

_反向传播_的目的是优化权重,以便于让神经网络学习怎样正确的把任意的输入映射到输出中。

这篇教程的剩余部分我们将要和单一的训练集工作:输入 0.05 和 0.10,我们想要神经网络输出 0.01 和 0.99。

前向反馈

为了开始,当前给定权重和偏差以及输入值 0.05 和 0.10,神经网络预测结果是什么,我们需要把输入值向前传给网络。

我们知道全部的输入值传到每个隐含层神经元中,使用激活函数挤压全部的输入值(在这里,我们使用_logistic 函数_),对输出层神经元重复这一过程。

计算 h1 的输入:

然后我们利用 logistic 函数把 neth1 挤压到 h1 的输出:

对 h2 进行相同的操作:
outh2=0.596884378

对输出层神经元重复操作,使用隐含层神经元的输出作为输出层神经元的输入。

这是 o1 的输出:

对 o2 进行相同操作:
outo2=0.772928465

计算整体误差

利用平方和误差,我们能计算每个输出层神经元的误差:

例如,目标输出 o1 是 0.01,但是神经网络输出是 0.75136507,因此误差是:

对 o2 重复这个过程:
Eo2=0.023560026

神经网络整体误差:

反向传播

反向传播的目的是更新网络中每个权重,以便他们真实的输出值是接近目标输出,从而最小化输出层神经元的误差。

输出层

考虑 w5,我们想要知道 w5 怎样影响整体误差,即αEtotal αw5

应用链式规则:

可视化我们正在做的:

我们需要理解这个公式的每一步。

首先,output 怎样改变整体误差?

下一步,net input 怎样改变 o1 输出?
logistic 函数的偏导数是输出乘以 1 减输出:

最后,w5 怎样改变 o1 的 net input?

把它们结合起来:

你常常能看到 delta rule 的结合形式:

我们利用αEtotal αouto1 和αouto1 αneto1 来重写αEtotal αneto1,我们使用这个重新上面的表达式:

因此:

为了减少误差,我们从当前权重减去这个值(乘以一个学习率,设置成 0.5):

我们能重复这个过程得到新的权重 w6,w7 和 w8:

当我们继续下面的反向传输算法时,我们使用初始权重,而不是更新过的权重。

隐含层

下一步,我们将继续向后计算 w1,w2,w3 和 w4 新值,这是我们需要理解的:

可视化:

我们将要对隐含层神经元使用相似的过程,但是稍微不同的是,每个隐含层神经元的输出贡献到多个输出层神经元中。我们知道 outh1 影响 outo1 和 outo2,因此αEtotal αouth1 需要考虑两个输出层神经元的影响:

αEtotal αouth1= αEo1 αouth1+ αEo2 αouth1

先计算αEo1 αouth1:

αEo1 αouth1= αEo1 αneto1∗αneto1 αouth1

使用稍早前计算的值来计算αEo1 αneto1:

αEo1 αneto1= αEo1 αouto1∗αouto1 αneto1=0.74136507∗0.186815602

αneto1 αouth1 等于 w5:

neto1=w5∗outh1+w6∗outh2+b2∗1

αneto1 αouth1=w5=0.40

合在一起:
αEo1 αouth1= αEo1 αneto1∗αneto1 αouth1=0.138498562∗0.40=0.055399425

对αEo2 αouto1 做相同的处理:

αEo2 αouth1=−0.019049119

因此:

现在我们有αEtotal αouth1,我们还需要计算αouth1 αneth1,然后对每个权重计算αneth1 αw:

我们计算 h1 对 w1 的偏导数:

把它们结合起来:

你也可以如下写:

现在我们能更新 w1:

对 w2,w3 和 w4 重复上面过程:

最后,我们更新所有权重,当我们把输入 0.05 和 0.1 向前反馈,神经网络的误差为 0.298371109,在一次_反向传播_后,整体误差降到 0.291027924,它看似不多,但是重复 10000 次之后,误差大幅下降到 0.000035085,在这之后,我们把输入 0.05 和 0.1 向前反馈,那么输出的 2 个神经元生成 0.015912196(vs 目标 0.01)和 0.984065734(vs 目标 0.99)。

原文链接:# 一步一步教你反向传播的例子

  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    19 引用 • 31 回帖
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    60 引用 • 28 回帖

赞助商 我要投放

回帖
请输入回帖内容 ...