当前位置: 首页 > 科技观察

详细讲解第一个白盒框架DeepXplore

时间:2023-03-19 11:48:30 科技观察

系统测试现实深度学习系统现在很多现有的深度学习系统都是基于张量代数设计的,但是张量代数不仅仅用于深度学习。本文对张量进行了详细的解读,可以帮助大家进一步了解张量。张量和像TensorFlow这样的新机器学习工具是当今非常热门的话题,尤其是那些希望应用和学习机器学习的人。然而,当你回顾历史时,你会发现一些基本但强大、有用和可行的方法,它们也利用了张量的力量,而不是在深度学习的背景下。下面将给出详细解释。如果计算有传统,那么使用线性代数的数值计算是最重要的传统之一。像LINPACK和LAPACK这样的软件包很古老,但它们在今天仍然非常强大。线性代数的核心是非常简单和常规的运算,涉及对一维或二维数组(这里我们称它们为向量或矩阵)的重复乘法和加法运算。同时,线性代数的范围极其广泛。许多不同的问题,从计算机游戏中的图像渲染到核武器设计,都可以用它来解决或近似。关键的线性代数运算:计算机上最基本的线性代数运算是两个向量的点积。这个点积只是两个向量中相关元素的乘积之和。矩阵和向量的乘积可以看作是矩阵和向量的行的点积,两个矩阵的乘积可以看作是一个矩阵与另一个矩阵的每一列的矩阵向量乘积。的和。此外,再加上所有元素与一个值的逐一加法和乘法,就可以构造出所需的线性代数运算机。计算机能够如此快速地评估用线性代数编写的程序的部分原因是因为线性代数的规律性。此外,另一个原因是它们可以并行处理。在潜在性能方面,从早期的Cray-1(译者注:Cary-1是世界上第一台超级计算机,建于1975年,计算速度每秒1亿次)到今天的GPU计算机,我们可以看到性能的提升超过30,000次。此外,当您考虑使用大量GPU对数据进行集群时,其潜在性能比当时最快的计算机高出大约一百万倍,而成本却只有一小部分。然而,历史的规律一直是,要充分利用新的处理器,我们需要将操作越来越抽象。Cray-1及其矢量化后续产品需要其运行的程序能够使用矢量运算(例如点积)来充分利用硬件的性能。后来的机器需要根据矩阵-向量运算或矩阵-矩阵运算对算法进行形式化,以最大化硬件的价值。我们现在正站在这样一个关头。区别在于我们除了矩阵-矩阵运算之外没有任何东西,即:我们处于线性代数使用的极限。然而,我们不需要将自己局限于线性代数。事实证明,我们可以在数学树的树枝上再往上爬一点。人们早就知道,在数学抽象的海洋中有比矩阵更大的鱼,其中一个候选者就是张量。张量是广义相对论的重要数学基础,对于物理学的其他分支也具有基础地位。那么就像数学中的矩阵和向量的概念可以简化为我们在计算机中使用的数组一样,我们是否也可以将张量简化表示为多维数组以及一些相关的操作呢?不幸的是,事情并没有那么简单,这主要是因为没有可以在张量上执行的一组明显且简单(如矩阵和向量)的操作。不过,也有好消息。虽然我们不能只对张量使用少数操作。但是我们可以在张量上写出一套操作模式。但这还不够,因为根据这些模式编写的程序无法像编写时那样高效地执行。但我们还有另一个好消息:低效但易于编写的程序可以(基本上)自动转换为执行非常高效的程序。更好的是,无需构建新的编程语言即可实现这种转换。只需要一个简单的技巧。当我们在TensorFlow中编写如下代码时:v1=tf.constant(3.0)v2=tf.constant(4.0)v3=tf.add(node1,node2)实际情况是,系统会创建如图所示的数据结构在图1中:图1图1:上面的代码被翻译成一个可以重构的数据结构,它会被转换成机器可执行的形式。将代码转换为用户可见的数据结构允许我们编写的程序被重写以更有效地执行,或者它可以计算导数以便可以使用高级优化器。这个数据结构实际上不会在我们上面展示的程序中实现。因此,TensorFlow有机会在我们真正运行它之前,将数据结构重写成更高效的代码。这可能涉及我们希望计算机处理的小型或大型结构。它还可以生成实际上可在我们使用的计算机CPU、我们使用的集群或我们手头的任何GPU设备上执行的代码。它的伟大之处在于我们可以编写非常简单的程序来获得令人惊讶的结果。然而,这仅仅是开始。做一些有用但不同的事情。TensorFlow和类似的系统采用简单描述机器学习架构(例如深度神经网络)的程序,然后调整该架构的参数以最小化一些错误值。他们通过创建一个代表我们程序的数据结构和一个代表我们模型所有参数的误差值梯度的数据结构来做到这一点。这个梯度函数的存在使得优化更容易。但是,虽然您可以在TensorFlow或Caffe或任何其他基本上以相同方式工作的框架中编写程序,但您编写的程序不一定优化机器学习功能。如果您编写的程序使用您选择的包提供的张量注释,它可以优化所有类型的程序。自动微分和最先进的优化器以及高效GPU代码的编译仍然对您有利。作为一个简单的例子,图2显示了一个简单的家庭能源消耗模型。图2图2:此图显示房屋(圆圈)的每日能源消耗,水平轴表示温度(华氏度)。能耗的分段线性模型叠加在具体的能耗数据上。模型的参数在逻辑上会形成一个矩阵,但是当我们处理数百万个模型时,我们可以使用张量。该图显示并模拟了房屋的能源使用情况。得到一个模型并不难,但是为了找到这个模型,我需要自己编写代码来分别对数百万个房屋的能源消耗进行建模。如果我们使用TensorFlow,我们可以一次对所有这些房屋进行建模,并且我们可以使用比之前获得该模型更高效的优化器。这样一来,作者就可以一次性优化出百万个房间的模型,比我们原来的程序效率高很多。理论上我们可以手动优化代码,可以有人工导出的导数函数。但是,完成这项工作所需的时间,更重要的是调试所花费的时间,将使作者无法在有限的时间内构建此模型。这个例子向我们展示了基于张量的计算系统,如TensorFlow(或Caffe或Theano或MXNet等)可以用于与深度学习截然不同的优化问题。因此,最适合您的机器学习软件可能比机器学习做得更多。本文由MapRTechnologies的高级应用程序架构师TedDunning撰写。原文:http://www.kdnuggets.com/2017/06/deep-learning-demystifying-tensors.html【本文为机器之心专栏原文翻译,微信公众号“机器之心”theMachine(id:almosthuman2014)》]点此阅读更多本作者好文