|
神经网络在计算机视觉领域已被广泛应用,表现出非凡的能力。然而,复杂的网络架构对高效的实时部署提出了挑战,并需要大量的计算资源和能源成本。在端侧和边缘侧部署网络具体的挑战:
- 模型体积大;
- FLOPs(float-point operations,浮点操作);
- 耗能;
- 处理器架构和处理速度;
- 内存占用;
- 推理时延;
这些挑战可以通过网络压缩等优化来克服。网络剪枝(Network Pruning)是网络压缩主要技术之一,是一种减小内存大小和带宽的重要技术。
在20世纪90年代早期,剪枝技术被开发出来,可以在不需要再训练的情况下,将一个训练过的大型网络缩减为一个较小的网络。这使得神经网络可以部署在资源受限的环境中,比如嵌入式系统。剪枝去除对结果准确性没有显著贡献的冗余参数或神经元。当权重系数为零、接近零或被复制时,可能会出现这种情况。因此,修剪可以降低计算复杂度。如果修剪后的网络被重新训练,它提供了逃避之前的局部最小的概率并进一步提高精度。 剪枝就是通过去除网络中冗余的通道(channels),滤波器(filters),神经元节点( neurons), 网络层(layers)以得到一个更轻量级的网络,同时不影响性能。

神经元模型(Neuron Model)
神经元模型由输入信号、权值、偏置、加法器和激活函数共同构成,而且每个神经元都是一个多输入单输出的信息处理单元。

神经元的数学模型:
u_k = \sum^m_{j=1}{{w_{kj}x_j}}
v_k = u_k + b_k
y_k = \varphi(v_k) + b_k
一个神经网络的训练算法就是调整权值到最佳,以使得整个网络的预测效果最好,也就是提高网络的泛化能力。
剪枝分类
剪枝的不同分类:
- 根据网络元素类型,可以分为神经元剪枝和连接剪枝;
- 根据剪枝前后网络结构是否是改变,可以分为结构化剪枝和非结构化剪枝;
- 根据在推理阶段是否有剪枝,可以分为静态剪枝和动态剪枝;
结构化剪枝可以包括神经元剪枝和连接剪枝,但是是改变了剪枝前的网络结构。非结构化剪枝并没有改变网络结构,而是将分支权重改为0,这样权重为0的分支对整个网络没有影响,从而相当于减掉了该分支。如果观察到在某些迭代权重为0的分支对本轮迭代作用很大(影响性能),可以动态恢复非结构化剪枝造成的为零权重,提供网络性能。神经元剪枝会改变网络结构,属于结构化剪枝。连接剪枝,在权重设置为0并没有改变网络结构时属于非结构化剪枝,在连接删除改变网络结构时属于结构化剪枝。
神经元剪枝
神经元是神经网络的基本节点。神经元剪枝是将对输入和输出没有太大作用的网络节点及其相关连接一起剪掉,因此该剪枝方法会改变网络的结构属于结构性剪枝。
基于神经元剪枝更粗颗粒的剪枝,比如通道、滤波器、网络层剪枝,也是会改变网络结构会改变网络结构的,属于结构性剪枝。
连接剪枝
神经网络连接(connections)是神经网络节点之间的连接,在神经元数学模型中就是抽象为权重值的 w_{kj} 。
非结构化的连接剪枝是将对网络输入和输出没有影响的分支的连接(权重)设置为0,这样保持了网络结构没有变化。结构化的连接剪枝是剪去作用小的连接,这样改变了原先网络的结构。
非结构化剪枝(Non-Structured Pruning)
在执行过程中占所需计算很大但不必要连接的权重归零,为了保证体系结构的一致性,权值只能归零,不能剪枝。这种权值归零并没有改变网络结构的修剪属于非结构化剪枝。这种剪枝会产生参数为零的稀疏网络,要特殊的硬件和优化库才能真正达到压缩的网络模型的目的。
非结构化剪枝在参数量与网络性能之间取得了一定的平衡,但是网络的拓扑结构本身发生了变化需要专门的算法设计来支持这种稀疏的运算。
结构化剪枝(Structure Pruning)
结构化剪枝直接删除结构化网络部分,从而压缩和加速网络。其中最受关注的是filter剪枝(filter pruning)。单个filter剪枝压缩了输出feature map的维度。为了保持网络架构的一致性,还需要对下一层对应的kernel进行修剪。因此,结构化的filter剪枝是结构化的filter-kernel剪枝。结构化的filter-kernel剪枝不仅可以在训练后进行,而且可以在训练过程中进行。
结构化剪枝是对网络节点进行直接删除,不需要设计专门的硬件或优化库来处理稀疏数据运算问题。
静态剪枝(Static Pruning)
静态剪枝(Static pruning)是一种网络优化技术,它在训练后和推理前将离线的神经元从网络中移除。在推断过程中,不需要对网络进行额外的修剪。 静态剪枝通常包括三个部分:
- 剪枝参数的选择;
- 神经元剪枝的方法;
- 选择性微调或再训练;
再训练可以提高修剪后的网络的性能,以达到与未修剪的网络相当的精度,但可能需要大量的离线计算时间和能耗。
动态剪枝 (Dynamic Pruning)
除了可恢复技术外,静态剪枝还会永久破坏原有的网络结构,从而导致模型能力的下降。动态剪枝在运行时决定哪些层、通道或神经元不会参与进一步的活动。动态剪枝可以通过改变输入数据来克服静态剪枝的限制,从而潜在地减少计算量、带宽和功耗。动态修剪通常不执行运行时微调或重新训练。
动态剪枝就是在观察到了一些在某些迭代作用不大,但在其他迭代有很重要的权重,通过动态的恢复权重来得到更好的性能。
参考
- Rethinking the value of network pruning
- Pruning and Quantization for Deep Neural Network Acceleration: A Survey
- Learning both Weights and Connections for Efficient Neural NetworksConvolutional Neural Network Pruning: A Survey
- Pruning Algorithms to Accelerate Convolutional Neural Networks for Edge Applications: A Survey
- PRUNING CONVOLUTIONAL NEURAL NETWORKS FOR RESOURCE EFFICIENT INFERENCE
|
|