什么是深度学习
为了解释深度学习,有必要了解神经网络。
神经网络是一种模拟人脑的神经元和神经网络的计算模型。
作为具体示例,让我们考虑一个输入图像并识别图像中对象类别的示例。这个例子对应机器学习中的分类任务。
首先,我们以一张“猫的图像”作为输入,教它输入和输出的对应关系,这样神经网络的输出就是“这张图像是一只猫”。这个阶段称为学习。
在完成一定量的学习后,当一张新的猫图像输入到训练好的神经网络中时,就可以输出“This image is a cat”等图像识别结果。推理是使用经过训练的神经网络从未知输入中猜测输出的阶段。
神经网络内部有很多参数。具体来说,上图中连接节点的边被赋予了一个参数,称为“权重”,代表连接的强度。学习是通过逐渐改变这个参数来进行的。分配给某个神经网络的一组特定参数称为模型。
给定模型的一些输入,我们可以根据内部参数得到一些输出,但我们需要一些迹象表明这有多合理。此指标有多种类型,但经常使用称为准确性的一种。假设将 10 张猫的图像输入到预训练模型中,其中 9 张被确定为“猫”。在这一点上,该模型可以说具有 90% 的准确率。
一般来说,你可以通过学习大量的输入输出对来获得更准确的模型。
有了上述机制,现在可以通过让神经网络模型学习各种问题来自动解决问题,创建高精度模型,并对新数据进行推理。
然而,由于单个神经网络只能解决简单的问题,人们尝试通过构建深度神经网络 (DNN) 来解决更复杂的问题,深度神经网络是一种将这些问题多层连接起来的更深层网络。这称为深度学习。
目前,深度学习被用于现实世界中的各种场景,例如图像和语音识别、自然语言处理和异常检测,并且在某些情况下,它的记录精度超过了人类。这些是通过卷积神经网络 (CNN) 和递归神经网络 (RNN) 实现的,它们是在结构上进一步设计普通神经网络或其变体和组合的计算模型。
特别是,CNN 在图像识别领域表现非常出色,除了上述分类之外,还被用于多项任务(下面显示了四个示例)。
在 FPGA 上进行深度学习的好处
我们已经提到,许多服务和技术都使用深度学习,而 GPU 大量用于这些计算。这是因为矩阵乘法作为深度学习中的主要运算,其特点是计算所需数据的局部性和可重用性高,通过GPU计算很容易达到性能。
特别是当只需要推理时,由于不需要将神经元之间的运算结果保存在内存中,因此所需的数据量会减少。基于这一特性,也开始尝试使用FPGA进行深度学习推理。
事实上,微软的“ Project Brainwave ”在云端使用 FPGA 进行推理,并宣布将搜索引擎中 RNN 计算的延迟和吞吐量提高了 10 倍以上。用户可以使用FPGA方便的进行深度学习的应用。
然而,深度学习仍然主要使用 GPU 和 CPU 完成。因此,在这里我们将仔细研究使用 FPGA 进行深度学习推理的好处。
可构建低功耗、节省空间的系统
FPGA 的计算并行度不如 GPU,但在很多计算上可以达到比 CPU 更高的并行度。此外,单位时间的功耗往往低于 GPU,因此在功率受限系统中,FPGA 实现可能比 GPU 更适合 DNN 推理。然而,计算性能和功耗之间存在折衷(Operations / Watt),因此需要根据系统要求进行仔细评估。
FPGA 还具有能够将整个系统安装在单个芯片上的优势。例如,将连接到FPGA的相机输入连接到深度学习计算电路,并根据计算结果改变系统的控制等应用可以在单个芯片上完成。与 GPU 不同,它可以在没有 CPU 的情况下运行,因此可以构建一个比 CPU 使用更少功率和空间的系统。
实现超低延迟、节省空间的推理
FPGA的优势之一是低延迟,这对深度学习推理也很有效。
上述图像识别的深度学习有望应用于自动驾驶等对精度要求较高的系统中。然而,由于它也是一个具有严格延迟约束的系统,因此可能难以通过 CPU 和 GPU 实现,它们容易受到 DRAM 的响应速度和与外围设备的 IO 性能的影响。
使用低位宽数据可以减少延迟
FPGA可以使用任意位宽的数据,因此通过采用4位、2位等CPU和GPU难以获得的位宽,可以降低延迟,节省计算资源。
众所周知,即使使用具有一定低位宽的数据,深度学习推理也不会降低最终精度。目前据说8位左右可以提供稳定的准确率,但最新的研究表明,已经出现了即使降低到4位或2位也能获得很好准确率的模型和学习方法,越来越多的正在FPGA实现。
易于适应新的神经网络结构
深度学习是一个非常活跃的研究领域,每天都在设计新的 DNN。其中许多结合了现有的标准计算,但有些需要全新的计算方法。特别是在具有特殊结构的网络难以在 GPU 上实现高效的情况下,计算成为瓶颈并减慢整个深度学习过程。由于 FPGA 是可重构的,因此它们可能能够灵活地应对这种不规则的计算。
到目前为止,我们重点介绍了 FPGA 深度学习推理的优点,但也存在缺点。
运行频率低于 CPU 和 GPU,除非设计实现,否则性能往往较差。
与 CPU 和 GPU 相比实施成本高,FPGA 上支持深度学习的软件较少
很多DNN参数量大,很难在FPGA上简单实现
需要高数据精度的 DNN,例如单精度浮点数,往往会出现性能下降
需要高级专业知识来创建具有高推理准确性和低数据准确性的模型
有很多情况学习成为处理时间的瓶颈而不是推理,但用FPGA很难解决(几乎连研究水平都没有)
近年来,许多为深度学习计算而优化的 ASIC 被推向市场,GPU 配备了专门用于深度学习的电路。
基于这些,不得不说用FPGA做深度学习的好处并不多。然而,与 DNN 权重降低相关的技术,如参数量化(或精度降低)和网络修剪,正在积极研究中,这些方法与 FPGA 非常兼容。
也有FPGA供应商发布高速深度学习IP,以及配备适合深度学习计算的硬件的SoC型FPGA等利好因素。深度学习与FPGA的实际应用还有很长的路要走,但我认为它在未来有很大的潜力。
总结
在这篇文章中,解释了两点:“什么是深度学习?”和“深度学习在FPGA上的优缺点”。
在后续文章中,我们将为简单的图像分类任务在 FPGA 上创建推理设计。本教程中创建的设计不会是利用上述 FPGA 优势的优秀设计,而是非常简单的设计。我将在后面的文章中展示之后的优化策略,但我希望能看出,如果不考虑复杂的优化,FPGA 上的开发非常简单。
原作者:碎碎思