Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

移动端深度学习

现阶段的移动端 APP 主要通过以下两种模式来使用深度学习: online 方式:移动端做初步预处理,把数据传到服务器执行深度学习模型,优点是这个方式部署相对简单,将现成的框架(Caffe,Theano,MXNet,Torch) 做下封装就可以直接拿来用,服务器性能大, 能够处理比较大的模型,缺点是必须联网。 offline 方式:在服务器上进行训练的过程,在手机上进行预测的过程。 当前移动端的三大框架(Caffe2、TensorFlow Lite、Core ML)均使用 offline 方式,该方式可在无需网络连接的情况下确保用户数据的私密性。

简介

现阶段的移动端 APP 主要通过以下两种模式来使用深度学习:

online 方式:移动端做初步预处理,把数据传到服务器执行深度学习模型,优点是这个方式部署相对简单,将现成的框架(Caffe,Theano,MXNet,Torch) 做下封装就可以直接拿来用,服务器性能大, 能够处理比较大的模型,缺点是必须联网。

offline 方式:在服务器上进行训练的过程,在手机上进行预测的过程。 

当前移动端的三大框架(Caffe2、TensorFlow Lite、Core ML)均使用 offline 方式,该方式可在无需网络连接的情况下确保用户数据的私密性。

image.png

MDL主要的特性是对大而复杂的模型进行压缩,它的过程是:

1、 Prunes the network:

修枝剪叶,只保留一些重要的连接;

用于稀疏连接的重量级修剪,剪去权值低的,也就是去掉几乎不可能发生的node。

image.png

其次进行迭代地修剪和重新训练,或用L1正则化的通道级修剪。

image.png

image.png

之后进一步压缩,对于weight的index,不再存储绝对位置的index,而是存储跟上一个有效weight的相对位置,这样index的字节数就可以被压缩了。

卷积层用 8bits 来保存这个相对位置的index,在全连接层中用 5bits 来保存;

用3bits保存相对位置为例子,当相对位置超过8(3bits)的时候,需要在相对位置为8的地方填充一个0,防止溢出;

image.png

2、 Quantize the weights:

训练量化,通过权值量化来共享一些weights;

image.png 假设有一个层,它有4个输入神经元,4个输出神经元,那么它的权值就是4*4的矩阵; 图中左上是weight矩阵,左下是gradient矩阵。可以看到,图中作者把 weight矩阵 聚类成了4个cluster(由4种颜色表示)。属于同一类的weight共享同一个权值大小(看中间的白色矩形部分,每种颜色权值对应一个clusterindex);由于同一cluster的weight共享一个权值大小,所以我们只需要存储权值的index 例子中是4个cluster,所以原来每个weight需要32bits,现在只需要2bits,非常简单的压缩了16倍。而在 权值更新 的时候,所有的gradients按照weight矩阵的颜色来分组,同一组的gradient做一个相加的操作,得到是sum乘上learning rate再减去共享的centroids,得到一个fine-tuned centroids,这个过程看上图,画的非常清晰了。

对于AlexNet,卷积层quantization到8bits(256个共享权值),而全连接层quantization到5bits(32个共享权值),并且这样压缩之后的网络没有降低准确率。用非常简单的 K-means,对每一层都做一个weight的聚类,属于同一个 cluster 的就共享同一个权值大小。

3. Huffman coding:

通过霍夫曼编码进一步压缩;

Huffman Coding 是一种非常常用的无损编码技术,它按照符号出现的概率来进行变长编码。下图的权重以及权值索引分布来自于AlexNet的最后一个全连接层。可以看出,其分布是非均匀的、双峰形状,因此我们可以利用Huffman编码来对其进行处理,最终可以进一步使的网络的存储减少20%~30%。

image.png

首先通过Pruning,把连接数减少到原来的 1/13~1/9;

其次通过Quantization,使每一个连接从原来的 32bits 减少到 5bits;

最后通过Huffman coding,让网络的存储减少20%~30%。

以百度开发的MDL框架为例,总体架构如下:

image.png


MDL 框架主要包括模型转换模块(MDL Converter)、模型加载模块(Loader)、网络管理模块(Net)、矩阵运算模块(Gemmers)及供 Android 端调用的 JNI 接口层(JNI Interfaces)。其中,模型转换模块主要负责将 Caffe 模型转为 MDL 模型,同时支持将 32bit 浮点型参数量化为 8bit 参数,从而极大地压缩模型体积;模型加载模块主要完成模型的反量化及加载校验、网络注册等过程,网络管理模块主要负责网络中各层 Layer 的初始化及管理工作;MDL 提供了供 Android 端调用的 JNI 接口层,开发者可以通过调用 JNI 接口轻松完成加载及预测过程。

作为一款移动端深度学习框架,需要充分考虑到移动应用自身及运行环境的特点,在速度、体积、资源占用率等方面有严格的要求。同时,可扩展性、鲁棒性、兼容性也是需要考虑的。为了保证框架的可扩展性,MDL对 layer 层进行了抽象,方便框架使用者根据模型的需要,自定义实现特定类型的层,使用 MDL 通过添加不同类型的层实现对更多网络模型的支持,而不需要改动其他位置的代码。为了保证框架的鲁棒性,MDL 通过反射机制,将 C++ 底层异常抛到应用层,应用层通过捕获异常对异常进行相应处理,如通过日志收集异常信息、保证软件可持续优化等。目前行业内各种深度学习训练框架种类繁多,而 MDL 不支持模型训练能力,为了保证框架的兼容性,MDL提供 Caffe 模型转 MDL 的工具脚本,使用者通过一行命令就可以完成模型的转换及量化过程。

