编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Macheine Learning Yearning学习笔记(九)

wxchong 2024-09-08 10:50:54 开源技术 7 ℃ 0 评论

Chapter 47

The rise of end-to-end learning

端到端学习的兴起


假设要构建一个系统来检查在线评论,识别正面和负面观点的问题被称为“情感分类”。为了构建该系统,可以构建两个组件的“流水线”:

  • 语法分析器:一个用标识最重要词语的信息来注释文本的系统。例如,你可以使用语法分析器去标注所有的形容词和名词。
  • 情感分类:一个将注释的文本作为输入并预测总体情感的学习算法。语法分析器的注释可以极大地帮助学习算法:例如给形容词更高的权重。

我们可以将两个组件的“流水线”可视化如下:

最近有一种趋势:用单一学习算法替换管道(pipeline systems)系统。 端到端学习算法只需将原始文本作为输入,并尝试直接识别情感类别:

神经网络通常用于端到端学习系统。 术语“端到端”是指:我们要求学习算法直接从输入到所需输出。 即,学习算法直接将系统的“输入端”连接到“输出端”。

在数据丰富的问题中,端到端系统取得了巨大成功。 但它们并不总是一个不错的选择。 接下来的几章将提供更多端到端系统的示例,并就何时应该使用它们提供建议。

Chapter 48

More end-to-end learning examples

更多端到端学习示例


假设你想构建一个语音识别系统。你可以用三个组件构建一个系统:


这些组件功能如下:

  • 计算特征:提取手工设计的功能,例如MFCC(梅尔频率倒谱系数)功能,它们试图捕捉话语的内容,同时忽略不太相关的属性,例如说话者的音调。
  • 音素识别器:一些语言学家认为存在称为“音素”的基本声音单位。例如,“保持”中开头的“k”与“蛋糕”中的“c”音音素相同。该系统试图识别音频剪辑中的音素。
  • 最终识别器:获取已识别音素的序列,并尝试将它们串联成输出转录。

端到端系统可以输入一个音频剪辑,并试图直接输出转录:


再例如:一个自动驾驶汽车的简单架构:


它有三个组件:

  • 一个使用摄像机图像检车其他车辆;
  • 一个检测行人;
  • 然后最后一个组件为我们自己的汽车规划一条避免汽车和行人路线。

相反,端到端的方法可能会试图接收传感器输入并直接输出转向方向


尽管端到端学习取得了很多成功,但它并不总是最好的方法。例如,端到端语音识别效果很好。但对于自动驾驶的端到端学习我持怀疑态度。接下来的几章将解释其原因。

Chapter 49

Pros and cons of end-to-end learning

端到端学习的优点和缺点


让我们回到前面的例子语音流水线:


该流水线的很多部分是“手工设计”的:

  • MFCCs是一个手工设计的音频特征的集合。尽管它们提供了一个音频输入的合理总结,它们也通过丢弃一些信息来简化输入信号。
  • 音素是语言学家的发明。在某种程度上,音素是对现实较差的近似。

虽然这些手工设计的组件限制了语音系统的潜在性能。然而,允许手工设计的组件也有一些优点:

  • MFCC特征对不影响内容的某些语音属性(如说话者的音高)具有鲁棒性。因此,它们有助于简化学习算法的问题。
  • 在某种程度上,音素是语音的合理表示,它们也能帮助学习算法理解基本的声音要素,从而提高其性能。


我们再来看端到端系统:


  • 该系统缺乏手工设计的知识。因此,当训练集很小时,它可能比手工设计的流水线要差。
  • 但当训练集很大时, 那么它不会受到MFCC或基于音素表示的局限性的阻碍。如果学习算法是一个足够大的神经网络,并且训练数据足够多,那么它就有可能做的很好,甚至可能达到最优错误率。
  • 当“两端”(输入端和输出端)都有很多标注数据时,端到端学习系统将表现良好。在该样例中,我们需要一个<音频,转录>对的大数据集。

