书籍资料可以在以下链接中找到:中文版,英文版。
1.端到端学习的兴起
假设你想要构建一个系统来对产品的线上评论进行检查,并且要能够自动地告诉你给出评论的人是否喜欢这个产品。
这种识别正面与负面评论的问题被称为 “情感分类”(sentiment classification) 。想要构建一个这样的系统,你的流水线模块需要有以下两个组件:
1. 解析器(parser):一种通过识别关键词汇来对文本进行注释的系统。例如,你可以使用解析器对所有的形容词和名词做标记15,因此你可能会得到类似下面的句子:
这个拖把(名词)非常好用(形容词)!
2.情感分类器(sentiment classifier):一种学习算法,它可以输入带注释的文本,并预测整体的情感。解析器的注释将对这个算法起到极大的帮助:通过给形容词一个较高的权重,你的算法将能很快地找到像 “非常” 这样的重要词汇,并忽视像 “这个” 这样的非关键词。
我们可以将 “流水线” 的两个组件可视化为下面的图片:
最近的趋势更倾向于用一种单一的学习算法取代此类流水线。该任务的端到端学习算法只需输入一个原始的文本 “这个拖把非常好用!” ,接着尝试直接识别其中的情感:
神经网络通常用于端到端学习系统,“端到端”这个术语指的是要求学习术语指的是我们要求学习算法直接从输入得到期望的输出,即学习算法将系统的“输入端”连接到“输出端”。
在数据量十分丰富的问题上,端到端系统往往会很奏效,但他并不总是一个很好的选择。
2.端到端学习的更多例子
假设你正在构建一个语音识别系统,你的系统可能需要三个组件:
它的工作形式如下:
1.计算特征(compute features):提取人工设计的特征,如 MFCC (Mel-frequency cepstrum coefficients,频谱系数)特征,以此来试图捕捉对话的内容,而忽略不太相关的属性,比如说话者的音高。
2.音素识别器(phoneme recognizer):一些语言学家人为,有一些基本的声音单元叫做 “音素” 。 例如, “keep” 中的 “k” 和 “cake” 中的 “c” 是相同的音素,而这个系统试图识别音频片段中的音素。
3.最终识别器(final recognizer):以已识别音素的序列为序,并试着将它们串在一起,形成转录输出。
与此相反,端到端系统可能会输入一个音频片段,并尝试直接输出文字记录:
到目前为止,我们只描述了纯线性的机器学习 “流水线”:输出顺序地从一个阶段传递到下一个阶段。实际上流水线可能会更复杂。例如,这是一个自动驾驶汽车的简单流水线架构:
它拥有三个组件:一个使用相机图片检测车辆,一个检测行人,最后一个组件则为我们自己的车规划路径,从而避让车辆和行人。
如果是端到端的话,那就是直接从传感器获得数据,然后控制方向盘。
3.端到端学习的优点
考虑先前提到的语音识别系统的流水线:
该流水线中的许多部分都是人工设计的:
频谱系数即是一套经过人工设计的特征。尽管它们提供了对音频输入的一种合理归纳,但也通过抛出一些信息简化了输入信号。
音素是语言学家的发明,作为说话声音的一种不完备的表示。在某种意义上,音素是对现实语音很差的近似,因此迫使算法使用音素进行表示将限制语音系统的性能。
这些人工设计的成分限制了语音系统的潜在性能,然而这样做也有一些优点:
频谱系数的特征对于处理一些不影响内容的音频属性是很有效的,比如说话者的音高。因此它们有助于讲话学习算法面临的问题。
在一定程度上,音素是一种合理的语音表示方法,它们也可以帮助学习算法理解基本的声音成分,从而提高其性能。
4.流水线组件的选择:任务简单性
让我们回顾一下自动驾驶流水线。通过使用该流水线架构,你可以告诉算法总共有三个关键的步骤:(1)检测其他车辆,(2)检测行人,(3)为你的车规划一条道路。此外,每一个步骤都是相对简单的功能——因此可以用更少的数据来学习——而不是纯粹的端到端方法。
总而言之,当决定流水线组件的内容组成时,试着构建这样的流水线,其中每个组件都是一个相对 “简单” 的功能,因此只需要从少量的数据中学习。
6.直接学习更为丰富的输出
举个例子: