计算机视觉是人工智能中最具影响力的领域之一,与生成人工智能一样,它几乎改变了我们生活的方方面面。从医学图像分析和自动驾驶汽车到安全系统,人工智能驱动的计算机视觉对于通过对象检测、面部识别和图像分类等技术提高安全性、效率和医疗保健至关重要。
但 计算机视觉不仅仅在专业领域掀起波澜;它也是我们日常使用的消费者应用程序的一部分。增强相机对焦、编辑照片、实时文本识别和使用智能手机相机扫描,使安全摄像头等智能家居设备能够检测和提醒用户运动情况、健身跟踪应用程序的姿势估计、饮食跟踪应用程序的卡路里和食物识别,用于解锁手机的人脸识别,以及用于在相册中按人物组织照片的人脸检测和分类。这些应用程序已成为数百万人日常体验中不可或缺的一部分。
资料来源:真实计算机视觉,作者:Boris Denisenko 中等的
大多数机器学习工程师不会从头开始构建模型来将这些功能变为现实。相反,他们依赖现有的开源模型。虽然这是最可行的方法,但由于从头开始构建模型的成本过高,因此在将模型用于应用程序之前仍有大量工作要做。
首先,开源模型可以解决类似的场景,但不是工程师需要的确切场景。例如,机器学习工程师可能需要一个比较不同饮料的应用程序,但可用的模型旨在比较食品。尽管它与食物搭配效果良好,但应用于饮料时可能会遇到困难。
其次,这些模型需要运行的现实条件通常与它们最初设计的环境有很大不同。例如,一个模型可能有数亿个参数,使其太大且计算量太大,无法在智能手机上运行。尝试在计算资源有限的设备上运行此类模型会导致性能下降、电池消耗过多或无法运行。
适应现实世界的场景和条件
这迟早会导致大多数工程师在消费者应用程序中将机器学习应用于计算机视觉时面临以下必要性:
- 调整现有的开源模型以适应其特定场景。
- 优化模型以在有限容量内运行。
调整模型并不是轻而易举就能完成的事情。您从预先训练的模型开始,然后根据您的特定任务对其进行定制。这涉及调整多个参数——层数、每层神经元数量、学习率、批量大小等等。可能的组合数量之多可能令人眼花缭乱,可能需要测试数百万种不同的配置。这就是超参数优化(HPO)发挥作用的地方。 HPO 有助于简化此过程,使您能够比单独手动调整参数更快地找到最佳配置。
一旦您使模型适应您的场景,下一个挑战就是让它在资源有限的设备上运行。例如,您可能需要在只有 6 GB RAM 的智能手机上部署模型。在这种情况下,模型压缩对于减小模型大小并使其易于内存和处理能力有限的设备管理变得至关重要。
超参数优化 (HPO) 技术
超参数优化涉及为神经网络找到最佳参数集,以最大限度地减少特定任务的错误。假设您正在训练一个模型来根据照片估计一个人的年龄。这里的误差是指模型的年龄估计与人的实际年龄的偏差——比方说,以偏离的年数来衡量。
网格搜索
网格搜索是一种强力方法,通过测试每个可能的参数集来找到最佳组合。您从现有模型开始,并使其适应您的任务。然后,您系统地修改参数(例如神经元或层的数量),以了解这些变化如何影响模型的误差。网格搜索涉及测试这些参数的每种组合,以找到产生最低误差的组合。挑战在于您可以调整许多参数,每个参数都有广泛的潜在值。
虽然这种方法可以保证找到最佳选择,但它非常耗时且通常不切实际。
随机搜索
另一种方法是随机搜索,即随机抽取一部分可能的组合,而不是测试每个组合。该方法涉及在指定范围内为每个参数选择随机值并测试这些组合。虽然它比网格搜索更快,但它并不能保证最好的结果。然而,它很可能会找到一个好的(即使不是最佳的)解决方案。这是速度和精度之间的权衡。
例如,如果有 1,000 个可能的参数组合,您可以随机采样并测试 100 个,与测试所有组合相比,这只需要十分之一的时间。
HPO 使用优化算法
基于优化的超参数调整方法使用不同的数学方法来有效地找到最佳参数设置。例如,贝叶斯优化使用概率模型来指导搜索,而 TetraOpt(作者和团队开发的一种算法)则采用张量训练优化来更好地导航高维空间。这些方法比网格或随机搜索更有效,因为它们的目标是最大限度地减少寻找最佳超参数所需的评估次数,专注于最有希望的组合,而不是测试每种可能性。
此类优化算法有助于更快地找到更好的解决方案,当模型评估的计算成本很高时,这一点尤其有价值。他们的目标是用最少的试验获得最好的结果。
ML模型压缩技术
一旦模型在理论上可行,下一个挑战就是在现实条件下运行它。以用于面部识别的 ResNet、用于流量管理和体育分析的 YOLO 或用于风格转换和内容审核的 VGG 为例。虽然功能强大,但这些模型对于资源有限的设备(例如智能手机或智能相机)来说通常太大。
机器学习工程师求助于一组经过验证的压缩技术,使模型在此类环境中更加高效。这些方法——量化、剪枝、矩阵分解和知识蒸馏——对于减少人工智能模型的大小和计算需求,同时保持其性能至关重要。
量化
资料来源:掌握量化的艺术,Jan Marcel Kezmann 于 中等的
量化是压缩神经网络最流行的方法之一,主要是因为与其他技术相比,它需要最少的额外计算。
核心思想很简单:神经网络由许多充满数字的矩阵组成。这些数字可以以不同的格式存储在计算机上,例如浮点数(例如,32.15)或整数(例如,4)。不同的格式占用不同的内存量。例如,float32 格式的数字(例如 3.14)占用 32 位内存,而 int8 格式的数字(例如 42)仅占用 8 位。
如果模型的数字最初以 float32 格式存储,则可以将其转换为 int8 格式。此更改显着减少了模型的内存占用量。例如,最初占用 100MB 的模型在量化后可以压缩到仅 25MB。
修剪
如前所述,神经网络由一组充满数字的矩阵组成,称为“权重”。剪枝是从这些矩阵中删除“不重要”权重的过程。通过消除这些不必要的权重,模型的行为在很大程度上不受影响,但内存和计算要求显着降低。
例如,假设神经网络的矩阵之一如下所示:
修剪后,它可能看起来像这样:
破折号(“-”)表示在修剪期间删除元素的位置。这种简化的模型需要更少的计算资源来运行。
矩阵分解
矩阵分解是另一种有效的压缩方法,涉及将神经网络中的大矩阵分解(或“分解”)为几个更小、更简单的矩阵。
例如,假设神经网络中的矩阵之一如下所示:
矩阵分解允许我们用两个较小的矩阵替换这个单个大矩阵。
当相乘时,这些较小的矩阵给出与原始矩阵相同的结果,确保模型的行为保持一致。
这意味着我们可以用第二张图片中的矩阵替换第一张图片中的矩阵。
原始矩阵包含 9 个参数,但分解后,矩阵总共只包含 6 个参数,结果减少了约 33%。这种方法的主要优点之一是它有可能极大地压缩人工智能模型——在某些情况下可以压缩多次。
值得注意的是,矩阵分解并不总是完全准确。有时,在此过程中会引入一个小的近似误差,但效率的提高往往会超过这个小缺点。
知识蒸馏
知识蒸馏是一种通过从更大、更复杂的模型(称为“教师模型”)转移知识来构建较小模型(称为“学生模型”)的技术。关键思想是将较小的模型与较大的模型一起训练,以便学生模型学会模仿教师模型的行为。
它的工作原理如下:您通过大型神经网络(教师)和压缩神经网络(学生)传递相同的数据。两个模型都会产生输出,并且学生模型经过训练以生成与教师的输出尽可能相似的输出。通过这种方式,压缩模型可以学习与较大模型类似的性能,但参数较少。
蒸馏可以很容易地与量化、剪枝和矩阵分解结合起来,其中教师模型是原始版本,学生模型是压缩版本。这些组合有助于提高压缩模型的准确性。
在实践中,工程师在实际场景中部署模型时,通常会结合这些技术来最大限度地提高模型的性能。
人工智能沿着两条平行的路径发展。一方面,它推动了医疗保健等领域的令人瞩目的进步,突破了我们认为可能的极限。另一方面,让人工智能适应现实世界的条件也同样重要,将先进技术无缝地、不引人注意地带入数百万人的日常生活。这种二元性反映了智能手机革命的影响,这场革命将计算从具有颠覆性且成本高昂的东西转变为人人都可以使用和实用的技术。
本文介绍的优化技术是工程师用来使人工智能成为日常生活的有形一部分的技术。这项研究正在进行中,大型科技公司(如 Meta、特斯拉或华为)和研究实验室投入大量资源来寻找优化模型的新方法。然而,实施良好的 HPO 技术和压缩方法已经在帮助世界各地的工程师将最新模型带入日常场景和设备中,为当今数百万人创造令人印象深刻的产品,并通过其发布的开源研究成果推动行业向前发展。