如果你选择不使用端到端系统,你将不得不决定流水线中的步骤,以及如何将它们组合起来。在接下来的几个章节中,我们将为设计这些流水线提供一些建议。

Chapter 50

Choosing pipeline components: Data availability

选择流水线组件:数据可用性


在构建一个非端到端的流水线系统时,一个重要的因素是你是否可以容易地收集数据来训练每个组件。

例如,考虑自动驾驶架构:


  • 可以使用机器学习来检测汽车和行人。而且,获取这些数据并不难:有很多计算机视觉数据集,它们有大量标注的汽车和行人。
  • 也可以使用众包来获取更大的数据集。
  • 因此获取训练数据来构建一个汽车检测器和行人检测器相对容易。

相反,考虑一个纯粹的端到端方法:


为了训练该系统,我们需要一个大的(图片,转向方向)对数据集。收集该数据需要人们开车并记录他们的转向方向,这很耗时而且很贵。这使端到端系统很难训练。获取已标注汽车和行人的大型数据集要容易的多。

如果有很多数据可用于训练一个流水线的“中间模块”,那么你可以考虑使用有多个阶段的流水线。这种架构可能更优,因为你可以使用所有可用的数据来训练中间模块。

Chapter 51

Choosing pipeline components: Task simplicity

选择流水线组件:任务简单


当满足数据因素之后,还应该考虑第二个因素:应该尝试选择易于构建和学习的流水线组件


考虑图像二分类任务:

  1. 分类图像是否过度曝光(如上例所示)
  2. 分类图像是在室内还是室外拍摄
  3. 分类图像是否包含猫
  4. 分类图像是否包含黑色和白色毛皮的猫
  5. 分类图像是否包含暹罗猫(特定品种的猫)

机器学习很难定义什么任务是容易或困难。随着深度学习和多层神经网络的兴起,我们有时会说,如果一个任务可以以更少的计算步骤(对应于浅层神经网络)执行,那么该任务是“简单的”,如果一个任务需要更多计算步骤(需要更深的神经网络),那该任务是“困难的”。但这些都是非正式的定义。

如果你能够执行复杂的任务,并将其分解成简单的子任务,那么通过明确地编写子任务的步骤,你正在为算法提供先验知识,以帮助其更有效的学习任务。


比如构建一个暹罗猫检测器。纯粹的端到端架构:


使用有两个步骤的流水线架构:


第一步(猫检测器)检测图片中所有的猫:


第二步将每个检测出的猫(一次一个)的裁剪图像传入猫种类分类器:


相比仅使用标签0/1训练一个纯粹的端到端分类器,流水线中两个组件的每一个(猫检测器和猫品种分类器)似乎更容易学习并且将需要更少的数据。

总之,在决定管道组件应该是什么时,尝试构建一个管道,其中每个组件都是一个相对“简单”的功能,这样能够从少量的数据中学习。

Chapter 52

Directly learning rich outputs

直接学习丰富的输出


图像分类算法将输入图像x,并输出指示对象类别的整数。算法输出的y还可以是序列而不是代表类别的整数~~例如:


监督学习的传统应用学习了函数 h: X->Y,其中输出y通常是一个整数或实数。例如:


端到端深度学习中最激动人心的发展之一是它让我们直接学习远比数字复杂的多的东西。在上面的图片标题示例中,你可以让神经网络输入图片(x),并直接输出标题(y)。

以下是更多的例子:


这是深度学习的一个加速趋势:当你拥有正确的已标注(输入, 输出)对时,即使输出是比单个数字更丰富的句子、图片、音频或其他输出,你有时也可以用端到端来学习。


参考:

1.http://www.mlyearning.org/

2.https://xiaqunfeng.gitbooks.io/machine-learning-yearning/content/




更多个人笔记请关注:

公众号:StudyForAI(小白人工智能入门学习)

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表