描述来源:

Han, S., Mao, H., & Dally, W. J. (2015). Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding. arXiv preprint arXiv:1510.00149.

Howard, A. G., Zhu, M., Chen, B., Kalenichenko, D., Wang, W., Weyand, T., ... & Adam, H. (2017). Mobilenets: Efficient convolutional neural networks for mobile vision applications. arXiv preprint arXiv:1704.04861.

简书. (2018). 移动端深度学习展望. [online] Available at: https://www.jianshu.com/p/53db67dd6c14 [Accessed 3 Dec. 2018].

发展历史

描述

2015年,Lane, N. D., & Georgiev, P. 提出了能否将深度学习应用于移动端的思考。

2016年,Alsheikh, M. A., Niyato, D., Lin, S., Tan, H. P., & Han, Z. 首次在移动端使用深度学习对移动端的大数据进行了分析。

2017年,Zeng, X., Cao, K., & Zhang, M. 使用MDL用于图像识别技术。

2018年,Wu, C., Zhang, L., Li, Q., Fu, Z., Zhu, W., & Zhang, Y. 对移动端深度学习提出了资源分配和模型压缩方案。

各主流移动端深度学习框架诞生时间如下:

2017 年 3 月,XMART LABS 在 GitHub 上开源 Bender,它是一个基于 Metal 的机器学习框架,它允许你在 IOS APP 上轻松地定义和运行神经网络,该框架在底层使用了苹果的 Metal Performance Shaders。

2017 年 4 月 19 日,Facebook 在 F8 开发者大会上推出 Caffe2,它最大的特点就是轻量、模块化和可扩展性,即一次编码,到处运行。

2017 年 5 月 17 日,在 Google I/O 2017 大会上,移动端深度学习框架 TensorFlow Lite 诞生。

2017 年 6 月 6 日,苹果在 WWDC 大会上推出 Core ML,能让本地数据处理愈加方便快捷。Core ML 提供支持人脸追踪、人脸检测、地标、文本检测、条码识别、物体追踪、图像匹配等任务的 API。Core ML 是一个基础机器学习框架,能用于众多苹果的产品,包括 Siri、相机和 QuickType。

2017 年 9 月 25 日,百度开源移动端深度学习框架 mobile-deep-learning(MDL),旨在让卷积神经网络(CNNC)能更简单和高速的部署在移动端,支持 iOS GPU,目前已经在百度 APP 上有所使用。

2017 年 11 月 14 日,谷歌正式发布 TensorFlow Lite 预览版,这一框架主要用于移动端和嵌入式设备,顾名思义,相较于 TensorFlow,TensorFlow Lite 是一个轻量化版本。这个开发框架专门为机器学习模型的低延迟推理做了优化,专注于更少的内存占用以及更快的运行速度。

主要事件

年份事件相关论文/Reference
2015Lane, N. D., & Georgiev, P. 提出了能否将深度学习应用于移动端的思考。Lane, N. D., & Georgiev, P. (2015, February). Can deep learning revolutionize mobile sensing?. In Proceedings of the 16th International Workshop on Mobile Computing Systems and Applications (pp. 117-122). ACM.
2016Alsheikh, M. A., Niyato, D., Lin, S., Tan, H. P., & Han, Z. 首次使用深度学习对移动端的大数据进行了分析。Alsheikh, M. A., Niyato, D., Lin, S., Tan, H. P., & Han, Z. (2016). Mobile big data analytics using deep learning and apache spark. IEEE network, 30(3), 22-29.
2017Zeng, X., Cao, K., & Zhang, M. 使用MDL用于图像识别技术。Zeng, X., Cao, K., & Zhang, M. (2017, June). MobileDeepPill: A small-footprint mobile deep learning system for recognizing unconstrained pill images. In Proceedings of the 15th Annual International Conference on Mobile Systems, Applications, and Services (pp. 56-67). ACM.
2018Wu, C., Zhang, L., Li, Q., Fu, Z., Zhu, W., & Zhang, Y. 对移动端深度学习提出了资源分配和模型压缩方案。Wu, C., Zhang, L., Li, Q., Fu, Z., Zhu, W., & Zhang, Y. (2018). Enabling Flexible Resource Allocation in Mobile Deep Learning Systems. IEEE Transactions on Parallel and Distributed Systems.

发展分析

瓶颈

大模型耗费大量的资源(计算、内存、存储、电),移动端资源(CPU、GPU、内存)和云端的差距过大,无法进行类似云端的大规模分布式训练。目前,百度,腾讯,小米以及骁龙等出的移动端的框架,基本不支持训练,只支持前向推理。

未来发展方向

目前深度学习遇到的瓶颈主要在于计算量巨大和模型占用内存和存储空间打的问题,而移动端具有便携,轻量;实时性强;无需连接云,本地使用;移动端产品众多,贴近生活等特点,可以对大而复杂的模型进行压缩,移动化和轻量化是未来AI领域的发展方向。

作为经典算法,未来发展方向还是用于提高CNN分类的准确性以及从平面识别提升到3D识别和建模上。

Contributor: Tiange Wang

简介