经过前面几节的学习,有同学陷入太深,可能已经有点模糊了。
这里,先冷静一下,保持清醒的大脑,看看我们在做什么:
假如个体的社会价值可以用具体的数字来衡量,与个体所处年代、个体性格、学历、家族基因等因素有关系。下面是10个真实准确的样本:
| 样本ID | 年代 | 性格 | 学历 | 家族 | 社会价值 |
|---|---|---|---|---|---|
| 1 | 1950 | A | 1 | 0 | 5,225,545,465 |
| 2 | 1950 | B | 1 | 1 | 2,332,323,232 |
| 3 | 1970 | B | 2 | 0 | 2,121,324,332 |
| 4 | 1980 | A | 2 | 0 | 78,787,892,321 |
| 5 | 1980 | A | 3 | 0 | 345,433,423 |
| 6 | 1990 | A | 2 | 0 | 434,343,467 |
| 7 | 1990 | B | 3 | 1 | 23,322,233,223 |
| 8 | 1990 | A | 0 | 1 | 232,121,233 |
| 9 | 2000 | A | 2 | 0 | 675,768,547 |
| 10 | 2010 | B | 3 | 1 | 35,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米的步长,那么由于向最小值的方向走的每一步都超过了最小值,我们就会错过最小值。
读到这里,你已经了解到了一个十分重要的神经网络算法思想:梯度下降法。
找了个动图,大家再体会一下