首先我们通过一个简单的概念来引入“训练”这一过程,或者更准确地说,我们应将之称为“调整”,通过不断地调整参数,使误差不断减小。这个概念就是计算图。
假如说我们有一个式子:
(ax + b) * c = d
为了便于计算,我们增加一些中间变量,把这个式子分解一下
u = ax
v = u + b
d = v * c
我们还可以进一步用一个图来表示这个式子。
我们给这个式子赋值,假设a=3, x=10, b=70, c=5,那么
u = a * x = 3 * 10 = 30
v = u + b = 30 + 70 = 100
d = v * c = 100 * 5 = 500
好了,现在假设d的真实值应该是600,网络计算出来的d的结果是500,为了使两者的误差小一点,我们需要使d的计算结果大一点,怎么办呢,稍微调整一下参数,使d的值增加一点。怎么调整呢?我们看到d是由u和c共同决定的,试着先调整u,但是我们不知道该调整多少,我们不知道调整了u对d影响的幅度有多大。所以我们先试着调整一点点,假设增加0.001,即
v调整 = 100 + 0.001 = 100.001
这时候
d = u * c = 100.001 * 5 = 500.005
我们可以看到,d增加了0.005,刚好是v增加值0.001的5倍。说明v对d影响的系数或者说权重是5倍。
接着,我们把v继续进行分解,从图可以看到v由u和b决定。假设u增加0.001为30.001,得到v等于100.001,即v受u影响的系数为1倍。
继续将u分解,由于u的值由a和x决定,假设x增加0.001为10.001,则u等于30.003,u受x影响的系数为3倍。
将这个过程连接起来,假设x稍微增加一个很小的值0.001,那么可以得到
d=(a*x + b)*c = 500.015
可以看到d最终增加了0.015是x增加值0.001的15倍,恰好等于上面分解出来的3个系数的乘积,
5 * 1 * 3 = 15
从这个简单的推理过程我们知道了两个结论,第一是我们可以通过不断细微地调整网络中各参数的值,最终控制结果的值;第二是结果的值受某个变更影响的程度可以通过计算图上各相邻节点影响系数相乘得到。
上面讨论的是结果受单一变量影响的系数,那么在多个变量的条件下,如果才能使计算结果与真实值最接近,或者说总误差最小呢?这就要介绍到另一个概念了。