鲲云科技作者

多核计算芯片领域国际权威Kunle Olukotun教授:解读用摩尔定律扩展机器学习性能

文章授权转载自:鲲云科技。

4月18日,由鲲云科技协办的2018全球人工智能应用创新峰会在深圳落下帷幕,一场聚焦于人工智能落地应用的高端峰会暂告一段落。而峰会所传达的最新科研成果和前沿思想却在持续发酵。


峰会上,鲲云邀请到了来自全球人工智能各个领域的权威大咖进行个人演讲,分享他们的最新观点。本文所分享的《摩尔定律机器学习的性能提升》,便是由其中一位大咖——Kunle Olukotun教授带来的。

Kunle Olukotun是斯坦福大学教授,Afara芯片创始人,UltraSPARC T1 芯片架构师。是多核计算芯片领域国际权威。

Kunle Olukotun教授


在他的演讲中,Kunle Olukotun教授介绍了DAWN(数据分析的下一步)项目。 其中包括一系列用于开发机器学习加速器的算法,方法和工具。这些加速器可由具有特定领域知识但没有硬件或机器学习背景的人员开发。通过忽略多核锁定; 低精度算术;并行编程语言和设计空间探索,该项目帮助提供高性能,高生产力和高效率的机器学习实现。

以下是Kunle Olukotun教授的演讲实录,我们进行了不改变原意的整理:

机器学习的兴起

最近在影像识别、自然语言处理的进步,都是由机器学习所驱动的。这些应用已经在整个社会产生了非常重大的影响,我们觉得未来可能会出现自动驾驶的汽车,另外有一些更个性化的药物,比如根据基因序列产生出来的。它的药物作用是专门为你的基因所创造出来的。还可以进行医疗的诊断和预测。预测的质量有可能比医生预测的质量更高,所以机器学习有非常大的潜力。

开发高质量的机器学习应用,非常具有挑战性。前景非常好,但要开发应用程序却非常具有挑战性。这需要我们有深入的机器学习的知识、定制的工具以及这些要素如何组合以实现高性能的系统。


DAWN 提案

我们研究的项目包括什么?只要有数据以及某一个领域专业的知识,我们可以使任何人建立起自己的产品级机器学习产品。这也意味着这样的人不需要有机器学习方面博士学位,也没有必要成为一个DB系统的专家,更不需要理解最新的硬件。如果不了解最新硬件,不具备这方面的情况下,机器学习可以怎么样做呢?


20世纪80年代的机器学习

机器学习在20世纪80年代,这里显示的是例如影像识别或者自然语言处理任务的准确度以及它跟你对于机器学习的算法所提供的数据规模的关系。

80年代,当我们第一次讨论机器学习时,大家知道怎么样建立起一个多层神经网络。那个时代,一个普通的算法表现反倒更好,机器学习表现没有那么好。因为机器学习需要更多计算、更加复杂的模型。当然,机器学习有了这些之后,就能超过传统的算法。这就是为什么现在对于机器学习有那么多高期望。


软件 1.0 vs 软件 2.0

换句话说,在说到软件2.0,就是实现的一个概念,软件1.0大家都懂,先写代码,写完之后还要理解某一个领域,再把这个领域的专业知识进行应用。这样就可以做一个算法出来,然后可以把这个算法放到一个系统中。但软件2.0就不一样了。2.0你要做一个模型,就是一个神经网络,然后要把一些数据放到一个神经网络的架构中。软件2.0中最重要的一点是训练的数据量和能够训练一个非常复杂的神经网络的能力。这是要看计算能力了。训练数据就是编程2.0的关键。


训练数据的机遇和挑战

我现在想跟大家说一下训练数据。我们经常说训练数据就是新时代的石油。如果你想要做一些全新的基于神经网络的系统,就需要训练数据,也必须要标签。你要知道这是一个猫,那是一只狗,那是一部车。如果这是很简单的贴标签,那网上随便谁都可以做。但如果要看一个非常复杂的图像,比如诊断一个人有没有患癌,就需要一个专家。


呼吸管主要想法

这种训练数据的获得就更加难。传统训练的另外一个问题是,标签是静态的。但其实你要解决的问题不同,可能把这个标签改变了。但这个训练数据不会进行进化。我们做model时就在想怎么样才能更加容易更加高层次的生成训练数据,让我们更加容易的创造更多的训练数据。我们叫做弱监督,不再给很多标签,而是有更多的噪音输入,给它们进行训练。

整个系统看起来像是这样的,用一个标签功能。比如你看到这个化学物品,可能这个人得了那种病,就可以生成一系列标签功能,再把它跟数据合成。这样就可以去噪音,可以知道哪个标签是比较好用的,哪个标签成功率是90%,哪个标签只有50%的正确率。在基于有概率的标签,就能够做一个噪声感知判别模型

