首先,小明需要确定所有的橙子的特征,包括并不限于大小、颜色深浅、软硬、产地等等,在这些特征之间建立一些联系,比如 A 地生产的橙子越大越好吃,B 地生产的越软水越多等等,然后再把所有这些数据都输入到程序里。
现在,小明去菜市场,不再需要记住自己在哪个菜市场,去的哪个摊位,买的哪个产地的橙子,而是直接拿着一个橙子,把它的属性输入到这个程序里,程序会自动跑出“甜不甜”、“汁多不多”,甚至更直观的“室友爱不爱吃”的结果。测试的多了,这个程序还会自动学习新的规律。
这些输入给程序,以及程序自行学习到的规律,就是机器学习算法。这个程序就是一个机器学习的系统。
可机器又是怎么“学习”的呢?
神经网络
人类至今尚未明白人脑的工作原理,不过这没关系,我们可以先复制出一个人脑的计算模型:一件事情并非像计算机程序那样输入指令输出结果,而是在人脑的多个神经元传递,每个神经元都对信息进行自己的加工,最后输出的结果。计算机科学家用同样的方式,在输入和输出之间,加入了非常多的“节点”,每个节点会对前一个节点传来的数据,按照自己拥有的一个权重系数进行加工,有时候节点还会分层。这就是“人工神经网络”(Artificial Neural Networks,ANN)。
我们还是用小明的选橙子程序来举例。即便小明已经输入了自己大量的经验,这个程序仍然不是一开始就总能准确地判断出橙子好不好吃的。它仍需要进行大量的训练:小明输入一个新橙子的特征,程序根据这些特征计算出各个结果的概率。
比方说,小明输入“美国加州大脐橙”、“颜色浅”、“软”,结果程序给出甜的概率 85%,不甜的概率 15%,汁多的概率 50%,水不多的概率 50%,室友爱吃的概率 66%,不爱吃的概率 34%。结果小明尝了一下,发现的确很甜,但汁并不多,室友吃了不是很满意,程序可以回去自动调整某些与“汁多不多”有关节点的权重。通过不断地用最终结果去返回调试,这个神经网络给正确结果赋予的概率会越来越高,反之给错误结果的概率会越来越低。
历史上,科学家还设计过多层的神经网络,每一层都会对前一层传来的结果进行再次加工,目的是模拟出一种“深思熟虑”的感觉,但最后发现结果准确度并没有提高,有的时候还会陷入误区,就像人容易朝着一个思路越陷越深,最后钻牛角尖了一样。随着技术进步,卷积神经网络(CNN)、循环神经网络(RNN),以及长短时记忆单元(LSTM)等新玩意的诞生,让这一问题得到改善。现在,最厉害的神经网络技术不但已经非常接近人脑,还排除了很多人脑自身存在的低效的思维方式。
简单来说,神经网络是一种模拟人脑,取其精华去其糟粕的计算架构;利用神经网络进行机器学习,则让计算机不再只是执行命令的机器,具有了一定程度上举一反三的能力。