47.端到端学习的兴起
假设你在做一个检测线上商品评价的系统,它能自动告诉你评论的作者是否喜欢这个商品,这个问题被称作情感分类。为了建立这个系统,你需要建立一个包含两部分的“管道”:
1.Parser:标注文本信息显示最重要的单词。例如,你可能用parser来标注所有的形容词和名词
2.情感分类:一个将标注文本作为学习算法的输入,并预测整个情感,这个解析器的标注信息将对算法帮助巨大,通过给形容词更高的权重,你的算法将很快磨炼出重要词汇,而忽略不重要的词汇。
这是最近的趋势来代替用单一算法的管道系统,这个端到端的算法,只是简单的直接将原始的文本作为输入,并尝试直接判断情感。神经网络广泛使用于端到端的学习系统。当问题中的数据十分充足,端到端的系统是十分成功的。但他们并不总是好的选择。接下来的几章将举出更多当例子,表明什么时候你应该使用端到端的系统而什么时候不应该用他们。
48.更多端到端学习的例子
假设你想要构建一个语音识别系统,你应该构建一个系统包含三个部分:
1.计算特征:手动提取特征,例如MFCC特征
2.音素识别:一些语言学家认为语音有基本的单位叫做音素。
3.最终的判别器:将音素作为输入,将他们连成输出
而端到端的系统可能直接输入语音片段,并且直接输出结果。
目前,我们仅仅描述了机器学习的线性管道:输出一步一步地传递到下一步。管道可以更复杂,例如,这里是自动驾驶的简单结构:
这里有三个部分:一个用照相得到的图片检测其他汽车,或者检测行人;最后一个部分为我们自己的汽车规划出避开行人和汽车的道路。
不是管道中每一部分都需要学习,比如关于“机器人运动规划”的文献有许多算法用于汽车的最终路径规划。 许多算法不涉及学习。相比之下,端到端方法可能会尝试直接接收传感器的输入而输出转向方向。
即使端到端的系统已经有很多成功的例子,它不总是最好的方法,例如,端到端的语音识别工作的很好,但我对端到端的自动驾驶方法表示怀疑,接下来的几张将解释为什么.
49.端到端的优缺点
之前举例的语音系统很多部分都是手动工程的:
MFCC是一些手动设计的特征,虽然他们提供了有意义的语音输入,但是他们也简化了输入信号,丢失了一些信息。
音素是语言学家的发明,是不完美的语音的代表。音素是现实的近似,强行让算法使用音素会限制系统的表现。
这些手工设计的内容限制了语音系统的潜在的表现。然而,用手工特征也有一些优势:
MFCC特征对音频的某些不影响内容的特征是鲁棒的,如音调。因此,他们也为算法简化了问题。
音素是语音有道理的代表,他们也能帮助学习算法理解基本的声音内容,因此提高表现。
有更多的手工特征逐渐让一个语音系统只用更少的数据去学习。MFCC提取的手工特征信息和音素表现的信息提供给我们算法需要从数据中获取的信息。如果我们的数据不多,那么这个知识就很有用。
那么现在考虑端到端的系统:
这个系统缺乏手工特征,因此当训练集很小,那么他很可能必手工构建的系统表现的差。
然而,当训练集很大,MFCC和音素代表的内容限制不了端到端的系统,如果算法是足够大的神经网络,并且他有足够多的训练数据,他就有足够的潜力做的很好,并且可能甚至达到最优错误率。
端到端的学习系统倾向于这里有大量标注数据。如果你解决的机器学习问题训练集很小,那么你的算法就只能从你的人的卓识中获取知识。
如果你决定不使用端到端的系统,你必须决定你的管道系统的下一步是什么,他们怎么组合在一起,在下一章,我们将给出一些怎么设计管道的建议。
50.选择管道的组件:数据可用性
当构建一个非端到端的系统,什么样的组件是好的候选组件呢?如何设计管道将极大的影响到整个系统的表现。一个重要的因素就是是否你能轻易的收集到每一部分需要的训练数据。
例如,考虑一个自动驾驶系统,你需要检测行人和汽车,这里有大量的标注的行人和汽车的数据集,你能用众包的方式获取更大的数据集,因此很容易构建汽车和行人探测器。
而相对的,考虑一个端到端的系统,为了训练这个系统,我们需要大量的行车数据,你需要很多特殊的汽车,和大量的行驶来覆盖所有可能遇到的情况,这让端到端的系统十分难以训练,获取行人和汽车的数据要容易的多。
更平常的,如果这有大量数据能立马训练出管道的的一个模块,你就应该考虑用多级的管道。
在更多端到端的数据出现之前,我相信非端到端的方法能更可能实现自动驾驶:它的结构和数据获取更加匹配。
51.选择管道的组成部分:简化问题
除了数据的可获取性,你也应该考虑第二个因素当挑选管道的组成部分:这部分解决的问题的难易程。你应该尝试选择能简单地单独构建的管道部件。但什么是能够简单构建呢?
想一想这些机器学习任务,将其按困难增长列表:
1.分辨一张图片是否被过曝光
2.分辨一张图片是在户外还是室内
3.分辨一张图片是否包含一只猫
4.分辨一张图片是否包含一只黑白相间的猫
5.分辨一张图片是否包含一只暹罗猫
每一个都是一个二分类任务:你应该输入一张图片,然后输出0或1。对神经网络来说越上面的任务越“简单”,越简单的任务需要的样本越少。
机器学习目前还没有一个正式的定义什么决定了任务的难易(信息理论有“Kolmogorov 复杂性”的概念,它表示学习函数的复杂性是产生该功能的最短计算机程序的长度。 然而,这个理论概念在AI中很少有实际应用。),随着深度学习的崛起,我们有时说一个任务更简单是它执行时需要更少的计算步骤(对应于更浅的网络),但这是一个非正式的定义。
如果你能将一个复杂任务分解为几个简单任务,通过清晰地编写子任务,你能给算法能帮它更快学习的先验知识。
假设你正构建一个暹罗猫探测器,相比于构建一个端到端的结构,你可以选择性的用一个两部的管道结构,第一步找到所有的猫,第二部判断猫的品种,最终输出它是否是暹罗猫。相比于纯端到端的探测器,管道式结构看上去更容易学习,需要更少的数据。(如果你熟悉目标检测算法,它们需要训练集用框框出数据)。
最后一个例子,我们再回到自动驾驶的管道上来,通过用这个管道,这个算法有三个关键步骤,(1)检测车,检测行人,规划路径,更进一步,它们都是更简单的功能,可以用更少的数据学习。
总之,当决定是否管道系统的部件应该是什么,尝试构建一个每一部分都更简单的功能,这样就能从更少的数据中学习。
52.直接学习丰富的输出
一个图像分类器接受一个图像作为输入,输出一个数表示物体的类别。那么一个算法能输出一整个句子来描述图像吗?传统的监督学习的方程,输出通常是一个数。端到端学习最让人兴奋的一个发展就是它能让我们直接学习到更复杂的Y值。在上面的例子中,你能用一个神经网络输入一张图片,然后直接输出一个标题。
这里有更多的例子
Problem | X | Y | Example Citation |
---|---|---|---|
Image captioning | Image | Text | Mao et al., 2014 |
Machine translation | English text | French text | Suskever et al., 2014 |
Question answering | (Text,Question) pair | Answer text | Bordes et al., 2015 |
Speech recognition | Audio | Transcription | Hannun et al., 2015 |
TTS | Text features | Audio | van der Oord et al., 2016 |
现在在深度学习方面有一个加速的趋势是:当你有正确的已标注(输入, 输出)对时,即使输出是比单个数字更丰富的句子、图片、音频或其他输出,你有时也可以学习端到端。