模型剪枝


符号 定义 在 PruneFL 中的角色
两个向量的逐元素乘积 用于掩码操作,例如将参数向量与掩码向量相乘,保留重要参数,剪枝不重要参数。
n, N 客户端索引(单个设备)、客户端总数 表示参与联邦学习的边缘设备,N 是设备总数,用于分布式训练和参数聚合。
k, K 迭代索引(通信轮次)、总迭代次数 表示联邦学习的通信轮次,k 是当前轮次,K 是训练总轮次。
I 本地迭代次数(每个客户端的 SGD 步骤数) 客户端在本地数据上进行的参数更新次数,影响本地计算开销和模型收敛速度。
pₙ 客户端 n 的聚合权重 用于服务器聚合客户端参数时的加权平均,例如根据客户端数据量分配权重。
m(k) 第 k 次迭代中的权重掩码(所有客户端共享) 动态剪枝的关键,掩码中 0 表示参数被剪枝,1 表示保留。通过自适应策略更新,减少模型大小和通信开销。
wₙ(k) 客户端 n 在第 k 次迭代时的本地参数 客户端本地训练后的模型参数,上传至服务器进行聚合。
w(k) 全局参数(加权平均) 服务器聚合后的全局模型参数,下发至各客户端进行下一轮训练。
w’ₙ(k), w’(k) 剪枝后的参数 应用掩码后的稀疏参数,仅保留重要参数,用于减少计算和通信负载。
gₙ(w) 客户端 n 在参数 w 处的随机梯度(w为模型参数向量) 本地 SGD 计算的梯度,用于更新本地参数。在剪枝中可能用于评估参数重要性。
∇Fₙ(w) 客户端 n 在参数 w 处的期望梯度 理论上的平均梯度,与随机梯度相对,用于收敛性分析。
∇F(w) 全局期望梯度 全局模型的梯度方向,指导参数更新。在剪枝中可能用于优化掩码选择策略。

模型剪枝也叫模型稀疏化,即将部分对网络贡献较小的特征剔除或者置0,稀疏化可以分为两类:权重稀疏化(将网络中某些权重值设为0或删除,通过L1正则化或剪枝技术)和结构稀疏化(神经元剪枝)。模型中可以被剪枝(稀疏)的对象通常为权重、神经元(激活函数)、梯度。可以认为模型稀疏或剪枝的方法为置0和删除,个人认为稀疏对应置0,剪枝对应删除。

1. 权重稀疏

通常认为权重的绝对值大小是一种重要的衡量指标,权重数值越大代表对网络的输出贡献也越大,反之则不重要,删去对网络的影响也较小。

通常通过L1、L2正则化来迫使一些权重趋向于0,将一些低于阈值的权重参数删除,反复迭代这个删除过程知道模型的规模和精度达到预期。因为即使移除绝对值接近0的权重也会导致推理精度的损失,所以通常在剪枝后需要再训练。剪枝常做的三段式工作:训练、剪枝、微调。

2. 神经元(激活函数)稀疏

首先这里给出现代网络常用激活函数ReLU函数的定义:ReLU(x)=max(0,x),负值的输入都会被置为0,这种方法也可以认为是通过激活函数的方法给网络进行稀疏化。同样池化操作也可以产生类似形式,受此现象启发,我们发现CNN中许多的神经元都是低激活状态的,因此我们认为零神经元可能是冗余的,可以在不影响整体网络精度的情况下移除,即对网络中的神经元进行剪枝,做移除神经元操作。

3. 梯度稀疏

通常采用选择固定比例的正负梯度更新或预设阈值。

深度梯度压缩:在梯度稀疏化基础上采用动量修正、本地梯度剪裁、动量因子遮蔽和 warm-up训练 4 种方法来做梯度压缩,从而减少分布式训练中的通信带宽。

神经网络的权重、激活和梯度稀疏性总结:

4. 结构化稀疏

分为Channel/Filter 剪枝或shape-wise 剪枝,即对网络的层数(滤波器)或网络的大小进行剪裁。channel 剪枝的工作是最多的,channel 剪枝和 filter 剪枝其实意义是一样的,一个过滤器移除了,对应输出 feature map 的一个通道自然也被移除,反之一样。

阶段式剪枝:可以弥补滤波器级剪枝的不足,如下图所示。

v2-9666cdccffe0dd988c1796049073d4eb_1440w

图中N1、N2等代表的是每一层实际保留的通道数,如a)原始模型有64个通道,b)中删减为了N1个。


文章作者: FeiZao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 FeiZao !
  目录