这些算法背后的数学和科学是在几十年前开发的,但直到最近几年,神经网络驱动的人工智能才起飞。那么,究竟发生了什么使神经网络能够成功,而过去却没有达到目标呢?
通常情况下,有一个关键事件催化了任何技术从“利基”到“转型”的相变。图形处理单元(GPU)从图形设备到通用计算机的重新构想是当前AI革命的核心。GPU 能够加速一组特定的数学运算:矢量和矩阵变换。它们使我们能够在实际时间内处理信息,但仅靠GPU不会将我们带到这里。人工智能革命的发生是因为除了提供马力的GPU之外,还有一个基础设施 - 互联网和开源开发人员社区 - 它促进了数千名研究人员和开发人员的协作,并创建了工具和库的集合,这些工具和库在当今的AI开发中无处不在。
如果没有研究人员和开发人员大军,那么加速神经网络的 GPU 驱动的突破仍将是利基市场,他们创建了抽象出直接编程 GPU 的细微差别和困难的库。这对于解决在各种用例中面临的挑战非常有效。但是,这些库不遵循安全关键开发指南,而安全关键型开发指南正日益成为许多应用程序的基本要求。
当我们看到自动驾驶,以及依赖于安全性、确定性和可靠性的嵌入式行业时,我们发现自己又回到了相变的起点。我们有GPU,通过Khronos Group的Vulkan® SC,我们有一个API支持安全关键图形和用于编程GPU的计算。现在,我们需要一个位于 Vulkan SC 安全层之上的图书馆补充集合,这些库遵循安全关键准则和标准,将我们从利基带到主流。
CoreAVI通过引入ComputeCore启动了这场革命。ComputeCore是CoreAVI对线性代数(BLAS)API的实现。线性代数,尤其是向量,是为所有人工智能算法提供动力的燃料。立即选择您最喜欢的 AI 引擎。该引擎运行速度很快,因为它有一个加速所有矢量操作的 BLAS 库。ComputeCore 正是这样做的,但它的实施是为了满足航空电子、汽车和工业市场的功能安全认证标准(DO-178C、A 级、ISO 26262 ASIL D 和 IEC61508 SIL 3)。矢量和矩阵是人工智能和数据处理的核心。这经常被提及,但几乎从未解释过。一起来看看吧。
什么是数据处理?
当我们想到数据处理时,即广义上的数据处理,即获取某些信息并以某种方式对其进行转换,有一种数据结构是任何和所有处理的核心,那就是向量。矢量到底有什么特别之处?
当我们谈到数据处理时,我们指的是获取信息并对其进行修改的能力。在某些情况下,我们希望转换信息,以便我们可以从中提取知识。机器学习就是这种情况。我们可以拍摄图像并以一种可以告诉我们场景中存在哪些对象的方式对其进行转换。我们这样做是为了计算机视觉,使自动驾驶汽车成为可能。我们还可以通过模糊、锐化或提取有关场景中结构的边缘信息来转换图像。这些操作是强大的视觉管道中的常见步骤。
数据也可能是非视觉的。考虑一个天气预报系统,我们希望该系统预测一年中给定日期的最高和最低温度。在这种情况下,系统的输入可能是描述过去十年中一天、给定位置的温度范围的历史数据样本集合。在任何情况下,数据样本都是信息单元。分析图像时,数据样本是单个图像。当分析患者的临床病史以试图预测该患者的心脏病风险时,数据样本是单个患者。数据样本由以某种方式描述样本的特征列表组成。对于图像,特征是构成图像的像素。对于医疗患者,特征是描述该患者的属性:年龄、性别、吸烟习惯、家族心脏病史以及与其临床病史相关的其他信息。当我们将每个数据样本视为特征的集合时,此视图与向量的概念非常吻合。
将数据样本转换为向量
我们如何将图像和患者转换为载体?对于图像,我们将每个像素的颜色解释为数值,并构建像素值列表。例如,宽 2 像素、高 2 像素的图像将生成具有 4 个值的矢量,可能如下所示:[10,0,245,50],其中每个值表示该像素的颜色强度。更高分辨率的图像会产生更高维度的矢量,例如,256x256 像素的图像会产生 65,536 个值的矢量。
患者信息也可以通过使用数字对每个特征的含义进行编码来矢量化,例如 1 = 男性,0 = 女性,1 = 家族心脏病史,0 = 没有心脏病等。将数据样本转换为向量在两个非常重要方面很有用:它有助于以易于与每个单独样本相关联的方式封装特征列表,其次,以几何方式解释向量揭示有关数据集中样本如何相互关联的信息。例如,假设我们要创建一个算法,可以学习区分汽车和行人的图像。我们首先将图像解释为矢量。从几何上讲,矢量可以被认为是空间中的箭头,从坐标系的原点开始,穿过空间到达由每个维度中的矢量值定义的点,参见图 1。
图1.此图说明了笛卡尔坐标系中的 3D 矢量 V1。向量是从原点开始,到由其 3 个分量定义的点结束的线:x、y、z。
虽然我们无法直观地表示维度高于 3D 的向量,但在数学上我们仍然可以使用相同的方程来操作它们。向量之所以如此特别,是因为当我们从几何角度解释它们时,指向相似方向的向量具有相似的性质。例如,当我们将汽车和行人的图像解释为某个多维空间(称为超空间)中的向量时,尽管我们无法可视化该向量指向的方向,但我们可以计算它,并且可以比较属于汽车图像的向量和属于行人图像的向量。事实证明,汽车图像的矢量指向大致相同的方向,行人图像的矢量指向与其他行人图像相似的方向,但远离汽车矢量。
要创建一种可以学习自动区分汽车和行人的算法,意味着以数学方式操纵这些向量,以了解它们指向的方向,并找到将汽车和行人向量所在的空间一分为二的线或超平面。一旦我们发现超平面,算法就可以简单地通过知道它的向量落在线的哪一侧,具有所有汽车矢量的一侧或具有所有行人矢量的一侧来对全新的图像进行分类。
这就是为什么人工智能算法最终都会执行大量的矢量操作。这是因为输入数据通常表示为向量,因为这样做在几何上是有利的。AI中经常使用的另一个数据结构是矩阵。其原因不应令人意外。向量是值的集合。矩阵只是将一个向量堆叠在另一个向量之上的集合。在某些情况下,将向量组合为矩阵很有用,这样我们就可以同时处理一组向量,例如一组输入样本。
计算工具 – 内容、原因和方式
在这一点上,我们已经确定了人工智能对向量和矩阵的需求。现在我们需要一种方法来快速执行这些计算。
当我们想到自动化时——例如,在繁忙的高速公路上无人协助驾驶的汽车,或者在仓库或工厂与人类一起工作的机器人——我们会想到实时执行的系统,并产生实时后果。当自动驾驶汽车未能检测到行人并有足够的时间避免碰撞时,人工智能算法本身可能不是故障的来源。事实上,该算法可能已经正确检测到行人,但检测可能只是花费了几毫秒的时间。此示例有助于说明几件事。首先,这些系统需要尽可能快地执行矢量和矩阵数学运算。其次,在安全关键应用中,这些操作需要在确定的时间内进行。也就是说,我们需要能够计算执行算法的最坏情况执行时间,以便我们可以确定对于每个可预见的情况,系统是否有足够的时间对该算法的执行结果做出反应。如果避开障碍物的机会之窗已经过去,那么发现障碍物就没有什么用处。
为了解决这些问题,应用程序和解决方案开发人员需要两件事。首先,他们需要一个可以加速向量和矩阵运算计算的工具。对于非安全关键用例,开源社区提供了大量免费提供的工具和框架。其中包括Tensorflow,Pytorch,Caffe和Scikit-learn等框架。
所有这些框架和库都依赖于上面提到的称为 BLAS 库的关键组件,该组件提供了一组函数来加速矢量和矩阵操作。不幸的是,这些框架没有按照功能安全标准实施。行业需要的是生产一套构建块工具和框架,按照安全关键标准和实践构建。这些框架必须包括保证确定性执行的 GPU 驱动程序实现。它们必须包括加速核心数学运算的工具 - 例如BLAS API的安全关键实现。工具和框架必须为计算机视觉和图像处理的基本预处理和后处理任务提供安全关键(确定性)解决方案,而且还必须为通用机器学习任务提供安全关键(确定性)解决方案,以帮助强大的人工智能管道中的每个决策过程。换句话说,该行业必须提供与非安全关键市场中相同的解决方案,并且具有相同的复杂性水平,同时在严重受限的环境中解决确定性和资源管理的难题。
加速度
到目前为止,我们已经讨论了处理向量和矩阵的必要性,并且以确定性的方式这样做。我们还说过,为了快速执行这些操作,我们需要一个执行加速的工具。我们所说的加速度是什么意思?
通常,当我们想到软件执行时,我们认为CPU是执行编程指令的终端设备。系统中的大多数软件都在 CPU 上运行。事实上,我们可以使用 C 编程语言实现 BLAS 并在 CPU 上执行计算。这种方法的好处是,嵌入式领域的大多数程序员(实时设备、汽车、机器人)都熟悉 C 编程语言,并且有用 C 语言开发安全关键软件的标准实践。
这种方法的缺点是 CPU 擅长快速执行顺序操作,但不擅长并行化工作。不幸的是,为大多数AI算法操作向量和矩阵所涉及的任务被称为“令人尴尬的并行问题”。因此,在可以并行执行这些计算而不是按顺序执行这些计算的机器上执行这些计算符合我们的最佳利益。
结论
过去十年对人工智能来说是伟大的。研究社区和开源工程社区已经开发了大量工具,为当今许多非安全关键产品提供支持。亚马逊的Alexa或谷歌的家庭助理等产品由最先进的自然语言处理(NLP)算法提供支持。
对这些算法的突破性研究得益于工具生态系统,这些工具使工程师和科学家能够相对轻松地开发和训练复杂的神经网络,并加速GPU设备上的操作。这些工具包括神经网络框架,如TensorFlow和PyTorch,统计和数据分析工具,如Python科学库scikit-learn,以及高性能计算框架,如CUDA®和SYCL。™
像OpenCV这样的图像处理库通过为常用算法和技术提供内置功能,使工程师的工作更轻松。事实上,这些可用的框架是如此成功和无处不在,以至于当我们进入安全关键领域时,许多人还没有意识到,在确定性和安全性很重要的情况下,这些工具是不可用的。但是,正如研究界使用超越CUDA或OpenCL™的工具生态系统一样,安全关键行业需要建立一个安全关键工具和框架的生态系统。
BLAS 和 FFT 的安全关键型实施是朝着正确方向迈出的一步,但我们需要我们的合作伙伴以及整个嵌入式和自治社区帮助定义工具和安全关键 API,为未来所有可靠设备提供动力。开源社区已经展示了可以实现的目标,并为我们的产品和想法原型提供了一个很好的平台,但我们知道 Python 库不能确定地执行。自主意味着责任。负责任的系统必须安全可靠。行业越早意识到这一点,我们就能越早离开沙盒,建立一个基于严格的安全标准和指导方针的基础设施,以促进安全自主的大规模部署。
审核编辑:郭婷
-
神经网络
+关注
关注
42文章
4765浏览量
100550 -
gpu
+关注
关注
28文章
4703浏览量
128712 -
人工智能
+关注
关注
1791文章
46881浏览量
237618
发布评论请先 登录
相关推荐
评论