1,训练过程通常包含如下步骤:
- 从一个随机初始化参数的模型开始,这个模型基本毫不“智能”。
- 获取一些数据样本(例如,音频片段以及对应的是否{是,否}标签)。
- 调整参数,使模型在这些样本中表现得更好。
- 重复第2步和第3步,直到模型在任务中的表现令你满意。
2,无论我们遇到什么类型的机器学习问题,基本上存在这些组件:
- 我们可以学习的数据(data)。
- 如何转换数据的模型(model)。
- 一个目标函数(objective function),用来量化模型的有效性。
- 调整模型参数以优化目标函数的算法(algorithm)。
2.1
固定长度的特征向量是一个方便的属性,它有助于量化学习大量样本。
然而,并不是所有的数据都可以用“固定长度”的向量表示。 以图像数据为例,如果它们全部来自标准显微镜设备,那么“固定长度”是可取的; 但是如果图像数据来自互联网,它们很难具有相同的分辨率或形状。 这时,我们可以考虑将图像裁剪成标准尺寸,但这种办法很局限,有丢失信息的风险。 此外,文本数据更不符合“固定长度”的要求。 比如,对于亚马逊等电子商务网站上的客户评论,有些文本数据很简短(比如“好极了”),有些则长篇大论。 与传统机器学习方法相比,深度学习的一个主要优势是可以处理不同长度的数据。
一般来说,我们拥有的数据越多,我们的工作就越容易。 当我们有了更多的数据,我们通常可以训练出更强大的模型。 在没有大数据集的情况下,许多令人兴奋的深度学习模型黯然失色。就算一些深度学习模型在小数据集上能够工作,但其效能并不比传统方法高。
但是仅仅拥有海量的数据是不够的,我们还需要正确的数据。此外,不均衡的数据集也是不好的,比如要训练一个皮肤癌识别模型,但它(在训练数据集中)从未“见过”黑色皮肤的人群,这个模型就会顿时束手无策。
2.2
大多数机器学习会涉及到数据的转换。 比如,我们建立一个“摄取照片并预测笑脸”的系统。
2.3
学习,是指自主提高模型完成某些任务的效能。 但是,什么才算真正的提高呢? 在机器学习中,我们需要定义模型的优劣程度的度量,这个度量在大多数情况是“可优化”的,我们称之为目标函数(objective function)。
当任务在试图预测数值时,最常见的损失函数是平方误差(squared error),即预测值与实际值之差的平方。 当试图解决分类问题时,最常见的目标函数是最小化错误率,即预测与实际情况不符的样本比例。
我们通常将可用数据集分成两部分:训练数据集用于拟合模型参数,测试数据集用于评估拟合的模型。你可以把“一个模型在训练数据集上的效能”想象成“一个学生在模拟考试中的分数”。 这个分数用来为一些真正的期末考试做参考,即使成绩令人鼓舞,也不能保证期末考试成功。 换言之,测试性能可能会显著偏离训练性能。 当一个模型在训练集上表现良好,但不能推广到测试集时,我们说这个模型是“过拟合”。
2.4
一旦我们获得了一些数据源及其表示、一个模型和一个合适的损失函数,我们接下来就需要一种算法,它能够搜索出最佳参数,以最小化损失函数。 深度学习中,大多流行的优化算法通常基于一种基本方法–梯度下降(gradient descent)。 简而言之,在每个步骤中,梯度下降法都会检查每个参数,看看如果你仅对该参数进行少量变动,训练集损失会朝哪个方向移动。 然后,它在可以减少损失的方向上优化参数。
3,
监督学习(supervised learning)擅长在“给定输入特征”的情况下预测标签。 每个“特征-标签”对都称为一个样本(example)。我们的目标是生成一个模型,能够将任何输入特征映射到标签,即预测。
举一个具体的例子: 假设我们需要预测患者是否会心脏病发作,那么观察结果“心脏病发作”或“心脏病没有发作”将是我们的标签。 输入特征可能是生命体征,如心率、舒张压和收缩压。
4,
回归(regression)是最简单的监督学习任务之一。当标签取任意数值时,我们称之为回归问题。 我们的目标是生成一个模型,它的预测非常接近实际标签值。
比方说,假设我们有一组房屋销售数据表格,其中每行对应于每个房子,每列对应于一些相关的属性,例如房屋的面积、卧室的数量、浴室的数量以及到镇中心的步行分钟数等等。
5,
在分类问题中,我们希望模型能够预测样本属于哪个类别(category,正式称为类(class))。
例如,对于手写数字,我们可能有10类,分别数字0到9。 最简单的分类问题是只有两类,我们称之为“二元分类”。 例如,数据集可能由动物图像组成,标签可能是猫狗两类。 在回归中,我们训练一个回归函数来输出一个数值; 而在分类中,我们训练一个分类器,它的输出即为预测的类别。与解决回归问题不同,分类问题的常见损失函数被称为交叉熵(cross-entropy)
6,
以上大多数问题都具有固定大小的输入和产生固定大小的输出。 例如,在预测房价的问题中,我们考虑从一组固定的特征:平方英尺、卧室数量、浴室数量、步行到市中心的时间; 图像分类问题中,输入为固定尺寸的图像,输出则为固定数量(有关每一个类别)的预测概率; 在这些情况下,模型只会将输入作为生成输出的“原料”,而不会“记住”输入的具体内容。
如果输入的样本之间没有任何关系,以上模型可能完美无缺。 但是如果输入是连续的,我们的模型可能就需要拥有“记忆”功能。 比如,我们该如何处理视频片段呢? 在这种情况下,每个视频片段可能由不同数量的帧组成。 通过前一帧的图像,我们可能对后一帧中发生的事情更有把握。 语言也是如此,机器翻译的输入和输出都为文字序列。
序列学习需要摄取输入序列或预测输出序列,或两者兼而有之。 具体来说,输入和输出都是可变长度的序列,例如机器翻译和从语音中转录文本。
7,
到目前为止,所有的例子都与监督学习有关,即我们向模型提供巨大数据集:每个样本包含特征和相应标签值。你的老板可能会给你一大堆数据,然后让你用它做一些数据科学研究,却没有对结果有要求。 我们称这类数据中不含有“目标”的机器学习问题为无监督学习(unsupervised learning)。
那么无监督学习可以回答什么样的问题呢?我们来看看下面的例子:
!聚类(clustering)问题:没有标签的情况下,我们是否能给数据分类呢?比如,给定一组照片,我们能把它们分成风景照片、狗、婴儿、猫和山峰的照片吗?同样,给定一组用户的网页浏览记录,我们能否将具有相似行为的用户聚类呢?
!主成分分析(principal component analysis)问题:我们能否找到少量的参数来准确地捕捉数据的线性相关属性?比如,一个球的运动轨迹可以用球的速度、直径和质量来描述。再比如,裁缝们已经开发出了一小部分参数,这些参数相当准确地描述了人体的形状,以适应衣服的需要。这可以用来描述实体及其关系,例如“罗马”=“意大利”+“法国”+“巴黎”。
!因果关系(causality)和概率图模型(probabilistic graphical models)问题:我们能否描述观察到的许多数据的根本原因?例如,如果我们有关于房价、污染、犯罪、地理位置、教育和工资的人口统计数据,我们能否简单地根据经验数据发现它们之间的关系?
!生成对抗性网络(generative adversarial networks):为我们提供一种合成数据的方法,甚至像图像和音频这样复杂的非结构化数据。潜在的统计机制是检查真实和虚假数据是否相同的测试,它是无监督学习的另一个重要而令人兴奋的领域。
8,
如果你对使用机器学习开发与环境交互并采取行动感兴趣,那么你最终可能会专注于强化学习(reinforcement learning)。 这可能包括应用到机器人、对话系统,甚至开发视频游戏的人工智能(AI)。 深度强化学习(deep reinforcement learning)将深度学习应用于强化学习的问题,是非常热门的研究领域。比如AlphaGo 程序在棋盘游戏围棋中击败了世界冠军,是两个突出强化学习的例子。
在强化学习问题中,agent在一系列的时间步骤上与环境交互。 在每个特定时间点,agent从环境接收一些观察(observation),并且必须选择一个动作(action),然后通过某种机制(有时称为执行器)将其传输回环境,最后agent从环境中获得奖励(reward)。 此后新一轮循环开始,agent接收后续观察,并选择后续操作,依此类推。强化学习的目标是产生一个好的策略(policy)。 强化学习agent选择的“动作”受策略控制。