机器学习和深度学习中经常涉及到训练(Training)和推断(Inference)这两个词,而这两者有什么区别和联系呢?接下来我们初步分析讨论。
以DL为例,在学校学习——我们可以将其看作是深度神经网络经历「学习」阶段的一种类比。神经网络和大多数人一样——为了完成一项工作,需要接受教育。
更具体地说,经过训练(training)的神经网络可以将其所学到的知识应用于数字世界的任务——识别图像、口语词、血液疾病,或推荐某人以后可能会购买的鞋子等各种各样的应用。神经网络的这种更快更高效的版本可以基于其所训练的内容对其所获得的新数据进行「推导」,用人工智能领域的术语来说是「推理(inference)」。
推理(Inference),就是深度学习把从训练中学习到的能力应用到工作中去。
推理无需训练也能发生。这当然说得通,因为我们人类大多时候就是这样获取和使用知识的。正如我们不需要一直围着老师、满载的书架或红砖校舍转也能阅读莎士比亚的十四行诗一样,推理并不需要其训练方案的所有基础设施就能做得很好。
所以就让我们在人工智能的语境中分解一下从训练到推理的这个过程,看看其机理。
尽管教育(即训练)的目标都是一样的——获得知识(knowledge),但神经网络的训练和我们人类接受教育的过程大相径庭。神经网络对我们人脑的生物学——神经元之间的所有互连——只有一点点模仿。我们的大脑中的神经元可以连接到特定物理距离内其他任何神经元,而人工神经网络却不是这样——它分为很多不同的层(layer)、连接(connection)和数据传播(data propagation)的方向。
训练神经网络的时候,训练数据被输入到网络第一层。然后所有神经元,都会根据任务执行情况,根据其正确或者错误的程度,分配一个权重参数(权值)。
在一个用于图像识别的网络中,第一层可能是用来寻找图像的边。第二层可能是寻找这些边所构成的形状——矩形或圆形。第三层可能是寻找特定的特征——比如闪亮的眼睛或按钮式的鼻子。每一层都会将图像传递给下一层,直到最后一层;最后的输出由该网络所产生的全部这些权重总体决定。
但这就是训练和我们的教育过程的不同之处。假设我们有一个任务是识别图像中的猫:神经网络会在获取了所有的训练数据,并计算了权重之后才能得出结论说是否有「猫」。我们从这个训练算法中只能得到这样的回应:「正确」或「错误」。
如果算法告诉神经网络其论断错误,网络并不需要知道正确的答案是什么。但这个错误会回传到网络各层,让网络再猜一下,给出一个不同的论断这个错误会反向地传播通过该网络的层,该网络也必须做出其他猜测。它在每一次尝试中,都必须考虑其他属性——在我们的例子中是「猫」的属性——并为每一层所检查的属性赋予更高或更低的权重。然后它再次做出猜测,一次又一次……直到其得到正确的权重配置,从而在几乎所有的尝试中都能得到正确的答案。
训练会先教深度学习网络在一个有限的图像集里标出猫的图像,稍后,该网络就会在广阔的世界中检测猫。
现在,我们得到了数据结构和根据训练数据学习到的达到平衡的一整套的权值。这可是精心调配的精美机器。可问题是,这也是需要一只吞噬运算能力的巨兽。曾在 Google 和斯坦福磨砺人工智能、现在百度硅谷实验室的吴恩达教授说,百度训练一个中文语言识别模型不仅需要 4TB 的训练数据,在整个训练循环中,还需要两千亿亿次浮点运算能力(20 exaflops, 20 billion billion)。不知道有没有人想用智能手机试一下。
接下来,就是推断了。
恭喜!您的神经网络训练好了
已经为推理做好准备
正确加权了的神经网络本质上是一个笨重的巨型数据库。你不得不为这个家伙的学习过程所准备的所有东西(在我们的教育类比中是所有的铅笔、书本、老师的教导等)现在已经远远多于完成任何特定任务所需要的东西。毕业的时候我们就能摆脱所有这些东西了?
为了充分利用训练的结果,完成现实社会的任务,我们需要的是一个能够保留学习到的能力,还能迅速应用到前所未见的数据上的,响应迅速的系统。这就是推断,根据真实世界中的少量数据,迅速地提供正确的答案(其实你也把它理解为预测,prediction)。
尽管这是计算机科学的一个全新领域,但我们仍有两种主要的方法可以对迟钝的神经网络进行修改,以使其速度更快并改善应用在跨多个网络运行时所造成的延迟。
推理是如何被使用的?只要打开你的智能手机就好了。推理可被用于将深度学习应用到语音识别和分类照片等各种各样的任务上。
第一个方法着眼于神经网络中训练之后就不再激活的部件。这些部分已不再被需要,可以被「修剪」掉。
第二个方法是寻找方法将神经网络的多个层融合成一个单一的计算步骤。
这类似于数字图像的压缩。设计师可能设计了这些巨大的、美丽的、数百万像素宽和高的图像,但如果要将它们放到网上,就需要将它们转换成 jpeg 格式。对人眼来说,它们看起来基本上完全相同,只是分辨率不一样。推理也是类似的,你可以得到预测的几乎同样的准确度,但简化、压缩和优化可以提升运行时的性能。
这意味着我们可以一直使用推理。你的智能手机的声控助手使用了推理,谷歌的语音识别、图像搜索和垃圾邮件过滤应用也都是用了推理。百度也在语音识别、恶意程序检测和垃圾消息过滤中使用了推理。Facebook 的图像识别和亚马逊与 Netflix 的推荐引擎全都依赖于推理。
具备并行计算(同时进行多个计算)能力的 GPU 既擅长训练,也擅长推理。使用 GPU 训练的系统可以让计算机在某些案例中实现超过人类水平的模式识别和对象检测。
训练完成后,该网络可被部署在需要「推理」(对数据分类以「推理」出一个结果)的领域中。而具备并行计算能力的 GPU 可以基于训练过的网络运行数十亿的计算,从而快速识别出已知的模式或对象。
你可以看到这些模型和应用将会越来越聪明、越来越快和越来越准确。训练将越来越简单,推理也将为我们生活的方方面面带来新的应用。这适用于人工智能的告诫也可以适用于我们的年轻人——不要做傻瓜,呆在学校里。不要着急,未来再推理。
原文地址:
https://blogs.nvidia.com/blog/2016/08/22/difference-deep-learning-training-inference-ai/