0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使神经网络在智能手机上实时运行的技术

电子工程师 来源:阿里云云栖社区 2021-03-29 09:14 次阅读

计算机具有高储量的硬盘和强大的CPUGPU。但是智能手机却没有,为了弥补这个缺陷,我们需要技巧来让智能手机高效地运行深度学习应用程序。

介绍

深度学习是一个令人难以置信的灵活且强大的技术,但运行的神经网络可以在计算方面需要非常大的电力,且对磁盘空间也有要求。这通常不是云空间能够解决的问题,一般都需要大硬盘服务器上运行驱动器和多个GPU模块。

不幸的是,在移动设备上运行神经网络并不容易。事实上,即使智能手机变得越来越强大,它们仍然具有有限的计算能力、电池寿命和可用磁盘空间,尤其是对于我们希望保持尽可能轻的应用程序。这样做可以实现更快的下载速度、更小的更新时间和更长的电池使用时间,这些都是用户所欣赏的。

为了执行图像分类、人像模式摄影、文本预测以及其他几十项任务,智能手机需要使用技巧来快速,准确地运行神经网络,而无需使用太多的磁盘空间。

在这篇文章中,我们将看到一些最强大的技术,使神经网络能够在手机上实时运行。

使神经网络变得更小更快的技术

基本上,我们对三个指标感兴趣:模型的准确性、速度以及它在手机上占用的空间量。由于没有免费午餐这样的好事,所以我们必须做出妥协。

对于大多数技术,我们会密切关注我们的指标并寻找我们称之为饱和点的东西。这是一个指标的收益停止而其他指标损失的时刻。通过在饱和点之前保持优化值,我们可以获得最佳值。

使神经网络在智能手机上实时运行的技术

在这个例子中,我们可以在不增加错误的情况下显着减少昂贵的操作次数。但是,在饱和点附近,错误变得太高而无法接受。

1. 避免完全连接的层

完全连接的层是神经网络最常见的组成部分之一,它们曾经创造奇迹。然而,由于每个神经元都连接到前一层的所有神经元,因此它们需要存储和更新众多参数。这对速度和磁盘空间是不利的。

卷积层是利用输入中的局部一致性(通常是图像)的层。每个神经元不再连接到前一层的所有神经元。这有助于在保持高精度的同时减少连接/重量的数量。

使神经网络在智能手机上实时运行的技术

完全连接层中的连接/权重比卷积层中多得多。

使用很少或没有完全连接的层可以减少模型的大小,同时保持高精度。这可以提高速度和磁盘使用率。

在上面的配置中,具有1024个输入和512个输出的完全连接层,这个完全连接层大约有500k个参数。如果是具有相同特征和32个卷积层特征映射,那么它将只具有50K参数,这是一个10倍的改进!

2. 减少通道数量和内核大小

这一步代表了模型复杂性和速度之间的一个非常直接的折衷。卷积层中有许多通道允许网络提取相关信息,但需付出代价。删除一些这样的功能是节省空间并使模型变得更快的简单方法。

我们可以用卷积运算的接受域来做同样的事情。通过减小内核大小,卷积对本地模式的了解较少,但涉及的参数较少。

使神经网络在智能手机上实时运行的技术

较小的接受区域/内核大小计算起来更便宜,但传达的信息较少。

在这两种情况下,通过查找饱和点来选择地图/内核大小的数量,以便精度不会降低太多。

3. 优化缩减采样(Optimizing the downsampling)

对于固定数量的层和固定数量的池操作,神经网络可以表现得非常不同。这来自于一个事实,即表示该数据以及计算量的依赖于在池操作完成:

当池化操作提早完成时,数据的维度会降低。越小的维度意味着网络处理速度越快,但意味着信息量越少,准确性越差。

当联网操作在网络后期完成时,大部分信息都会保留下来,从而具有很高的准确性。然而,这也意味着计算是在具有许多维度的对象上进行的,并且在计算上更昂贵。

在整个神经网络中均匀分布下采样作为一个经验有效的架构,并在准确性和速度之间提供了一个很好的平衡。

使神经网络在智能手机上实时运行的技术

