Chap1——机器学习概述

Chap1. 引言

一、概念

  • 人工智能 ⊃ 机器学习 ⊃ 深度学习
  • 机器学习(machine learning,ML) 是一类强大的可以从经验中学习的技术

通常,即使我们不知道怎样明确地告诉计算机如何从输入映射到输出,大脑仍然能够自己执行认知功能。 换句话说,即使我们不知道如何编写计算机程序来识别"Alexa"这个词,大脑自己也能够识别它。 有了这一能力,我们就可以收集一个包含大量音频样本的数据集(dataset),并对包含和不包含唤醒词的样本进行标记。 利用机器学习算法,我们不需要设计一个"明确地"识别唤醒词的系统。 相反,我们只需要定义一个灵活的程序算法,其输出由许多参数(parameter)决定,然后使用数据集来确定当下的"最佳参数集",这些参数通过某种性能度量方式来达到完成任务的最佳性能

  • 深度学习:深度学习是机器学习的一个分支,用多层神经网络自动提取特征,完成监督 / 无监督等任务。深度学习是"深度"的,模型学习了许多"层"的转换,每一层提供一个层次的表示。
  • 参数:参数可以被看作旋钮,旋钮的转动可以调整程序的行为。
  • 模型(model): 任一调整参数后的程序被称为模型(model)
  • 模型族:通过操作参数而生成的所有不同程序(输入-输出映射)的集合称为"模型族"。
  • 学习(learning):一个训练模型的过程。通过这个过程,我们可以发现正确的参数集,从而使模型强制执行所需的行为。
  • 训练(train) :训练过程通常包含如下步骤:
    1.从一个随机初始化参数的模型开始,这个模型基本没有"智能";
    2.获取一些数据样本
    3.调整参数,使模型在这些样本中表现得更好;
    4.重复第(2)步和第(3)步,直到模型在任务中的表现令人满意。
  • 数据编程(programming with data):通过用数据集来确定程序行为的方法

二、机器学习中的关键组件

首先介绍一些核心组件。无论什么类型的机器学习问题,都会遇到这些组件:

1.可以用来学习的数据(data);

2.如何转换数据的模型(model);

3.一个目标函数(objective function),用来量化模型的有效性;

4.调整模型参数以优化目标函数的算法(algorithm)。

(一)数据

  • 数据集 :每个数据集由一个个样本(example, sample)也叫做数据点或数据实例组成,大多时候,它们遵循独立同分布(independently and identically distributed, i.i.d.)。
    • 独立:样本之间互不透露信息、互不干扰。
    • 同分布:所有样本,服从同一个概率模型,参数不变。即每个样本概率一样。
  • 样本:每个样本由一组称为特征(features,或协变量(covariates))的属性组成。机器学习模型会根据这些属性进行预测。
  • 标签(label,或目标(target)):要预测的特殊属性
  • 数据的维数(dimensionality):当每个样本的特征类别数量都是相同的时候,其特征向量是固定长度的,这个长度被称为数据的维数(dimensionality)。 固定长度的特征向量是一个方便的属性,它可以用来量化学习大量样本。
  • 一般来说,拥有越多数据的时候,工作就越容易。 更多的数据可以被用来训练出更强大的模型,从而减少对预先设想假设的依赖。
  • 请注意,仅仅拥有海量的数据是不够的,我们还需要正确的数据 。 如果数据中充满了错误,或者如果数据的特征不能预测任务目标,那么模型很可能无效。 常见的问题有数据中有大量垃圾数据,数据集不均衡不充分等。因此,当数据不具有充分代表性,甚至包含了一些社会偏见时,模型就很有可能有偏见。

(二)模型

大多数机器学习会涉及到数据的转换。 比如一个"摄取照片并预测笑脸"的系统。再比如通过摄取到的一组传感器读数预测读数的正常与异常程度。 虽然简单的模型能够解决如上简单的问题,但本书中关注的问题超出了经典方法的极限。 深度学习与经典方法的区别主要在于:前者关注的功能强大的模型,这些模型由神经网络错综复杂的交织在一起,包含层层数据转换,因此被称为深度学习(deep learning)。

(三)目标函数

  • 目标函数(objective function) :在机器学习中,我们需要定义模型的优劣程度的度量,这个度量在大多数情况是"可优化"的,这被称之为目标函数(objective function)。 我们通常定义一个目标函数,并希望优化它到最低点。 因为越低越好,所以这些函数有时被称为损失函数(loss function,或cost function)。
  • 当任务在试图预测数值时,最常见的损失函数是平方误差(squared error) ,即预测值与实际值之差的平方。 当试图解决分类问题时,最常见的目标函数是最小化错误率 ,即预测与实际情况不符的样本比例。 有些目标函数(如平方误差)很容易被优化,有些目标(如错误率)由于不可微性或其他复杂性难以直接优化。 在这些情况下,通常会优化替代目标。
  • 通常,损失函数是根据模型参数定义的,并取决于数据集。 在一个数据集上,我们可以通过最小化总损失来学习模型参数的最佳值。 该数据集分为
    • 由一些为训练而收集的样本组成,称为训练数据集(training dataset,或称为训练集(training set)),即用来拟合模型参数。
    • 然而,在训练数据上表现良好的模型,并不一定在"新数据集"上有同样的性能,这里的"新数据集"通常称为测试数据集(test dataset,或称为测试集(test set)),即用来你来。
    • 模型在这两部分数据集的性能:训练性能可以为测试性能作参考,但是测试性能可能会显著偏离训练性能。 当一个模型在训练集上表现良好,但不能推广到测试集时,这个模型被称为过拟合(overfitting) 的。 就像在现实生活中,尽管模拟考试考得很好,真正的考试不一定百发百中。

