本文主要是介绍感性认识神经网络的反向传播,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文打算从简单的方式描述神经网络的反向传播,有很多细节是不展开讲得。所以看到不展开讲的内容,知道就好,不必深究。看完本文后,会对神经网络的反向传播有一个感性的认识,然后自己再另外拓展了解细节即可。
神经网络是什么?
假设有N个输入的节点,M个输出节点。
我们假设每一个输出的节点的值,都给这N个输入节点的值有关,而每个输入节点对于输出的节点的影响的权重是各异的。那么这些权重各自应该是多少呢?可以先随机产生这些权重,然后根据这些权重算出我们的预测输出值,这些值肯定跟实际的输出值是有差异的,然后根据这些差异来再次调整这些权重。
如此重复下去,直到预测值跟目标值“差不多”。
下面这个就是一个极简单的神经网络,3个输入节点,1个输出节点。
Y= (X1 * W1)+(X2 * W2)+(X3 * W3)
但是实际应用一般是多层神经网络。
注:最下面的5个节点应该与中间曾的3个节点都相连的,为了不显得太乱,我这里没有把线条画全。
这个2层的神经网络是怎么回事呢?
先说说我们要解决什么问题:给5个输入节点,和1个输出节点。现在来构造2层的神经网络来拟合输入输出。因此加入了中间的一层,一般称为隐藏层。
现在的关系是,由输入层算出隐藏层,由隐藏层算出输出层。我们的目标是不断地调整这两层的关系,就是权重。
前文提到只有一层的神经网络该怎么调整。现在变成了两层,带来了个新问题。我们可以算出隐藏层的预测值,但是隐藏层没有期望值(或者说实际值),因为它是我们假设出来的。问题的前提条件只有5个输入节点的值和1个输出节点的值。那么我们如何评估这个隐藏层的误差呢?
那就是利用反向传播了。
首先,隐藏层的误差其实是可以由输出层的误差来评估的,为什么呢?比如隐藏层的一个节点h,它与输出层两个节点相连,o1和o2。明显,节点h的误差越大,也会造成o1和o2的误差越大。所以,他们是有关系的。
简单来说,反向传播就是先评估隐藏层和输出层的误差,调整他们的权重,再把误差传播给下面,输入层和输出层的误差的评估是根据上面传播过来的误差来计算的,然后再调整权重。
下面来演示一下这个调整的过程。
假设的开始状态:
我们设定初始的权重都是1,先正向传播,把预测值算出来。
15(20)
5 5 5
1 1 1 1 1
我们预测出来的输出值是15,跟实际的输出值20有误差。
我们来计算一下一个误差项。这个误差项有几个部分组成。
第一部分是 d1=20-15=5,就是预测值跟期望值的差。
第二部分是d2= 预测值*(1-预测值)=15*(1-15),其实这个是sigmoid的挤压函数的导数。
这里不详细讲解它代表什么,知道偏差的评估跟它有关就好了。想知道它什么意思,请看一下反向传播法则的推导过程。
第三部分是d3=学习率,常数。
第四部分是d4隐藏层的节点的值,5,5,5。
由这四部分我们由某种方法(不展开讲),算出一个误差项D。
然后根据这个误差项来调整隐藏层跟输出层的权重:w=w+D
假如,我们把这些权重都由1调整为了1.2。
这一层就搞定了。接下来看输出层跟隐藏层的。
拿隐藏层的第一个节点来讨论。
还是先评估这个节点的预测值跟期望值的误差。上面提到,因为隐藏层是没有期望值的。我们只好拿上面的误差来传播下来评估。因此,找到跟隐藏层第一个节点的相连的输出层的节点(我们这个网络只有一个),把这些节点的误差传播下来。
总的来说,隐藏层节点的误差项是有以下几个部分组成的。
第一部分d1:跟该节点相连的出处层的节点的误差,以及权重。
第二部分d2=预测值*(1-预测值),sigmoid的挤压函数的导数。
第三部分是d3=学习率,常数。
第四部分是d4输入层的节点的值,1,1,1,1,1。
由这四部分我们由某种方法,算出一个误差项D。
然后根据这个误差项来调整输入层跟隐藏层的权重:w=w+D
不断地拿训练样本来,重复这个过程,得到最终的权重。
可以看到,反向传播其实有两个“反向”,第一是权重的调整是反向的,第二是误差是反向传播下去的。
这篇关于感性认识神经网络的反向传播的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!