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

计算机具有高储量的硬盘和强大的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)

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

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

结论

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

如果你仍然好奇,请查看一些最好的面向移动的神经网络,如SqueezeNetMobileNets

原文地址:https://www.cnblogs.com/zhaowei121/p/9003573.html

时间: 2024-08-30 17:10:12

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

如何在手机上跑深度神经网络

这天,老板跟你说,希望能在手机上跑深度神经网络,并且准确率要和 VGG.GoogleNet 差不多. 接到这个任务后你有点懵逼,这些网络别说计算量大,就连网络参数也要 100MB 的空间才存得下,放在手机上跑?开玩笑呗. 老板又说,怎么实现是你的事,我要的只是这个功能. 你默默地点了点头. 初步尝试:MobileNet v1 问题出在哪 要在手机上跑深度网络,需要在模型参数和计算量上进行优化. 那深度神经网络的计算量和参数量主要体现在哪呢?这里以 VGG16 为例: 第一层卷积: [224 x

从华为Mate 8销量看中国智能手机的美学秘诀

在中国当前的智能手机领域,单款千元机销量破500万并非难事,但对于一款定价高达3000元以上的高端智能手机来说,要达到单款机型破500万销量的目标则非常吃力. 不过,这个看来实现难度非常之大的数字对华为来说倒也并非难事.据传,华为Mate 8自上市起到现在的销量,已经达到了500万台,甚至有望在未来不久突破Mate 7创造下的700万台销量. 在当前整个手机产业整体趋于低迷的状态下,千元机成为大多手机厂商厮杀战场的主力机型.但华为Mate 8作为一款定位高端的商务旗舰机型,在逆市的环境下依然能取

160413.神经网络处理器

陈云霁 http://novel.ict.ac.cn/ychen/ 陈云霁,男,1983年生,江西南昌人,中国科学院计算技术研究所研究员,博士生导师.同时,他担任了中国科学院脑科学卓越中心特聘研究员,以及中国科学院大学岗位教授.目前他带领其实验室,研制寒武纪系列深度学习处理器.在此之前,他从事国产处理器的研发工作十余年,先后负责或参与了多款龙芯处理器的设计.他在包括ISCA.HPCA.MICRO.ASPLOS.ICSE.ISSCC.Hot Chips.IJCAI.FPGA.SPAA.IEEE M

蒸蒸日上的智能手机,国产手机却迎来寒冬,因为手机操作系统android太垃圾

智能手机蒸蒸日上,国产手机却迎来寒冬,这是怎么回事?作者可能讨论了很多,但是最重要的一点是android手机不咋的. 我用android手机,经常出现界面无响应,要不要关闭的对话框,只能说android不成熟,或者天生有缺陷,不适合可视化界面操作,也许是java的弊端? 作者说,相对Android开放系统,iOS封闭系统有更好的软件权限与操作运行.进程管理机制,系统体验方面超出一筹.如果把iOS换成wince,结果也不是这样. iphone是操作系统和硬件的完美结合. 这里假设一下,如果andr

深度学习在图像识别中的研究进展与展望

深度学习在图像识别中的研究进展与展望 深度学习是近十年来人工智能领域取得的最重要的突破之一.它在语音识别.自然语言处理.计算机视觉.图像与视频分析.多媒体等诸多领域都取得了巨大成功.本文将重点介绍深度学习在物体识别.物体检测.视频分析的最新研究进展,并探讨其发展趋势. 1.深度学习发展历史的回顾 现在的深度学习模型属于神经网络.神经网络的历史可以追溯到上世纪四十年代,曾经在八九十年代流行.神经网络试图通过大脑认知的机理,解决各种机器学习的问题.1986年Rumelhart.Hinton和Will

梯度下降优化算法综述

本文翻译自Sebastian Ruder的"An overview of gradient descent optimization algoritms",作者首先在其博客中发表了这篇文章,其博客地址为:An overview of gradient descent optimization algoritms,之后,作者将其整理完放在了arxiv中,其地址为:An overview of gradient descent optimization algoritms,在翻译的过程中以

分布式系统

Distributed systems: for fun and profit (http://book.mixu.net/distsys/index.html) 链接:https://www.zhihu.com/question/23645117/answer/124708083 这篇文章主要试图回答以下两个个问题:1. 近些年分布式系统领域都在做些什么.2. 为什么现在投入分布式系统的学习和研究是值得的.我会尽可能多的去介绍更 "实用" 的分布式系统知识. 什么是实用?例如:Pax

图像识别中的深度学习 转

转:http://mp.weixin.qq.com/s?__biz=MzAwNDExMTQwNQ==&mid=209152042&idx=1&sn=fa0053e66cad3d2f7b107479014d4478#rd#opennewwindow 1.深度学习发展历史 深度学习是近十年来人工智能领域取得的重要突破.它在语音识别.自然语言处理.计算机视觉.图像与视频分析.多媒体等诸多领域的应用取得了巨大成功.现有的深度学习模型属于神经网络.神经网络的起源可追溯到20世纪40年代,曾经

机器学习最常用优化之一——梯度下降优化算法综述

转自:http://www.dataguru.cn/article-10174-1.html 梯度下降算法是机器学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法.几乎当前每一个先进的(state-of-the-art)机器学习库或者深度学习库都会包括梯度下降算法的不同变种实现.但是,它们就像一个黑盒优化器,很难得到它们优缺点的实际解释.这篇文章旨在提供梯度下降算法中的不同变种的介绍,帮助使用者根据具体需要进行使用. 这篇文章首先介绍梯度下降算法的三种框架,然后介绍它们所存在的