人工智能神经网络:如何使得输出值误差最小?

120 阅读3分钟

经过前面几节的学习,有同学陷入太深,可能已经有点模糊了。

这里,先冷静一下,保持清醒的大脑,看看我们在做什么:

假如个体的社会价值可以用具体的数字来衡量,与个体所处年代、个体性格、学历、家族基因等因素有关系。下面是10个真实准确的样本:

样本ID年代性格学历家族社会价值
11950A105,225,545,465
21950B112,332,323,232
31970B202,121,324,332
41980A2078,787,892,321
51980A30345,433,423
61990A20434,343,467
71990B3123,322,233,223
81990A01232,121,233
92000A20675,768,547
102010B3135,423,524,554

现在,问你具体计算公式,或者说每个因素的权重应该是什么?

假设,“最终的公式”是这样:

怎么解?我们的方法是构造一个神经网络模型,使之学会这些权重参数。

怎么学?首先随机一个参数,然后,针对每一个样本,用这个参数去计算,发现每个样本的计算结果与真实值之间都会有误差。比如,第一个样本误差为e1,第2个样本误差为e2,... ...

上一节,我们已经学到了,如何基于单个输出的误差,反向传播,去调节权重。

如何使得总误差最小?总体误差尽可能的小,这时候的各个权重参数a,b,c,d,e,f,g,h,i,j,k即为最终答案。

小型的网络,比如三两个节点,你可能可以通过穷举法,找到最优的参数。但是,对于复杂问题的大型网络,目前是没有办法穷举的。

我们需要更好的方法。下面继续。

假如“最终的公式”是上面写的那个样子的话,最终的误差函数也必定是一个高维多变量函数,我们现在假设它的图像如下:

垂直坐标为误差。其它坐标为权重参数。

一开始,使用随机权重参数,你得到的初始误差,是一个比较大的值。而可接受的最小误差接近于0。如何从初始误差才能得到接近于0的误差?

解决复杂的问题,我们通常可以将它简化分解。

你可以理解为,将这个多维/三维的问题分解为二维问题。将这个函数,简化为如下样式:

你现在在红色点所示位置。如何才能到达函数值为0的位置?很容易观察到,我们只需要稍微增加x值,那么,就会朝着最终y值为0的方向前进。

进一步,设想一下,只要我们不断地稍微增加x值,就会逐步向我们的目标靠近。直到,不能使得最终y值减小为止!

需要注意的是:我们可能需要改变步子大小,避免超调,这样就会避免在最小值的地方来回
反弹。你可以想象,如果我们距离真正的最小值只有0.5米,但是采用2米的步长,那么由于向最小值的方向走的每一步都超过了最小值,我们就会错过最小值。

读到这里,你已经了解到了一个十分重要的神经网络算法思想:梯度下降法

找了个动图,大家再体会一下