定义
微型神经网路简单来说是对原来神经网路结构进行最佳化和网路裁剪。从深度学习的理论发展来看,寻求特定任务下最小的深度学习系统有利于帮助研究人员进一步理解深度学习的作用机理,如神经元的物理含义,神经元的学习能力极限等方面。构建和生成微型神经网路模型有利于将更多深度学习算法套用到移动端,降低对设备性能的要求。近年来,有关学者提出了不是微型神经网路架构,如MobileNets,ShuffleNet使用深度可分离的卷积来构建轻量级的深层神经网路。构建微型神经网路的方法可以分为近似,量化和裁剪、基于张量分解等方法。必要性与可能性
深度学习是近年来机器学习中最具有代表性的技术,在图片识别,自然语言处理,语音识别,机器人技术等许多模式识别的关键领域均取得了突破性的成就。深度卷积网路将图像识别的準确率提高了一个台阶,并在个别领域,如人脸识别中取得了超过人类的识别水平。深度学习的本质是大数据支持下的多层人工神经网路系统,一个深度学习模型通常包含数以百万计甚至千万计的参数和十几层甚至几十层的网路。例如,AlexNet网路的参数数目约为6000万个,而VGG网路拥有1.4亿参数。巨量的参数带来性能提升的同时,也带来网路体量巨大、运算缓慢等缺点,不利于深度学习模型向运算资源有限的设备和套用中嵌入。另一方面,深度神经网路又常常是过参数化的。尤其是对于特定的任务而言,有相当部分的神经元和连线权重对模型的性能没有实质性的影响,或这些影响可以藉由再训练方法由其他神经元填补。构建微型神经网路不但具有必要性,也具有可能性。首先,儘管神经网路通常是深度越深,效果越好,但针对具体的套用场景和需求,适当深度和参数数目的网路即能够满足。盲目加深网路複杂度所带来的微弱性能提升在许多套用场合意义并不大。其次,神经网路常常存在过参数化的问题,网路神经元的功能具有较大的重複性,即使在网路性能敏感的场景,大部分网路也可以被“安全地”压缩而不影响其性能。
方法
近似类方法
近似类方法主要利用矩阵或张量分解的思想,通过少量参数重构原始网路参数矩阵或参数张量,以达到减少网路存储开销的目的。通常,在网路运行时,这些参数将会被适当重建,网路的运行时开销并没有得到有效减少。
基于张量分解
张量是向量和矩阵的自然推广,向量可称为一阶张量,矩阵可称为二阶张量,将矩阵堆叠形成“立方体”,这种数据结构则称为三阶张量。一张灰度图像在计算机中由矩阵表示,是二阶张量。一张RGB三通道的彩色图像在计算机中则保存为三阶张量。当然,三阶张量也可以堆叠形成更高阶的张量。张量分解是张量分析中的重要组成部分,其基本原理是利用张量数据中的结构信息,将张量分解为形式更简单、存储规模更小的若干张量的组合。典型的张量分解方法有CP分解,Tucker分解等。在神经网路中,参数通常以“张量”的形式集中保存。对全连线层而言,全连线通过权重矩阵将输入向量变换到输出向量,其参数为二阶张量。对卷积层而言,设输入数据为具有𝐶通道的三阶张量。则卷积层中的每一个卷积核也都是具有𝐶通道的三阶卷积核,故一层卷积层所包含的一组卷积核构成了形如𝐵 × 𝑀 ×𝑁×𝐶的四阶张量。基于张量分解的网路压缩的基本思想,就是利用张量分解的技术将网路的参数重新表达为小张量的组合。重新表达后的张量组一般能够在一定的精度下近似与原张量相同,而所占用的空间又得到大大降低,从而获得网路压缩的效果。有关学者分别是利用张量CP分解和Tucker分解的网路压缩工作。随着张量分解的研究,该类网路压缩方法也得到发展。利用较新的Tensor Train分解方法,经过Tensor Train分解得到的张量组可以通过反向传播算法获得更新,实际上形成了一种占用空间更小的网路层。
量化方法
量化方法的主要思想是将网路参数的可能值从实数域映射到有限数集,或将网路参数用更少的比特数来表示。量化的方法将原本具有无限种可能的参数约束到少数几种参数中,再对这些参数进行重用,就可以减少网路存储开销。通过改变参数的数据类型,如将原本的64位浮点型量化为整形甚至布尔型,网路的运行时开销也将得到大幅度减少。网路裁剪
网路裁剪的主要特点是会直接改变网路的结构。网路裁剪可以按粒度分为层级裁剪,神经元级裁剪和神经连线级裁剪。层级裁剪的裁减对象是网路层,裁剪的结果是获得更浅的网路。通常,神经网路想要达到良好的模式识别效果,必须具有较深的深度,但对具体问题而言,深度太深也会带来过拟合风险增高,训练难度加大等问题,且过深的网路对提高具体场景下模式识别的性能帮助有限,因此有时会对网路进行层级的裁剪。神经元级的裁剪对象是一层中的神经元或滤波器,裁剪的结果是获得更“瘦”的神经网路,瘦长的神经网路不但能够减少网路存储开销,还能提高网路运算速度。经过层级或神经元级裁剪的神经网路,仍然保持了原本神经网路的正规性,即网路的存储和运算规则仍然保持不变,只是规模变小。神经连线级的裁剪对象是一条具体的网路连线,或一个具体的参数,裁剪的结果通常是获得更为稀疏的网路。神经连线级的裁剪往往更加精细可控,对网路性能的影响最小。但神经连线级的裁剪会导致网路失去正规性,经过裁剪的网路权值张量变的稀疏,因此在存储和运算时需要採用稀疏张量的存储和运算规则,不利于并行。
深度学习特点
深度学习是机器学习的一项分支,是一类由大数据推动,以多层人工神经网路为表现形式,以特徵提取为主要目的的算法,既可以用于监督学习,也可以用于非监督学习。我们将深度学习的特性总结如下:
一是计算密集。深度学习的一般形式是多层的人工神经网路,一个深度学习模型往往含有数以百万计甚至千万计的参数,庞大的模型必须有大量的训练样本作为支撑才能抑制过拟合,提高泛化能力。儘管有一些工作试图降低深度学习所需要的样本数,但总体而言,没有大量的数据支撑,深度学习就无从谈起。网路规模和数据量两方面共同决定深度学习具有计算密集的特性。
二是特徵的自动提取和分层处理,深度神经网路主要处理的问题是从数据中自动提取特徵。这种特徵的提取是通过逐层组合抽象完成的,具有分层特性。网路的底层(近输入端)抽取的是局部的,低级的特徵,这些特徵经过逐层组合和非线性变换,在高层(远输入端)形成全局和抽象的特徵。特徵的语义性从低到高得到逐渐加强。
三是工程性强,可解释性弱。儘管在深度学习的理论方面已经有许多有意义的工作,但深度学习的原理尚不明确,在大多数情况下深度学习仍然像是一个“黑盒子”,缺乏严格的理论证明。另一方面,深度学习是一门工程性非常强的学科,神经网路的编程、调参、最佳化都具有很强的实践性,十分依靠工程师的个人经验。



















