机器学习是什么
一段程序可以看作一连串从输入到输出的过程,无论是工程师还是程序员,我们都想通过设计来完成某种功能。以做一个网页为例,要画视觉图、UI 图,以及前端后端交互图等,我们要给计算机设计一套解决具体问题的流程。
而机器学习呢?机器学习是你不去设计,而是让计算机自己去解决,如同用一套模子去打磨出能够解决特定问题的武器。机器学习做的正是“自发能够产生解决问题的程序”的程序。一些机器学习的经典算法,如线性回归、SVM、神经网络等,单个都不能解决问题,但是通过“学习”,却可以预测房价或寻找美女图片。
我们可以这样理解机器学习:把它倒过来变成“学习机器”,即一个能自动从数据中学到程序的机器。
它是怎么做到的
让机器模仿人学习的过程来学习些程序,最常见的方法就是有老师告诉你对错的学习,这称为有监督学习。
从错误中学习,即监督学习,你可以想象构建这样一个机器人,需要几个部分:
(1)输入系统,录入数据;
(2)思考预测,得到一个结果;
(3)感知错误,记录错误;
(4)根据错误改变思考,避免再犯同样的错误。
下面看看在具体的环境下我们是如何构建这个机器的。
机器学习的老师是人类的婴儿,婴儿开始什么都不会,通过观察别的孩子或家长,学走路,学说话。站不起来,就摔倒;说不对,就挨骂。他(她)知道错误后,知道换个姿势,换种说法。它的眼睛和触觉在获取数据,每一次决定怎么爬起来怎么走都是在思考和做出预测,最后把摔倒和行为联系起来,改进行为就是学习。
举个具体例子——预测房产的价格。一个房子的价格取决于非常多的相关要素,比如房子中卧室、厕所、客厅的数量和面积;周围环境,如交通状况、安静与否、有无学校等,我们需要从这些要素中知道房子的价格。如果你是传统的房产专家,那么你的方法可能是到各个地点调查成交价,随着经验的增加,你会得到各个区域的基准价格,然后按照这个基准价格结合房子的特征上下调整,得出经验公式。
有了最原始的机器学习,我们也可以把这个人类得出经验的过程让机器解决。现在只需在网上放一份表格,让人们把有关房子的有用无用的信息和价格都填了,做一个巨大的Excel 表,然后让程序从这些信息中学习价格的模式。
在这里,我们将之前的要素换成一个新词——特征。每一个特征,都用一个数表示,如同线性代数里的坐标基。这些特征是如何决定价格的,我们可以不管,让机器去决定。特征的个数我们通常称为维度,一个问题的维度往往决定其复杂性,以及所使用的方法,这就是复杂系统擅长的范畴,在此不详述。维度本身同时决定了我们可能需求的数据量的多少,高维度意味着我们需要求解问题的信息量也成比例的增长。
特征工程就是从大量的信息,比如“我的房子有个大落地窗”这种话里提取出和房价可能相关的属性(Attribute)。
所谓机器学习的模型选择,就是在寻找一个基本学习框架,包含你对预测事物的非常一般的理解,比如房子的价格可能是很多因素的叠加,学名线性回归:
我们可以用一个算法,让一个非常初级的模型自动进化,机器学习工程师要做的就是把这个模式的毛坯找出来,再把这个寻找自动算法的算法做出来,做出来后,后续的数据就会把这个毛坯逐渐打造成模型。
这个把模型打磨成形的过程就是学习,或者叫求解参数。这组参数不是让某个特定的房子的价格被最好的拟合,而是让整个数据集都被一组参数涵盖。这组参数就是我们学习的结果,仿佛像人一样拥有预测房价的能力。
就像人一样,机器也是从错误中学习的。因此,在最经典的监督学习里,我们首先要做的是衡量错误的大小,我们用一个叫Cost Function 的函数来衡量模型预测的结果与真实值的差距,模型的效果越差,这个Cost Function 的值就越高。
这个函数告诉我们,每次犯错都是潜在的风险和损失,我们称之为Cost 函数,可用来衡量当前模型离最终正确模型的距离。
这个Cost 函数恰恰是由刚刚提到的参数决定的。这些参数的含义是,当你改变某一个特征,比如房屋的面积,房子的价格就会变动,但是变动的方式是什么,你不知道,你就去随机地扰动这些参数看看得来的价格会如何变化,并且和真实的价格信息比较,可能忽然某个瞬间,你发现所有房子的价格都被一组参数神奇的拟合了。
我们称这组参数为最优,或者说这就是学习的结果。虽然这个Cost 函数和统计学里的方差很相近,但并非一个意思。
机器学习能否成功,就在于能否找到这个最优位置。大多数时候,我们连这个最优位置是否存在都不知道。
当然,刚刚说的随机方法很不靠谱,实际操作中我们用到的是一个叫作梯度下降的方法,让参数顺着最快速减少预测错误的方向自动调整。
上图中的x 轴和y 轴代表参数,高度代表错误率,洼地的那个点正是最优参数点。
训练与测试
用一个形象的比喻理解有监督学习,它就像一个拿着一堆模拟考试题学习的学生,这个过程中通过不停地比较和标准答案的差距来完成试卷,而最终这个学生要面对的是真实的考试。相对应的,我们通常在有监督学习里把我们的数据分成两部分,一部分做测试用,另一部分做考试用。一个学生很可能在平时练习的时候把每道考题都背得滚瓜烂熟,而在真正的考试里考得一塌糊涂,这种情形我们称之为过拟合。
过拟合发生的原因,主要就是在局限的数据里过度地挖掘模式导致的。假设一个人想要识别树叶,他只见过那些有锯齿的树叶,因而见到没有锯齿的叶子时就会判断它不是叶子。或者一个人只见过白天鹅,他根据已有的经验去定义天鹅,而当第一个黑天鹅出现时,他的定义就失效了。
无监督学习
在一些更困难的问题里,我们根本无法掌握所要求解的信息,比如房屋的价格,这好比一个没有标准答案的开放性考题,我们需要发散式地探索。
无监督学习看起来不能给出一个准确的答案,但却可以让我们得到意想不到的惊喜。
无监督学习最典型的范例就是聚类,一个典型的例子是,你是一家互联网公司,有一大堆客户信息,首先你需要对这些数据进行整理归类。利用无监督学习里的聚类算法如k-means,可以轻松地把你的客户信息根据特征自动划分成大类,之后你可能发现喜欢爱马仕包的女生也爱喝拉菲红酒这种信息。
再比如说你有大量的心电图数据,你要分辨出哪些是异常的可能是心脏病的情况,但是你又不知道与病人有关的其他信息,让机器进行无监督学习,很可能得到意想不到的结果。
机器学习很美吗?
机器学习这件事,看上去很美,事实上一点也不,因为你面临的是变幻莫测的问题,你将模型训练得再好,你的预测也是有风险的。首先,因为存在模式,问题才可以预测,如果你的问题本身就没有模式,或者模式极为不可捉摸,那么你的算法再强大也会失败。比如说,你要预测某个商品网站上衣服的价格,但是这个网站里的衣服都是一个疯狂的销售者根据他每天的心情好坏制定的,而你却去找了一堆衣服的尺码、材质特征来,那么你的算法终究要失败。
即使找到了模式,也总会在某个时间点上,碰到问题的边界。比如说,你要做一个根据女生特征匹配对象的机器学习算法,你的算法总是根据你过去掌握的男女匹配记录做的,而总会在某个时刻,你的对象已经不符合历史数据的规律,这时你要么调整算法,要么直接放弃服务这类无法预测的人。
机器学习最难的是什么?
如果你思考一遍上述流程,可能发现一切都很容易,从数据清洗、特征提取到模型选择,事实上,机器学习最难的一步,这里根本没有提到,那就是把现实生产生活中的问题,提炼成一个机器学习问题。这需要的是你对问题本身的深刻洞察。有一天,也许整个数据清洗到模型选择和交叉验证都自动化了,但始终有一个东西不能完全被机器搞定,那就是你如何从一个全新的领域,提取机器学习可以帮助人类解决的最重要的问题。再有,无论机器的预测多准确,如果它的结果不是在解答人的需求,那么就是一个没用的或者至少不惹人喜欢的东西。
如果机器学习想要解决一个问题,则必须具备三个条件:
(1)系统中可能存在模式;
(2)这种模式不是一般解析手段可以猜测到的;
(3)数据可以获取。
有一个条件不符合,都很难运用机器学习。
机器学习的一个核心任务是模式识别,也可以看出它和刚才讲的复杂系统提到的模式的关系。我们讲复杂系统难以通过其成分的分析对整体进行预测,然而由于复杂系统通常存在模式,因此可以通过模式识别来对系统进行归类,并预测各种可能的结果。
你要让机器做决策,一个基本的思路是从之前统计的数据,挖掘已有的模式(Pattern)入手,来掌握新的数据中蕴含的信息。这个模式在有监督学习的例子里,就是把某种数据结构和假设结论关联起来的过程,我们通常用条件概率描述。那么,让机器做决策,就是不停地通过新数据来调整这个数据结构(特征)与假设结果对应的条件概率。通常我们要把预先对某领域的知识作为预设(Prior),它是一个假设结果在数据收集前的概率密度函数,通过收集数据我们得到调整后的假设结果的概率密度函数,被称为后验概率(Posterior),最终的目标是机器得到的概率密度函数与真实情况最匹配,即Maximum a Posterior(MAP),这是机器学习的最终目标。
具体来说,机器学习问题事实上可以理解为两个层次。
层次一,建立描述问题的大框架。
这里,你所选择的不是模型,而是一个大框架,或者一个模型空间,它包含与这个大框架自洽的若干假设。下一个问题,是在这样一个模型框架下寻找那个与已知数据最匹配的假设,简称训练过程,或者调参(假设由参数表示)。
层次二,用学到的模型在新的数据里做预测或决策。
对于第一步模型框架的选择,我们要看到不同的模型框架适应的问题范畴不同,并且模型的容纳能力不同,从某种角度看就是描述能力不同。越复杂的模型,描述能力越强(用自身的高维度战胜问题的高维度)。然而,更加复杂的结构同时会带来更高的风险,因此,我们需要建立一个方法平衡描述能力和范化风险,这个方法被称为正则化,通过引入先验来约束模型空间的大小,从而在偏差与误差之间做权衡。
机器学习对抗复杂性的第一个阶段,是尽量寻找那些比较简单的模型,来刻画系统、做决策,因为人们笃信奥卡姆剃刀法则,当一件事情可以用简单的办法简化时,就不要用复杂的工具。
关于模型框架,本书给读者提供一个最小的可用框架,即简单贝叶斯分类器、树模型和神经元。
本文节选自《机器学习vs复杂系统》一书,这是一本有关人工智能、机器学习、深度学习、复杂系统的科普读物,让人从不同的视角看这些注定会深刻影响未来的不同学科,获得新的启发。不得不说,这本书有点烧脑,但确实会让人一看再看。