我们的目标是希望能够用这个创建应用程序。比如这是一个知识库,我们想做的事情是让这个神经网络的训练变得更加容易,希望让这个训练的数据更加容易。解决方案就是创造另外一个全新的神经网络模型。如果要让我们更加容易的做这个神经网络,让软件2.0做得更加容易,要做更多神经网络的训练,要做更多计算。


机器学习受计算限制

这个机器训练模型是受到计算能力所限制的。百度的工程师说可能需要让计算性能改善100倍。我们怎么做到?比如这个微处理器的改善,这是在过去40年微处理器改善的趋势,我的研究团队参加了这个研究。在这里会看到最顶层的是摩尔定律。每隔18月或者2年处理器性能会翻一番。但这个单线程的性能已经达到一个顶点,主要是因为功耗的问题,因为功耗是有限制的。这就限制了我们进行计算的能力。

当然,这也就影响了随之的表现以及影响了整个行业。这个行业就在一个芯片上多放一些核,就能有效使用能耗,不需要一个芯片把所有的事都做了。我也参与到这个多核的技术研发中。说到能耗和性能时,可以说这个能耗是效率乘性能就等于整个能耗。你就会知道功率是固定的,但你想要做的事情是希望它的性能可以改善,性能改善就可以训练更加复杂的神经网络的模型。


每年机器学习Arxiv论文


但问题是软件的算法也没有在原地踏步。这就给我们看到Arxiv的论文,在过去十几年,关于机器学习的论文的增长,它的增长是比摩尔定律更快。我们看到有多新的想法不断创造出来,但是我们没有办法去执行这些好的想法。

要懂执行这些算法的硬件,我们需要的时间更加长,它比软件算法的改善需要的时间更长。你的Arxiv设计时间大概需要两年。运用在Arxiv的想法在它做完时就已经过时了,因为设计时间那么长。

所以我们必须找一个更加灵活的方法解决这个问题。我们到现在还不知道到底是要让这个通用的机器设计怎么进行设计,而且现在的机器视觉想做的东西可能跟自然语言不一样,跟决策也不一样。比如商业决策或者其他地方的决策,也是不一样的。我们当然想要加快机器学习的速度,希望它们至少能够增加100倍。另外我们也希望让它每瓦特的性能提高,让我们可以在TB甚至PB上的大数据用实时/交互式机器学习。我们也可以开发一个神经架构。


关键问题和方法

现在最重要最核心的问题是怎么样在得到每一瓦类ASIC性能同时又能得到处理器一般的灵活性。这看起来是互相矛盾的,但我觉得有解决方法。我们必须要同时改善算法、编程语言、编译器和硬件架构。

硬件感知机器学习算法可以改善效率,旧的计算模型也是前人开发出来的,他们要决定人来开发算法,计算是确定性的,因为这个人必须要知道到底怎么样去进行调试。但在软件2.0应用的底层模型是基于神经网络的,他们是根据概率的机器模型,是由数据进行训练的。而且技术很有意思,它们不需要是确定的,也不需要永远都是100%正确的,只需要在统计学上正确就可以了。既然它只需要统计学上正确,那我们有很多机会来改善它的性能,可以使用基础性的计算模型来改善。

方法一:硬件感知机器学习算法,可显著提高效率


现在说说用什么样的方法、算法做这个模型。它是改善或者最小化一个损失模型或者所谓的Loss function。我们有很多数据或者训练的例子,可能有数以十亿计的数据,其中有很多不同的机器与学习的方法,能够做分类或者深度学习等等。我们最重要的进行优化的方法是大家可能都熟悉的随机梯度下降。我们看着一个例子,就可以估计渐变。反过来,也可以看到某一个模型点,然后就可以推到一个训练集的数据点。有很多次迭代,最终得到最优化的模型,可以通过非常小的程序迭代来进行改善。

这个迭代的机器学习是有两种效率需要看。


  1. 统计学效率,我们到底需要做多少次迭代才能得到最高质量的训练结果
  2. 硬件效率,每次迭代需要多长时间。我们进行训练的总时间,是越低越好、越少越好,但我们需要进行一个取舍和衡量。



我们是不是要改善一个硬件效率,让统计效率稍微低一点。随机梯度下降法的核心是可能有数十亿个小的步骤。你可以问一个问题,我们能不能够并行做一个事情。这看起来是一个顺序的算法,但可以并行做。怎么样并行做?我在教我的学生时,你在放你的数据时,必须要锁了它,所以做一个已经编码的SGD。但锁了之后发现它做得没有那么好,因为加了更多处理器时会变得更加慢。

