为加深理解,我们运行一下Neuron_Network_Entry.py,看一下盘古自研框架的运行结果:


……
Prediction: 0.47751024652695706 while real value is: 0
Prediction: 0.47520181884600093 while real value is: 1
Prediction: 0.47891277089936185 while real value is: 1
Prediction: 0.4767604308958901 while real value is: 0
……

第一条预测的实际结果是0,预测值Prediction是0.47751024652695706,误差的计算可以采用实际值和预测值相减,或者使用方差等计算方法,这里如果就直接相减,0.47751024652695706减去0的误差就是0.47751024652695706,那么这个误差是怎么导致的?这是梯度下降理解最大的难点。回到TensorFlow的控制台,我们从后往前推看谁对这个误差负责的时候,要分别乘以它的权重,例如第三层隐藏层第一个神经元对它负责多少,肯定是误差乘以这个神经元和输出结果关联的权重;第三层隐藏层第二个神经元对它负责多少,肯定也是误差乘以这个神经元和输出结果关联的权重,根据权重计算对误差负责多大的责任。我们做的第一步就是看对误差负多大的责任。

      如图所示,我们看一个学习考试的例子。例如,期末考试的综合成绩由作业和期末考试两个因子计算得出,这里作业因子、期末考试因子理解为TensorFlow的控制台示意图中最后一个隐藏层的第一个神经元、及第二个神经元,期末考试的综合成绩是输出层的结果,其中作业占15%,期末考试占30%,如果期末考试记录的实际值是100分,期末考试的预测值是60分,误差值是100分减去60分为40分。那么,每个神经元要对这个40分的误差负多大的责任?2个神经元分别对40分误差负15%、30%的责任,计算每个神经元的负责分别为40 * 15% =6,40*30% =12,即最后一个隐藏层的第一个神经元对40分要负责6分,最后一个隐藏层的第二个神经元对40分要负责12分,这是对神经网络最重要的理解。然后怎么调整这个权重,这是求导的过程。计算误差这是第一步,误差代表变化,知道误差以后,然后对误差进行求导,求导以后调整权重。

 

             

(21)心有猛虎,细嗅蔷薇之Backward Propagation_数据

             

图 1- 33误差示意图

 

       总结一下:

  • 第一个步骤,计算误差。从后往前推,这里计算隐藏层第三层的2个神经元对结果误差负责的程度,然后计算隐藏层第二层的4个神经元对第三层的2个神经元负责的程度,然后再往前推,依次往前推......., 最后一个结果就像一棵树往前推,每个神经元对误差的结果分别负责,这是整个神经网络的Back Propagation的第一个步骤。注意,千万不要改变输入数据x1,x2的值。 如果改变了输入数据x1,x2,这一切都没什么意义了,输入数据不能改变。


  • 第二步是梯度下降计算的过程。刚才第一步只是从后往前遍历一遍,看谁对这个结果进行多大程度的负责(数量)。第二步是在负责中你的改变率是多少,是指改变率,而不是指数量,这个是梯度下降的过程,也是求导的过程。

 

这个过程就是从经验中进行反思,大脑的神经元进行了某种处理,第一是看不同的元素负多大的责任,然后根据变化率梯度求导将责任变得越来越小,最后所有的神经元对结果负的责任变的越来越小的时候,误差就越来越小,如隐藏层第三层的2个神经元对结果计算没有误差,那这2个神经元就没有责任。

如图1-26所示,这个过程就像一天做事情的时候很忙碌,但在一天结束的时候要回顾一下过去,改进一下学习一些东西,为明天的改进做准备,就如:心有猛虎,细嗅蔷薇(In me the tiger sniffs the rose),又如图1-27所示,一阴一阳的过程,形成一个永恒的循环,最初的起点就是原始的误差状态,然后到达一个不可到达的终点,因为要达到完全准确、绝对100%的精确度不大可能,就像TensorFlow的控制台示意图中的训练数据已经没问题了,但测试数据还是有错的,其中的原因就是数据规模的问题,即使Google公司也不可能获得全部的数据,只能获取越来越多的数据,所以,ForwardPropagation 就像猛虎捕获猎物的过程,然后猛虎思考过去细嗅蔷薇的过程就是BackwardPropagation,然后进行循环,进行下一次的阴阳互动,是一个无限循环(Infinite Loop)的过程。

   

(21)心有猛虎,细嗅蔷薇之Backward Propagation_权重_02

 

图 1- 34心有猛虎细嗅蔷薇        

(21)心有猛虎,细嗅蔷薇之Backward Propagation_数据_03

 

  图 1- 35一阴一阳 Infinite Loop

 

循环多少次,就是Epoch的过程。在TensorFlow的控制台中,再次恢复到初始状态,只要不按暂停,如果我们的机器是正常的,Google TensorFlow提供的playground的后台是正常的,就进入了一个Infinite Loop无限循环的过程,背后在不断的进行循环,不断的进行改进……,这里Epoch 无法达到这个精度,因为TensorFlow的控制台里面可能有100万条数据进行训练。