`
猫耳呀
  • 浏览: 167640 次
社区版块
存档分类
最新评论

智能手机跑大规模神经网络的主要策略

阅读更多
摘要: 这些方法可以让深度学习跑在你的手机上!
 
计算机具有高储量的硬盘和强大的CPU和GPU。但是智能手机却没有,为了弥补这个缺陷,我们需要技巧来让智能手机高效地运行深度学习应用程序。
 
 
æºè½ææºè½ä¸å¼ºå¤§çæå¡å¨é群ç«äºåï¼    
 
介绍
 
深度学习是一个令人难以置信的灵活且强大的技术,但运行的神经网络可以在计算方面需要非常大的电力,且对磁盘空间也有要求。这通常不是云空间能够解决的问题一般都需要大硬盘服务器上运行驱动器和多个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)
 
使用我们的技巧,我们的神经网络已经变得非常粗糙了。我们删除了弱连接(修剪),甚至改变了一些权重(量化)。虽然这使得网络超级轻巧,而且速度非常快,但其准确度并非如此。
为了解决这个问题,我们需要在每一步迭代地重新训练网络。这只是意味着在修剪或量化权重后,我们需要再次训练网络,以便它能够适应变化并重复这个过程,直到权重停止变化太多。
 
结论
 
虽然智能手机不具备老式桌面计算机的磁盘空间、计算能力或电池寿命,但它们仍然是深度学习应用程序非常好的目标。借助少数技巧,并以几个百分点的精度为代价,现在可以在这些多功能手持设备上运行强大的神经网络。这为数以千计的激动人心的应用打开了大门。
 
阅读更多干货好文,请关注扫描以下二维码:
分享到:
评论

相关推荐

    大规模人工神经网络理论基础

    总之,《大规模人工神经网络理论基础》不仅为读者提供了构建大规模神经网络所需的技术手段和理论支持,更重要的是激发了人们对这一前沿领域探索的热情与兴趣。随着技术的不断进步与发展,相信未来将有更多基于大规模...

    基于PLC的模糊神经网络控制策略的应用.pdf

    因此,模糊控制和神经网络两种智能控制策略具有很好的互补性,可通过适当结合,构造出比单一控制策略更加完善的智能控制系统。 神经网络,尤其是模糊神经网络控制策略的应用,主要体现在能够处理那些不易建模或模型...

    大规模人工神经网络理论基础_MATLAB工具箱的神经网络_

    三、大规模神经网络的挑战与应对策略 1. 过拟合:随着网络规模增加,过拟合风险增大。解决方案包括正则化、早停、Dropout等技术。 2. 计算资源:大规模网络训练需要大量计算资源。分布式计算和GPU加速在MATLAB中可...

    智能控制、遗传算法、神经网络控制简介.pdf

    其中,遗传算法和神经网络控制是两种重要的智能控制策略。 遗传算法是受自然界生物进化启发的一种全局优化搜索方法。它通过模拟生物的遗传、突变和自然选择等过程来寻找问题的最优解或近似最优解。在遗传算法中,...

    基于MATLAB的BP神经网络应用

    - **智能控制**:在自动控制系统中,神经网络可用于预测和优化控制策略。 - **组合优化**:解决复杂优化问题,如旅行商问题(TSP)等。 - **预测**:对时间序列数据进行分析,预测未来趋势。 #### 二、神经网络结构及...

    神经网络控制算法

    5. **硬件实现的便捷性**:随着大规模集成电路技术的进步,神经网络的硬件实现变得更加容易,这也进一步推动了神经网络控制技术的发展。 #### 三、神经网络控制器的分类 根据不同的控制策略和学习方式,神经网络...

    粒子群优化神经网络.rar

    《粒子群优化神经网络》是将粒子群优化(Particle Swarm Optimization, PSO)算法应用于前馈神经网络(Feedforward Neural Network, FNN),特别是反向传播(Backpropagation, BP)神经网络的一种策略,旨在提高神经...

    2008年研究生神经网络试题A卷参考答案.pdf

    人工神经网络与生物神经网络的主要区别包括:单元模型的简化,信息传递方式的不同(生物神经网络传递的是脉冲信号,而人工神经网络传递的是模拟电压),以及规模和智能上的差异(人工神经网络的规模和智能目前还远...

    超大规模图神经网络技术架构.pptx

    超大规模图神经网络技术架构是近年来在人工智能领域中迅速发展的一种新技术,主要应用于处理复杂的、大规模的数据网络。本文将深入探讨这一技术的背景、挑战、算法仓库及其在云计算环境中的应用。 01 背景和挑战 ...

    神经网络_神经网络_神经网络matlab_神经网络matlab_感知神经网络BP神经网络_

    神经网络是一种模仿人脑神经元工作原理的计算模型,它在人工智能领域中扮演着至关重要的角色,特别是在模式识别、图像处理、语音识别和预测分析等方面。MATLAB是实现神经网络的一种强大工具,提供了丰富的库函数和...

    非线性系统神经网络控制策略安全性验证的公开算法_OVERT An Algorithm for Safety Verificati

    非线性系统神经网络控制策略的安全性验证是现代人工智能领域中的一个重要挑战,特别是在涉及自动驾驶...未来的研究可能会进一步优化这种方法,使其能够处理更大规模和更复杂的神经网络模型,以及适应更广泛的安全属性。

    智能神经网络控制.ppt

    - 大规模并行性:神经网络能够在多个处理器上同时运行,提高了处理速度。 - 冗余性:即使部分节点失效,神经网络仍能继续工作。 - 容错性:能够容忍一定程度的错误而不影响整体性能。 - 非线性:本质上是非线性...

    数据挖掘 python实现的神经网络算法

    它提供了高级API,使得创建神经网络变得简单,同时支持GPU加速,能快速完成大规模计算。 2. **Keras**:Keras是一个高级神经网络API,可以运行在TensorFlow之上,它简化了模型构建、训练和评估过程,适合初学者快速...

    小波分析与神经网络结合的研究进展

    随着信息技术的快速发展,人工智能领域的研究不断深入,小波分析与神经网络的结合成为了一个非常活跃的研究方向。小波分析作为一种强大的数学工具,在信号处理、图像分析等领域有着广泛的应用;而神经网络作为机器...

    matlab神经网络原理与实例精解

    10. **神经网络的并行计算**:MATLAB支持GPU加速,书中的某些部分可能涉及如何利用GPU进行大规模神经网络的并行计算,以提高计算效率。 通过阅读《MATLAB神经网络原理与实例精解》,读者不仅可以掌握神经网络的基本...

Global site tag (gtag.js) - Google Analytics