早期的池化速度很快,晚期的池化是准确的,均匀间隔的池化是有点两者。

4. 修剪重量(Pruning the weights)

在训练完成的神经网络中,一些权重对神经元的激活起着强烈作用,而另一些权重几乎不影响结果。尽管如此,我们仍然对这些弱权重做一些计算。

修剪是完全去除最小量级连接的过程,以便我们可以跳过计算。这可能会降低了准确性,但使网络更轻、更快。我们需要找到饱和点,以便尽可能多地删除连接,而不会过多地损害准确性。

使神经网络在智能手机上实时运行的技术

除去最薄弱的连接以节省计算时间和空间。

5. 量化权重(Quantizing the weights)

为了将网络保存在磁盘上,我们需要记录网络中每个单一权重的值。这意味着为每个参数保存一个浮点数,这代表了磁盘上占用的大量空间。作为参考,在C中,一个浮点占用4个字节,即32个比特。一个参数在数亿的网络(例如GoogLe-Net或VGG-16)可以轻松达到数百兆,这在移动设备上是不可接受的。

为了保持网络足迹尽可能小,一种方法是通过量化它们来降低权重的分辨率。在这个过程中,我们改变了数字的表示形式,使其不再能够取得任何价值,但相当受限于一部分数值。这使我们只能存储一次量化值,然后参考网络的权重。

使神经网络在智能手机上实时运行的技术

量化权重存储键而不是浮动。

我们将再次通过查找饱和点来确定要使用多少个值。更多的值意味着更高的准确性,但也是更大的储存空间。例如,通过使用256个量化值,每个权重可以仅使用1个字节 即 8个比特来引用。与之前(32位)相比,我们已将大小除以4!

6. 编码模型的表示

我们已经处理了关于权重的一些事情,但是我们可以进一步改进网络!这个技巧依赖于权重不均匀分布的事实。一旦量化,我们就没有相同数量的权值来承载每个量化值。这意味着在我们的模型表示中,一些引用会比其他引用更频繁地出现,我们可以利用它!

霍夫曼编码是这个问题的完美解决方案。它通过将最小占用空间的密钥归属到最常用的值以及最小占用空间的值来实现。这有助于减小设备上模型的误差,最好的结果是精度没有损失。

使神经网络在智能手机上实时运行的技术

最频繁的符号仅使用1 位的空间,而最不频繁的使用3 位。这是由后者很少出现在表示中的事实所平衡的。

这个简单的技巧使我们能够进一步缩小神经网络占用的空间,通常约为30%。

注意:量化和编码对于网络中的每一层都是不同的,从而提供更大的灵活性

7. 纠正准确度损失(Correctiong the accuracy loss)

使用我们的技巧,我们的神经网络已经变得非常粗糙了。我们删除了弱连接(修剪),甚至改变了一些权重(量化)。虽然这使得网络超级轻巧,而且速度非常快,但其准确度并非如此。

为了解决这个问题,我们需要在每一步迭代地重新训练网络。这只是意味着在修剪或量化权重后,我们需要再次训练网络,以便它能够适应变化并重复这个过程,直到权重停止变化太多。

结论

虽然智能手机不具备老式桌面计算机的磁盘空间、计算能力或电池寿命,但它们仍然是深度学习应用程序非常好的目标。借助少数技巧,并以几个百分点的精度为代价,现在可以在这些多功能手持设备上运行强大的神经网络。这为数以千计的激动人心的应用打开了大门。

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 智能手机
    +关注

    关注

    66

    文章

    18338

    浏览量

    178854
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10720

    浏览量

    209552
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4603

    浏览量

    128189
  • 计算机
    +关注

    关注

    19

    文章

    7201

    浏览量

    87219
