查看原文
其他

如何向你奶奶解释机器学习是什么

2016-12-15 许铁 混沌巡洋舰

今天这篇文章想用最直白的话讲讲大数据和机器学习的几个基本概念。 部分案例来自machine learning is fun ,(https://medium.com/@ageitgey/machine-learning-is-fun-80ea3ec3c471#.onsw9pi04),之后巡洋舰会有翻译!


什么是机器学习


我想巡洋舰的关注者很多是伟大的码农, 一个基本的问题是, 码农(传统算法工程师)和机器学习工程师都在码程序做算法,大家都想让计算机给人类做事, 两个有什么区别?


这里可以从一个简单的例子入手,  一段程序可以看做一连串从输入到输出的过程,无论是工程师还是程序员,我们都想通过设计来完成某种功能, 比如说你做一个网页, 你要画视觉图, UI图, 前端后端交互图,我们是给计算机设计一套解决具体问题的流程, 如做一个淘宝网。


机器学习呢?  机器学习是你不去设计, 而让计算机自己去琢磨,让它在一套很一般的模子里打磨出能够解决特定问题的武器。 这点上,机器学习做的正是” 自发能够产生解决问题的程序的程序” , 一些机器学习的经典算法如线性回归, SVM, 神经网络, 它们单个都不能解决问题, 但是通过“学习”却可以一会去预测房价一会去寻找美女。


它是怎么做到的:


我们模仿人学习的过程让机器来学习些程序:


最常见的方法就是是有老师告诉你对错的学习 ,这个称为有监督学习


一个一般被作为监督学习入门的实例, 是预测房产的价格, 一个房子的价格决定于非常多的相关因素, 比如房子中卧室, 厕所,客厅的数量和面积, 周围环境的交通, 安静与否,有无学校等, 我们要从这些要素中知道房子的价格。如果你是传统的房产专家, 你的方法一定是到各个地点做调查成交价, 随着经验的增加, 你会得到各个区域的基准价格, 然后按照这个基本价格结合房子的特征上下调整,得出你的经验公式。  这真是累死小哥啊。


有了最原始的机器学习,我们也可以把这个人类得出经验的过程让机器解决。我们的小哥现在只需要在网上放一分表格, 让人们把有关房子的有用无用的信息和价格都填了, 做一个巨大的excel表格。 然后我们让程序从这些信息学习价格的pattern(模式)。


之前的因素在这里我们换以一个新的词汇-特征。每一个特征, 这次要用一个数表示, 如同线性代数里的坐标基。而这些特征如何决定价格的, 我们就可以不管, 让机器决定去。特征的个数我们通常称之为维度,一个问题的维度往往决定其复杂性, 以及所使用的方法, 这就是复杂系统所擅长讨论的范畴了在此不详述维度本身同时决定我们可能需求的数据量多少, 高维度意味着我们需要求解问题的信息量也成比例的增长。 特征工程就是在大量的信息, 比如“我的房子有个大落地窗”这种话里提取出和房价可能相关的属性(attribute)。


所谓机器学习的模型选择,就是在寻找一个基本学习框架, 包含你对预测事物的非常一般的理解, 比如房子的价格可能是很多因素的叠加这种初中水平的东西,学名线性回归:


你不是有众多特征吗? 我可以用一个算法,让一个非常初级的模型自动的进化,机器学习工程师要做的是把这个模式的毛坯找出来,以及这个寻找自动算法的算法做出来,这个一旦做出来, 后续的数据就像一颗颗子弹把模型打造成型。


这个把模型打磨成型的过程就是学习,行里叫求解参数。这组参数不是让某个特定的房子的价格被最好的拟合,而是让整个数据集都被一组参数涵盖。 这组参数就是我们学习的结果, 放佛具有了一种人一样的预测未知房价的能力。


就像人一样,机器也是从错误中学习的,因此,最经典的监督学习里, 我们首先要做的是衡量错误的大小,我们用一个叫cost function的东西衡量模型预测的结果与真实值的差距, 模型的效果越差, 这个cost function的值就越高。



这个函数告诉你的是,每次犯错都是潜在的风险和损失,我们称之为cost。而cost 函数来衡量目前模型离最终正确模型的距离。


这个cost函数恰恰是由刚刚说的参数决定的。 这些参数的含义是, 当你改变某一个特征比如房屋的面积,你的房子价格就会变动,但是变动的方式是什么, 你不知道, 你就去随机的扰动这些参数看看得来的价格会如何变化,并且和真实的价格信息比较, 可能你忽然发现某个瞬间, 你的所有房子的价格都被一组参数神奇的拟合了。对, 就是这么神奇, 几个参数可以预言不是一个,而是所有房子的价格!


我们称这组参数为最优,或者说我们学习的结果。虽然这个cost函数和统计学里的方差很相近,但说的不是一个意思。


机器学习能否成功,就在于这个最优位置能否找到, 而在大多数时候,我们连这个最优位置是否存在都不知道。


当然刚刚说的随机方法很是不靠谱,实际操作中我们用到的是一个叫梯度下降的方法, 让参数顺着最快速减少预测错误的方向去自动调整,如下图。


图中的x,y轴代表参数, 高度代表错误率, 洼地的那个点正是最优参数点。


训练与测试


用一个形象的比喻理解有监督学习它就像一个拿着一堆模拟考试题学习的学生, 这个过程里你通过不停的比较你和标准答案的差距来学习完成试卷, 而最终这个学生要面对的是真实的考试。 相对应的,我们通常在有监督学习里把我们的数据分成两部分, 一部分做学习的试题,另一个部分做考试用。 一个学生完全可能在平时练习的时候把每道考题被的滚瓜烂熟,而在真正的考试里一塌糊涂,这种情形我们称之为过拟合






如果用两个最简单的例子来解释过拟合发生的原因,主要就是在局限的数据里过度的挖掘模式导致的。  比上图说一个人想要识别树叶,它只见过那些有锯齿的树叶, 见到没有锯齿的叶子就会判断它不是叶子。 或者一个人只见过白天鹅, 它拼命的根据已有的经验去定义天鹅,而当第一个黑天鹅出现时候, 它的定义就失效了。



无监督学习 :


再一些更困难的问题里, 我们根本不掌握我们所要求解的信息,比如房屋的价格, 这好比一个没有标准答案的开放性考题, 我们需要学生发散式的探索。

无监督学习看起来不能给出一定的答案, 但是其结果却可以让我们得到意想不到的惊喜。


无监督学习最典型的范例是聚类, 一个典型的例子是, 你是一家互联网公司,你要对你的一大堆客户信息, 你首先面对的是如何把这些数据进行整理归类,无监督学习里的聚类算法如k-means,它可以轻松的把你的客户信息根据特征自动划分成大类, 之后你可以发现喜欢爱马仕包的女生也爱喝拉菲的红酒这种信息,然后你可以验证一下你的猜测,就可以愉快的推销啦!


再有说如果你有大量的人的心电图,你要分辨出哪些是异常的可能是心脏病的情况,但是你又不知道病人有关的信息, 让机器自己去无监督学习, 都可能得到意想不到的insight。


机器学习很美吗


机器学习这件事, 看上去很美, 事实上一点也不, 因为你面临的是变幻莫测的问题, 你训练的再好, 你的预测也是有风险(no free lunch here)的。首先, 因为存在模式,问题才可以预测, 如果你的问题本身就没有模式, 或者模式极为不可捉摸, 你的算法再强大也会失败。比如说你要预测某个商品网站上衣服的价格, 但是这个网站里的衣服都是一个疯狂销售者根据他每天的心情好坏定的, 而你却去找了一堆衣服的尺码材质特征来, 那你的算法终究要失败。


即使是一个模式存在的问题, 也总会在某个时点上, 碰到问题的边界。比如说你要做一个根据女生特征匹配对象的机器学习算法, 你的算法总是根据你过去掌握的男女匹配记录预测的, 而总会有某个时刻, 你的对象已经不符合历史数据的规律,这时候要不你调整算法, 要不你直接放弃服务这类无法预测的人。


机器学习最难的是什么?


如果你思考一遍上述流程, 你可能发现一切都很容易, 从数据清洗,特征提取,到模型选择, 事实上这你就错了。  因为机器学习最难的一部 , 这里根本就没提到, 那就是把现实生产生活中的问题, 提炼成一个机器学习问题 。


这需要的是你对问题本身的深刻洞察。 有一天也许整个数据清洗到模型选择和交叉验证都自动化了。但始终有一个东西不能完全被机器搞定, 那就是你如何从一个全新的领域, 去提取机器学习可以有助解决的最重要的问题。


再有, 无论机器的预测多准确, 它的结果如果不是在解答人的需求, 也是一个没用的或至少不令人喜欢的东西。 比如我发明一个算法能够特别准的预测老人的寿命, 或者根据女生现在的长相推测她80岁的长相, 即使算法十分牛掰, 这样的产品估计也不是客户喜闻乐见的。













您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存