(四)优化算法

  • 优化算法:能搜索出最佳参数,以最小化损失函数的算法
  • 深度学习中,大多流行的优化算法通常基于一种基本方法--梯度下降(gradient descent)。 简而言之,在每个步骤中,梯度下降法都会检查每个参数,看看如果仅对该参数进行少量变动,训练集损失会朝哪个方向移动。 然后,它在可以减少损失的方向上优化参数。

三、各种机器学习问题

(一) 监督学习

  • 通俗讲,监督学习(supervised learning) 给模型看带答案的样本,让它学习「输入 → 答案」之间的映射规律;训练好之后,给它新的输入,让它预测答案。
  • 监督学习擅长在"给定输入特征"的情况下预测标签。 每个"特征-标签"对都称为一个样本(example)。 有时,即使标签是未知的,样本也可以指代输入特征。 我们的目标是生成一个模型,能够将任何输入特征映射到标签(即预测)。
  • 监督学习之所以能发挥作用,是因为在训练参数时,我们为模型提供了一个数据集,其中每个样本都有真实的标签。 用概率论术语来说,我们希望预测"估计给定输入特征的标签"的条件概率。 虽然监督学习只是几大类机器学习问题之一,但是在工业中,大部分机器学习的成功应用都使用了监督学习。 这是因为在一定程度上,许多重要的任务可以清晰地描述为,在给定一组特定的可用数据的情况下,估计未知事物的概率。
  • 监督学习的学习过程一般可以分为三大步骤:
    • 从已知大量数据样本中随机选取一个子集,为每个样本获取真实标签。有时,这些样本已有标签(例如,患者是否在下一年内康复?);有时,这些样本可能需要被人工标记(例如,图像分类)。这些输入和相应的标签一起构成了训练数据集;
    • 选择有监督的学习算法,它将训练数据集作为输入,并输出一个"已完成学习的模型";
    • 将之前没有见过的样本特征放到这个"已完成学习的模型"中,使用模型的输出作为相应标签的预测。

1.回归

  • 回归(regression) 是最简单的监督学习任务之一,用来预测连续数值。

  • 回归是训练一个回归函数来输出一个数值

  • 判断回归问题的一个很好的经验法则是,任何有关"有多少"的问题很可能就是回归问题。比如:

    • 这个手术需要多少小时;
    • 在未来6小时,这个镇会有多少降雨量。

2.分类

  • 分类(classification) :用来预测离散类别,分别"哪一个"的问题叫做分类问题。 分类问题希望模型能够预测样本属于哪个类别(category,正式称为类(class))
  • 类问题的常见损失函数被称为交叉熵(cross-entropy)。
  • 请注意,最常见的类别不一定是最终用于决策的类别。有时,不确定风险的影响远远大于收益。 因此,我们需要将"预期风险"作为损失函数,即需要将结果的概率乘以与之相关的收益(或伤害)。
  • 层次分类(hierarchical classification):有一些分类任务的变体可以用于寻找层次结构,层次结构假定在许多类之间存在某种关系。因此,并不是所有的错误都是均等的。 人们宁愿错误地分入一个相关的类别,也不愿错误地分入一个遥远的类别,这通常被称为层次分类。

3.标记问题

学习预测不相互排斥的类别的问题称为多标签分类(multi-label classification)。 举个例子,人们在技术博客上贴的标签,比如"机器学习""技术""小工具""编程语言""Linux""云计算""AWS"。 一篇典型的文章可能会用5~10个标签,因为这些概念是相互关联的。 关于"云计算"的帖子可能会提到"AWS",而关于"机器学习"的帖子也可能涉及"编程语言"。

4.搜索

有时,我们不仅仅希望输出一个类别或一个实值。 在信息检索领域,我们希望对一组项目进行排序。 以网络搜索为例,目标不是简单的"查询(query)-网页(page)"分类,而是在海量搜索结果中找到用户最需要的那部分。 搜索结果的排序也十分重要,学习算法需要输出有序的元素子集。 换句话说,如果要求我们输出字母表中的前5个字母,返回"A、B、C、D、E"和"C、A、B、E、D"是不同的。 即使结果集是相同的,集内的顺序有时却很重要。

5.推荐系统

  • 推荐系统(recommender system):它的目标是向特定用户进行"个性化"推荐。对于任何给定的用户,推荐系统都可以检索得分最高的对象集,然后将其推荐给用户。

