机器学习攻略

机器学习概览

大多数人听到“机器学习”,往往会在脑海中勾勒出一个机器人:一个可靠的管家,或是一个可怕的终结者,这取决于你问的是谁。但是机器学习并不是未来的幻想,它已经来到我们身边了。事实上,一些特定领域已经应用机器学习几十年了,比如光学字符识别 (Optical Character Recognition,OCR)。但是直到 1990 年代,第一个影响了数亿人的机器学习应用才真正成熟,它就是垃圾邮件过滤器(spam filter)。虽然并不是一个有自我意识的天网系统(Skynet),垃圾邮件过滤器从技术上是符合机器学习的(它可以很好地进行学习,用户几乎不用再标记某个邮件为垃圾邮件)。后来出现了更多的数以百计的机器学习产品,支撑了更多你经常使用的产品和功能,从推荐系统到语音识别。

机器学习的起点和终点分别是什么呢?确切的讲,机器进行学习是什么意思?如果我下载了一份维基百科的拷贝,我的电脑就真的学会了什么吗?它马上就变聪明了吗?在本文中,我们首先会澄清机器学习到底是什么,以及为什么你要使用它。

然后,在我们出发去探索机器学习新大陆之前,我们要观察下地图,以便知道这片大陆上的主要地区和最明显的地标:监督学习 vs 非监督学习,在线学习 vs 批量学习,基于实例 vs 基于模型学习。然后,我们会学习一个典型的机器学习项目的工作流程,讨论可能碰到的难点,以及如何评估和微调一个机器学习系统。

这一章只是入门闲聊,但你要确保每一点都搞明白了,再继续进行学习其余章节,也是能游刃有余的轻易理解。

什么是机器学习?

机器学习是实现人工智能的一个途径,机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。

人工智能(Artificial Intelligence)证明了很多复杂的领域你无法直接通过编程来实现处理,比如你通过程序一步一步的 if–elsif 去设置所有的逻辑判断,通过程序识别海量的异常(如果强行实现难度太高且通用性不够)。但是通过一些学习型算法,可以让计算机自己去学习,比如学习手写体,学习各种声音、学习识别图片等,目前的手写体识别、声音识别、图像识别都是人工智能领域研究出机器学习的算法,最后通过机器学习实现的。

由于现在的很多应用产生了海量数据和强大的超级计算机的存在,机器学习才能获得如此巨大的成功。

更广义的概念:

机器学习是通过编程让计算机从数据中进行学习的科学(和艺术)。

机器学习是让计算机具有学习的能力,无需进行明确编程。 —— 亚瑟·萨缪尔,1959

工程性的概念:

计算机程序利用经验E学习任务T,性能是P,如果针对任务T的性能P随着经验E不断增长,则称为机器学习。 —— 汤姆·米切尔,1997

例如,你的垃圾邮件过滤器就是一个机器学习程序,它可以根据垃圾邮件(比如,用户标记的垃圾邮件)和普通邮件(非垃圾邮件,也称作 ham)学习标记垃圾邮件。用来进行学习的样例称作训练集。每个训练样例称作训练实例(或样本)。

在这个例子中,任务T就是标记新邮件是否是垃圾邮件,经验E是训练数据,性能P需要定义:例如,可以使用正确分类的比例。这个性能指标称为准确率,通常用在分类任务中。

如果你下载了一份维基百科的拷贝,你的电脑虽然有了很多数据,但不会马上变得聪明起来。因此,这不是机器学习。

为什么使用机器学习?

思考:

  • 你会如何使用传统的技术编程,写一个人脸识别呢?
  • 你会如何使用传统的技术编程,写一个方言语音转文字呢?
  • 你会如何使用传统的技术编程,写一个猫狗图像识别呢?
  • 你会如何使用传统的技术编程,写一个智能在线人机客服呢?

使用机器学习,可以快速从数据中寻找规律、建立关系,然后根据建立的关系去解决问题。

机器学习善于

  •  需要进行大量手工调整或需要拥有长串规则才能解决的问题:机器学习算法通常可以简化代码、提高性能。
  • 问题复杂,传统方法难以解决:最好的机器学习方法可以找到解决方案。
  • 环境有波动:机器学习算法可以适应新数据。
  • 洞察复杂问题和大量数据。

机器学习的优缺点有哪些?

优点

  1. 自动化。一般来说只要训练好一个模型和及时更新,就可以在一类问题上不断使用,且在某些问题上效果要比人好得多,例如大规模的图像识别和语言识别等。
  2. 高效率。 如果用传统算法去评估一个棋局的优劣,可能计算量超大,还不一定准确。用训练好的神经网络去评估,就是一眨眼的功夫。这就是为什么AlphaGo能够这么强,它节省了大量的计算,使得本来不可行的事情变为可行。
  3. 可塑性。 如果用传统算法去解决一个问题,调整模型的代价可能是把代码重新写一遍,这使得改进的成本巨大。深度学习只需要调整参数,就能改变模型。这使得它具有很强的灵活性和成长性。一个程序可以持续改进,然后达到最理想的状态。
  4. 普适性。 机器学习模型是通过学习来解决问题,可以根据问题自动建立模型,所以能够适用于各种问题,而不仅仅局限于某个固定的问题。

缺点

  1. 训练成本较高。需要大量的训练和数据输入才能达到满意的程度,而很多问题找不到足够的数据,需要花费大量的金钱和时间去抓取原始数据。
  2. 无法直接学习知识。知识是由从数据提炼出来的。如果把人类的知识直接教给它,比如把爱因斯坦的相对论教给它,这种模式到现在还没有更好地解决方案,不过有些进展的方向是迁移学习,有兴趣可以了解下。
  3. 机器学习不善于解决某些特定问题。复杂的数学运算用神经网络来进行恐怕不是最佳方案,需要结合其他算法和实际的环境才能够正确发挥模型本身的效果。
  4. 无法对直觉性的知识和判断进行量化和延展。像人可以从自行车联想到带有自行车图案的白云,但机器学习模型目前尚未达到这点。

学习章节速览