非线性的例子
在上面的线性例子中,我们可以发现,误差一次性地传递给了初始值w和b,即,只经过一步,直接修改w和b的值,就能做到误差校正。因为从它的计算图看,无论中间计算过程有多么复杂,它都是线性的,所以可以一次传到底。缺点是这种线性的组合最多只能解决线性问题,不能解决更复杂的问题。这个我们在神经网络基本原理中已经阐述过了,需要有**函数连接两个线性单元。
下面我们看一个非线性的例子。
【课堂练习:做游戏】
5个人,分别代表x,a,b,c,y,其中
第1个人,输入层
正向:随机输入第一个x值,x取值范围(1,10],假设第一个数是2
反向,第2个人传回,再次正向
第2个人,第一层网络计算
正向,第1个人传入x的值,计算:
反向,第3个人传回
第3个人,第二层网络计算
正向,第2个人传入a的值,计算b:
反向,第4个人传回
第4个人,第三层网络计算
正向,第3个人传入b的值,计算c:
反向,第5个人传回
第5个人,输出层
正向,第4个人传入c的值
反向,计算y与c的差值:,传回给第4个人
假设我们想最后得到c=2.13的值,问:x应该是多少?(误差小于0.001即可)
数学解析解
梯度迭代解
因此得到如下一组公式,可以把最后一层的误差一直反向传播给最前面的,从而更新x值:
我们给定一个初始值x=2,依次计算结果如下表:
| 迭代 | 正向 | 正向 | 正向 | 正向 | 标签值y | 反向 | 反向 | 反向 | 反向 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 4 | 1.386 | 1.177 | 2.13 | -0.953 | -2.243 | -8.973 | -2.243 |
| 2 | 4.243 | 18.005 | 2.891 | 1.700 | 2.13 | -0.430 | -1.462 | -26.314 | -3.101 |
| 3 | 7.344 | 53.934 | 3.988 | 1.997 | 2.13 | -0.133 | -0.531 | -28.662 | -1.951 |
| 4 | 9.295 | 86.404 | 4.459 | 2.112 | 2.13 | -0.018 | -0.078 | -6.698 | -0.360 |
| 5 | 9.655 | 93.233 | 4.535 | 2.129 | 2.13 |
下面是运行结果:
how to play: 1) input x, 2) calculate c, 3) input target number but not faraway from c
input x as initial number(1.2,10), you can try 1.3:
2
c=1.177410
input y as target number(0.5,2), you can try 1.8:
2.13
forward...
x=2.000000,a=4.000000,b=1.386294,c=1.177410
backward...
delta_c=-0.952590, delta_b=-2.243178, delta_a=-8.972712, delta_x=-2.243178
forward...
x=4.243178,a=18.004559,b=2.890625,c=1.700184
backward...
delta_c=-0.429816, delta_b=-1.461533, delta_a=-26.314258, delta_x=-3.100772
forward...
x=7.343950,a=53.933607,b=3.987754,c=1.996936
backward...
delta_c=-0.133064, delta_b=-0.531440, delta_a=-28.662487, delta_x=-1.951435
forward...
x=9.295386,a=86.404194,b=4.459036,c=2.111643
backward...
delta_c=-0.018357, delta_b=-0.077527, delta_a=-6.698641, delta_x=-0.360321
forward...
x=9.655706,a=93.232666,b=4.535098,c=2.129577
backward...
done!
该组合函数图像(蓝色)和导数图像(绿色):
上图中的几个x坐标点,就是整个计算过程中,x的移动轨迹。
代码位置:ch02, Level1
https://github.com/microsoft/ai-edu/blob/master/B-教学案例与实践/B6-神经网络基本原理简明教程/02.2-非线性反向传播.md