另外一件事情是低精度。低精度使用的能量能源会低了,另外存储的内容也会下降。也能够把你所需要的带宽尽量降低。既然你可以同时并行的处理计算更多信息。比如有8字节数据而不是16字节或者32字节的数据,也能增加吞吐量。这是我们经常要做的,比如在TPU、FPGA都在用。它最大的问题是准确性会降低。刚才说要做判断,低准确性是可以的。我们以前觉得训练至少需要16位的准确性。但我们做了一个高准确率低精度,我们能够随着更接近最佳值时把它的渐变变得更加小,我们在逐渐靠近中心。

方法二:编写一个机器学习程序并在所有这些体系结构上高效运行



加速器上可以有更好的效率,我们把机器学习的算法映射到加速器上,可以看到这些机构,它们也有一个编程模式。比如说有集群信息、GPU、FPGA。我们有一个算法,如果想进行有效的训练,需要在硬件的架构上进行实现。我们对于这个算法的描述以及有效的执行之间,是有一条鸿沟的。

因此,我们可不可以编写一个机器学习程序,它能够在这些体系结构上都高效运用。这样就可以填补这个鸿沟了。我们把这个叫做适定于特定情况的语言。现在有AI的应用,把不同领域的语言结合起来,他们专注于这个应用不同的组成部分。比如有一个比较稠密或者稀疏的算法,还有算法中的关系。比如你的重点是不是图像的算法。

总的来说,有各个不同领域的语言,把它结合起来,你怎么样把它组合起来。我们可以使用一个Delite DSL框架,可以在不同领域进行应用。我们有一个Delite DSL框架,把它叫做OptiML。这里有一些绿点,我们希望把它们分成群,有蓝色的X。首先把每一个样本分配到最近的平均值,计算到当前平均值的距离。将每一个群集移动到分配给他们的点的平均值。在这里有一个高层次的描述,可以在多核集群GPU上进行应用,甚至是FPGA。

我们看一下TensorFlow,也是注重于机器学习的,也使用了很多OptiML中使用的想法,它也是高性能适用于不同领域的语言。这里有一个高度抽象化,它比TensorFlow做得更好,而且同样给出描述。我们需要以这个领域为主的语言,就意味着需要不同的架构,所以就是Delite。任何人想开发以特定领域为基础的语言,我们希望这个工作变得更加容易。我们在这当中有一个嵌入在Scala中的DSL和IR。

除此之外,我们在继续改善机器学习,我们看到现在在做什么事情,也要看未来怎么做。怎么使用比较低的精度,稀疏性也是比较有意思的,很多开发者在关注稀疏新的神经网络模型。我们想要这个东西是比较灵活性的,加速性也是可编程的。这是为什么我们在用FPGA,这个架构现在受到越来越多的注意力。

对于分层控制也一样,在控制模板中也定义了哪些程序是要有加速器加速的,所以必须有加速器的范围。另外也需要有方法进行嵌套,怎么样进行合适的嵌套。最终用Spatial语言写了SGD,我们有自定义语言做加速器范围、内存分配,非常明确的内存传输方法和梯度计算。这是非常高层级的,让开发者能很容易的进行定义。

你们可以拿这个,用这个再运行到深度学习,比如TensorFlow,可以用这个模型转化成Spatial语言写的代码。用这个方法做卷积,用了一个流水线缓冲。在做的时候可以自动进行主动学习,他们可以知道怎么样进行选择,来平衡流水线。同时也能够选择PC的大小,以平衡储存器和带宽,也会为很多FPGA的带宽生成代码,也可以看到初步结果显示至少比人工生成的资料库DNAVO效果更加好。

现在的问题是FPGA总的表现怎么样,这张图给大家看到了,在不同的芯片中,全部把它们标准化成28纳米,CPU在左边,能耗效率是1-10。专用的硬件是右边,有效率大概是1000-10000,CPU是最灵活和最能够编译的,专用的硬件是不可以进行编码,但我们会发现专用的硬件比一个GPU的效率高1000倍。GPU比CPU大概好10倍。

但我们看看能不能够在维持FPGA的灵活性的方法,但让编码性更加靠近CPU,能耗更加靠近GPU和FPGA。这就是一个变形模式的可重构架构,这是一个空间表示,可以关注到这个架构,以跟FPGA相似的方式进行理解。这里有PCU和PMU,模式记忆单元和模式计算单元。一个是更看带宽的,带宽能以不同方法配置满足这个程序的需要。另外可以把它们组合到一起来满足你们所需要的空间运用。

