机器学习的奥秘
2017-03-10张泽玲
张泽玲
不可或缺的算法
要想弄明白机器学习,我们必须得了解计算机科学里一个重要的概念:算法。什么是算法呢?举个“栗子”,如果我们要算自然数1到100的和,既可以1+2+3+……+100 这样一步步计算,也可以像数学家高斯小时候那样,机智地用(1+100)x 50来计算。对于同一个数学计算问题,不同的计算方法就可以称之为一种“算法”。计算机科学中,科学家们经常要考虑,对于某个问题用哪种算法又快又准。对某些问题,如果现有的算法中没有高效的算法,计算机科学家们还需要为该类问题设计新的算法。听到这里,可能你会觉得有点疑惑:关于算法的研究感觉更像是数学研究啊?没错,你的感觉是对的,深厚的数学功底确实有利于算法研究,比如计算机科学的两位祖师爷阿兰·图灵和冯·诺依曼,他们也都是厉害的数学家,所以算法研究本身确实也可以归类为应用数学。有了对算法的基本概念,我们就可以说机器学习其实是一类算法的统称。
机器学习的三大分支
由于训练方法和应用领域的不同,机器学习主要有三个分支,分别是监督学习、无监督学习和强化学习。它们各不相同,依靠着各自的特点在人工智能研究领域中大显身手。
第一分支:监督学习(Supervised Learning)
所谓的监督学习,其实就像老师没讲知识点,先给我们留作业题让我们自己学着做,然后再出个测试看我们学习的效果。这个过程中,我们会给程序一个数据集,称之为训练集,其中一部分称为例子,相当于习题;一部分称为目标,相当于答案。然后设定一个函数模型,让程序不断把训练集的例子代入函数模型,算答案,对答案。算的答案不对,程序就去调整这个函数模型里的某些参数,再重复之前的过程,直到能得出较高的正确率。 接着再给程序一个测试集,相当于考试。如果程序对测试集里的例子算出的答案正确率也比较高,表明训练成功。在监督学习的训练过程中,用到了许多数学里的回归近似方法。当然,具体应用中的数学模型并不只是回归这样简单,还包括一些方法来避免训练集本身带来的偏差,就好像老师给你的习题有答案是错的,这些方法会避免错误答案干扰AI的训练。在人工智能中,监督学习主要被应用于快速高效地教受AI现有的知识。例如在2016年3月打败围棋世界冠军的著名AI,AlphaGo, 就是利用监督学习来“记忆理解”上千万盘的人类对弈棋谱。
第二分支:无监督学习(Unsupervised Learning)
无监督学习说起来比监督学习更难一点,因为这个过程非常像老师没讲知识点就给我们一堆没有答案的习题,然后让我们自己做,看我们能不能从中学到什么。再举个“栗子”,假设我们还不知道猫、老虎、狮子、豹子这几个动物同属于“猫科”,狼、狐狸、狗属于犬科,但是经过观察,我们发现前种动物在外形上都跟猫比较相似,后几种都跟狗比较相似,所以我们可以猜测它们分别属于两个分类。这个过程中并没有什么人来“监督”指导我们学习,我们自己就得出了这两种分类。而计算机程序也有类似的算法实现这个过程,我们称之为“聚类分析”。 无监督学习还有另一类任务是寻找所给数据例子之间的关系,比如说,根据一个人的购物记录,算出他买了牛奶和黄油以后有多大的可能还会买面包,得出了这个概率以后,下一次这个人买了牛奶和黄油,程序就可以预测这个人会不会买面包。从广义上来讲,无监督学习在AI应用中的内容并不仅限于此,比如说,目前的无监督学习都需要让程序从比较大量的数据里学习得到规律,我们希望AI像人一样只通过很少的例子得出可靠的结论。但是由于我们本身对人类学习思维活动的认知还非常有限,计算机科学家在寻找新的算法和方法模拟人类“无监督学习”过程中依旧困难重重。
第三分支:强化学习(Reinforcement Learning)
强化学习,有点像平时老师让我们用学到的知识去解决某些答案并不确定的复杂问题。比如说,我们虽然下棋前就熟知了五子棋的规则,也知道一些基本的下棋策略,但是在下五子棋的过程中,我们每下一步之前,还是需要猜测一下对手会怎么走,自己下一步如何走,来评估下这一步的优劣。我们下棋这个过程就是一个强化学习的过程。同时我们也有这样的体验:下棋盘数多了,之后再下棋的速度会变快,错误也会变少。让我们在 AlphaGo上具体感受一下:AlphaGo利用监督学习参照人类的走法大致学会了预测下一步,但是缺乏实战经验,于是计算机科学家让两个非监督学习下建立的AlphaGo互相下棋并不断调整,看哪边下赢了就保留胜方的模式和参数,这样下过3000万盘后,AlphaGo便通过“左右互搏”提高了“实战能力”。强化学习这一方法背后的数学原理,与监督/非监督学习略有差异。监督/非监督学习更多地应用了统计学,而强化学习更多地结合了离散数学、随机过程这些数学方法。在强化学习领域,依然还有很多未知的方法等待我們发现。