正文
Xnor.ai 平台的这项针对移动端部署深度学习研发技术,无论是从响应性、速度还是可靠性上来说,都可以达到前所未有的水平。而且,由于数据全部存储于移动端设备上,个人隐私可以得到高水平保障。例如,就物体检测的性能而言,业界完全可以把这项技术应用于手机上,实现物体的实时检测。
事实上,xnor.ai 团队就曾将 XNOR-Net 部署在价值 5 美元的 Raspberry Pi Zero 上,通过连接一个摄像头实现了实时视频分析,这段网站上的 demo 展示出的实时检测分析效果十分引人注意,给人很强的视觉冲击力。如果在类似于 Raspberry Pi Zero 这样的移动设备上都能进行对枪支和刀具的实时监测并及时报警,那么人们完全可以利用这项技术针对性地开发出更多 AI 安防产品,拓展 AI 安防领域,更不用说这项技术在其他领域中潜在的巨大商业价值。
众所周知,深度学习模型大量的矩阵运算使 GPU 加速成了必不可少的硬件支持,这使得深度网络难以在运算资源有限的移动设备上面实现。那么,xnor.ai 又是如何将深度网络部署于移动端的呢?在这里,不得不提到二值神经网络这个概念。
随着对神经网络研究深度不断推进,学界研究人员发现传统的神经网络对计算成本和内存容量要求较高,而二值化则可以有效地改善这些问题。二值化网络不仅有助于减小模型的存储大小,节省存储容量,而且能加快运算速度,降低计算成本。
2015 年 11 月,来自于 Yoshua Bengio 教授带领的加拿大蒙特利尔大学实验室团队的 Matthie Courbariaux 发表了关于二值神经网络 BinaryConnect 的相关论文(BinaryConnect:Training Deep Learing Neural Networks with binary weight during propagations),引起了广泛关注,开启了崭新的二值化网络时代。论文中提出了 BinaryConnect 算法的关键在于仅在前向传播和反向传播中对权重进行二值化 1 或-1,而在参数更新过程保持权重的全精度(即仍为浮点数),这样的做法可以省去接近三分之二的矩阵运算,训练时间和内存空间都得到了大幅度优化,同时,BinaryConnect 在 MNISIST,CIFAR-10 和 SVHN 图像分类数据集上的实验效果可以达到当时世界领先水平。
在此基础上,Matthieu 和 Itay 随后联合发表的论文(Binarized Neural Networks:Training Networks with Weights and Activations Constrained to +1 or -1)提出了更完善的网络模型——BinaryNet,将权值和隐藏层激活值同时进行二值化,并利用 xnorcount 和 popcount 运算操作代替网络中传统的算术运算。这个算法在常用图像数据集上的模型二值化实验也比较成功,可以减少约 60% 的计算复杂度,甚至可以在保证分类准确率的情况下,减少七倍的 GPU 运行时间。同时,实验团队也公开了在 CUDA、Theano 以及 Torch 上的代码,不过很可惜的是,这个算法并没有在如 ImageNet 的大数据集上证明精度是否可以维持。在尽可能减小模型准确率损失的情况下,BinaryNet 的出现通过缩减模型大小,简化运算难度对算法进行加速。这使得深度网络部署于移动端的前景初见曙光。
值得一提的是,随着神经网络技术的蓬勃发展,许多教授、学者投身工业界,像 Matthie Courbariaux 现已投身 Google,并负责在 TensorFlow 框架中实现对深度模型的量化任务。不同于 Matthie 在论文中的二值化概念 (即不丢失模型准确率,只压缩模型大小), 实际投入应用的量化更适合被理解为离散化。一般来说,在训练神经网络的时候,要对权重做一些微小的调整,而这些微小的调整需要浮点精度才能正常工作,而低精度计算会被网络当做一种噪声。深度网络的一个奇妙之处就在于它可以很好地应对输入噪音,因为网络可以把低精度计算当做一种噪声,这使得量化后的网络在具备较少信息的数值格式下,仍能产生精确的结果。
量化网络有两个动机,一是缩小尺寸,这是通过存储每层的最大和最小值,然后把每一个浮点值压缩成 8-bit 整数来表示。二是降低资源需求,这需要整个计算都用 8-bit 输入和输出来实现。量化压缩是存在风险的,目前的版本似乎还不是很成熟,Github 上面有很多开发人员认为利用这种方法量化后的模型效率较低。