收藏 人收藏

    评论

    相关推荐

    如何在FPGA上实现神经网络

    随着人工智能技术的飞速发展,神经网络作为其核心组成部分,已广泛应用于图像识别、语音识别、自然语言处理等多个领域。然而,传统基于CPU或GPU的神经网络计算方式
    的头像 发表于 07-10 17:01 1153次阅读

    BP神经网络和卷积神经网络的关系

    BP神经网络(Backpropagation Neural Network)和卷积神经网络(Convolutional Neural Network,简称CNN)是两种人工智能和机器
    的头像 发表于 07-10 15:24 627次阅读

    全连接前馈神经网络与前馈神经网络的比较

    随着人工智能技术的飞速发展,神经网络作为其核心组成部分,各个领域展现出了强大的应用潜力和价值。众多神经网络类型中,全连接前馈
    的头像 发表于 07-09 10:31 7551次阅读

    rnn是递归神经网络还是循环神经网络

    : 循环神经网络的基本概念 循环神经网络是一种具有时间序列特性的神经网络,它能够处理序列数据,具有记忆功能。与传统的前馈神经网络不同,循环神经网络
    的头像 发表于 07-05 09:52 392次阅读

    递归神经网络是循环神经网络

    。 递归神经网络的概念 递归神经网络是一种具有短期记忆功能的神经网络,它能够处理序列数据,如时间序列、文本、语音等。与传统的前馈神经网络不同,递归
    的头像 发表于 07-04 14:54 474次阅读

    深度神经网络与基本神经网络的区别

    探讨深度神经网络(Deep Neural Networks, DNNs)与基本神经网络(通常指传统神经网络或前向神经网络)的区别时,我们需
    的头像 发表于 07-04 13:20 356次阅读

    人工智能神经网络的结构是什么

    人工智能神经网络是一种模拟人脑神经网络的计算模型,其结构和功能非常复杂。 引言 人工智能神经网络是一种模拟人脑
    的头像 发表于 07-04 09:37 291次阅读

    反向传播神经网络和bp神经网络的区别

    神经网络许多领域都有广泛的应用,如语音识别、图像识别、自然语言处理等。然而,BP神经网络也存在一些问题,如容易陷入局部最优解、训练时间长、对初始权重敏感等。为了解决这些问题,研究者们提出了一些改进的BP
    的头像 发表于 07-03 11:00 398次阅读

    神经网络和人工智能的关系是什么

    神经网络和人工智能的关系是密不可分的。神经网络是人工智能的一种重要实现方式,而人工智能则是神经网络
    的头像 发表于 07-03 10:25 521次阅读

    bp神经网络和卷积神经网络区别是什么

    BP神经网络(Backpropagation Neural Network)和卷积神经网络(Convolutional Neural Network,简称CNN)是两种不同类型的人工神经网络,它们
    的头像 发表于 07-03 10:12 568次阅读

    卷积神经网络和bp神经网络的区别

    化能力。随着深度学习技术的不断发展,神经网络已经成为人工智能领域的重要技术之一。卷积神经网络和BP神经
    的头像 发表于 07-02 14:24 1159次阅读

    神经网络图像识别中的应用

    随着人工智能技术的飞速发展,神经网络图像识别领域的应用日益广泛。神经网络以其强大的特征提取和分类能力,为图像识别带来了革命性的进步。本文将详细介绍
    的头像 发表于 07-01 14:19 426次阅读

    神经网络自然语言处理中的应用

    自然语言处理(NLP)是人工智能领域中的一个重要分支,它研究的是如何使计算机能够理解和生成人类自然语言。随着人工智能技术的飞速发展,神经网络
    的头像 发表于 07-01 14:09 302次阅读

    详解深度学习、神经网络与卷积神经网络的应用

    如今的网络时代,错综复杂的大数据和网络环境,让传统信息处理理论、人工智能与人工神经网络都面临巨大的挑战。近些年,深度学习逐渐走进人们的视线
    的头像 发表于 01-11 10:51 1641次阅读
    详解深度学习、<b class='flag-5'>神经网络</b>与卷积<b class='flag-5'>神经网络</b>的应用

    基于智能手机智能电网中的实时监控系统设计

    电子发烧友网站提供《基于智能手机智能电网中的实时监控系统设计.pdf》资料免费下载
    发表于 11-06 16:17 0次下载
    基于<b class='flag-5'>智能手机</b><b class='flag-5'>在</b><b class='flag-5'>智能</b>电网中的<b class='flag-5'>实时</b>监控系统设计