我们做了这个之后,如果跟25纳米的这个比较一下,它的性能能够改善95倍,每瓦的能耗能改善77倍。但我们能做很多事,这要看架构到底怎么做,它看起来是怎么样的,怎么样进行一个平衡。性能和能耗的取舍怎么样,还有可编程性的取舍。这是我们最关注的东西和我们现在在做的事。我们非常希望软件定义的硬件架构,能够更加节省能耗,同时也能够更加可编程,比FPGA的表现更加好一些。

总 结  

我总结一下,我们的确觉得能一石二鸟,什么都能有,功率能做得很好,性能做得好,可编程性也非常高,但需要做全栈的方法,要综合整合的方法做,需要算法,比如Hogwild和HALP,在语言和编译器方面也需要进行改善,让它们更好的更有效的进行执行。原有的语言是不够的,需要高层级专门面向加速器的抽象语言,才能更好的理解这个域相关的语言和我们所需要的代表加速器的语言。我们需要一个中间的形式,就好象Spatial。


理论机器学习
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

自动驾驶技术技术

从 20 世纪 80 年代首次成功演示以来(Dickmanns & Mysliwetz (1992); Dickmanns & Graefe (1988); Thorpe et al. (1988)),自动驾驶汽车领域已经取得了巨大进展。尽管有了这些进展,但在任意复杂环境中实现完全自动驾驶导航仍被认为还需要数十年的发展。原因有两个:首先,在复杂的动态环境中运行的自动驾驶系统需要人工智能归纳不可预测的情境,从而进行实时推论。第二,信息性决策需要准确的感知,目前大部分已有的计算机视觉系统有一定的错误率,这是自动驾驶导航所无法接受的。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

感知技术

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

判别模型技术

在机器学习领域,有一种分类方法将模型分为判别模型和生成模型(generative model)两种。 判别模型是一种对未知数据y与已知数据x之间关系进行建模的方法,是一种基于概率理论的方法。已知输入变量x,判别模型通过构建条件概率P(y|x)分布预测结果,或试图直接从输入x的空间学习映射到标签{0,1}(如感知器算法)的函数。生成模型则是考虑x与y之间的联合分布。 在实际应用中判别模型非常常见,如:逻辑回归(logistic regression),支持向量机(support vector machine), 提升方法(Boosting),条件随机场(conditional random fields),神经网络(neural network),随机森林(random forests)典型的生成模型则包括:高斯混合模型(Gaussian Mixture Model),隐马尔科夫模型(hidden markov model),简单贝叶斯(naive Bayes)等。不难看出两者的区别。

重构技术

代码重构(英语:Code refactoring)指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

卷积技术

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

知识库技术

知识库是用于知识管理的一种特殊的数据库,以便于有关领域知识的采集、整理以及提取。知识库中的知识源于领域专家,它是求解问题所需领域知识的集合,包括基本事实、规则和其它有关信息。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

随机梯度下降技术

梯度下降(Gradient Descent)是遵循成本函数的梯度来最小化一个函数的过程。这个过程涉及到对成本形式以及其衍生形式的认知,使得我们可以从已知的给定点朝既定方向移动。比如向下朝最小值移动。 在机器学习中,我们可以利用随机梯度下降的方法来最小化训练模型中的误差,即每次迭代时完成一次评估和更新。 这种优化算法的工作原理是模型每看到一个训练实例,就对其作出预测,并重复迭代该过程到一定的次数。这个流程可以用于找出能导致训练数据最小误差的模型的系数。

噪音技术

噪音是一个随机误差或观测变量的方差。在拟合数据的过程中,我们常见的公式$y=f(x)+\epsilon$中$\epsilon$即为噪音。 数据通常包含噪音,错误,例外或不确定性,或者不完整。 错误和噪音可能会混淆数据挖掘过程,从而导致错误模式的衍生。去除噪音是数据挖掘(data mining)或知识发现(Knowledge Discovery in Database,KDD)的一个重要步骤。

大数据技术技术

大数据,又称为巨量资料,指的是传统数据处理应用软件不足以处理它们的大或复杂的数据集的术语。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

摩尔定律技术

摩尔定律是由英特尔创始人之一戈登·摩尔提出来的。其内容为:积体电路上可容纳的电晶体数目,约每隔两年便会增加一倍;经常被引用的“18个月”,是由英特尔首席执行官大卫·豪斯所说:预计18个月会将芯片的性能提高一倍。

主动学习技术

主动学习是半监督机器学习的一个特例,其中学习算法能够交互式地查询用户(或其他信息源)以在新的数据点处获得期望的输出。 在统计学文献中,有时也称为最佳实验设计。

推荐文章
暂无评论
暂无评论~