6.序列学习

以上大多数问题都具有固定大小的输入和产生固定大小的输出。如果输入的样本之间没有任何关系,以上模型可能完美无缺。 但是如果输入是连续的,模型可能就需要拥有"记忆"功能。 比如,我们该如何处理视频片段呢? 在这种情况下,每个视频片段可能由不同数量的帧组成。 通过前一帧的图像,我们可能对后一帧中发生的事情更有把握。 语言也是如此,机器翻译的输入和输出都为文字序列。

序列学习需要摄取输入序列或预测输出序列,或两者兼而有之。 具体来说,输入和输出都是可变长度的序列,例如机器翻译和从语音中转录文本。 虽然不可能考虑所有类型的序列转换,但以下特殊情况值得一提。

  • 标记和解析
    • 这涉及到用属性注释文本序列。 换句话说,输入和输出的数量基本上是相同的。 例如,我们可能想知道动词和主语在哪里,或者可能想知道哪些单词是命名实体。 通常,目标是基于结构和语法假设对文本进行分解和注释,以获得一些注释。 这听起来比实际情况要复杂得多。 下面是一个非常简单的示例,它使用"标记"来注释一个句子,该标记指示哪些单词引用命名实体。 标记为"Ent",是实体(entity) 的简写。
  • 自动语音识别
    • 在语音识别中,输入序列是说话人的录音,输出序列是说话人所说内容的文本记录。 它的挑战在于,与文本相比,音频帧多得多(声音通常以8kHz或16kHz采样)。 也就是说,音频和文本之间没有1:1的对应关系,因为数千个样本可能对应于一个单独的单词。 这也是"序列到序列"的学习问题,其中输出比输入短得多。
  • 文本到语音
    • 这与自动语音识别相反。 换句话说,输入是文本,输出是音频文件。 在这种情况下,输出比输入长得多。 虽然人类很容易识判断发音别扭的音频文件,但这对计算机来说并不是那么简单。
  • 机器翻译
    • 在语音识别中,输入和输出的出现顺序基本相同。 而在机器翻译中,颠倒输入和输出的顺序非常重要。 换句话说,虽然我们仍将一个序列转换成另一个序列,但是输入和输出的数量以及相应序列的顺序大都不会相同。
  • .......

(二) 无监督学习

与上述监督学习不同,如果工作没有十分具体的目标,就需要"自发"地去学习了。 比如,老板可能会给我们一大堆数据,然后要求用它做一些数据科学研究,却没有对结果有要求。 这类数据中不含有"目标"的机器学习问题通常被为无监督学习(unsupervised learning)

那么无监督学习可以回答什么样的问题呢?来看看下面的例子。

  • 聚类(clustering)问题:没有标签的情况下,我们是否能给数据分类呢?比如,给定一组照片,我们能把它们分成风景照片、狗、婴儿、猫和山峰的照片吗?同样,给定一组用户的网页浏览记录,我们能否将具有相似行为的用户聚类呢?
  • 主成分分析(principal component analysis)问题:我们能否找到少量的参数来准确地捕捉数据的线性相关属性?比如,一个球的运动轨迹可以用球的速度、直径和质量来描述。再比如,裁缝们已经开发出了一小部分参数,这些参数相当准确地描述了人体的形状,以适应衣服的需要。
  • 因果关系(causality)和概率图模型(probabilistic graphical models)问题:我们能否描述观察到的许多数据的根本原因?例如,如果我们有关于房价、污染、犯罪、地理位置、教育和工资的人口统计数据,我们能否简单地根据经验数据发现它们之间的关系?
  • 生成对抗性网络(generative adversarial networks):为我们提供一种合成数据的方法,甚至像图像和音频这样复杂的非结构化数据。潜在的统计机制是检查真实和虚假数据是否相同的测试,它是无监督学习的另一个重要而令人兴奋的领域。

(三) 与环境互动

到目前为止,不管是监督学习还是无监督学习,我们都会预先获取大量数据,然后启动模型,不再与环境交互。 这里所有学习都是在算法与环境断开后进行的,被称为离线学习(offline learning) 。

与预测不同,"与真实环境互动"实际上会影响环境。 这里的人工智能是"智能代理 ",而不仅是"预测模型"。 因此,我们必须考虑到它的行为可能会影响未来的观察结果。

当训练和测试数据不同时,最后一个问题提出了分布偏移(distribution shift) 的问题。 接下来的内容将简要描述强化学习问题,这是一类明确考虑与环境交互的问题

(四) 强化学习

强化学习(reinforcement learning)

在强化学习问题中,智能体(agent)在一系列的时间步骤上与环境交互。 在每个特定时间点,智能体从环境接收一些观察(observation),并且必须选择一个动作(action),然后通过某种机制(有时称为执行器)将其传输回环境,最后智能体从环境中获得奖励(reward)。 此后新一轮循环开始,智能体接收后续观察,并选择后续操作,依此类推。

请注意,强化学习的目标是产生一个好的策略(policy)。 强化学习智能体选择的"动作"受策略控制,即一个从环境观察映射到行动的功能。