微软亚洲研究院的一项新研究实现了模型的完全稀疏激活,大大降低了推理成本。
它还具有广泛的适用性,无论是从头训练,持续训练还是微调,都能提供有效的支持。

这种方法称为Q-,在神经元级别实现模型稀疏化,相比于其他方法粒度更细,在相同推理成本下具有更优的性能和稀疏率。
名称中,Q指的是(量化),意味着除了普通模型外,还兼容量化技术,适用于各种量化方式的模型。
作者进一步表示,如果Q-与模型量化技术相结合,可以实现更大的成本降低和效率提升。
此外,团队在研究Q-的同时,还深入探索了参数规模、稀疏率与模型性能之间的关系,发现了一条适用于模型推理优化的“定律”。
有网友认为,这个技术确实不错,比ReLU更好。

也有人开始许愿,说如果(AMD的)ROCm能够比更快地支持这项技术就好了。

使用Top-K函数实现稀疏性
Q-的核心操作是将Top-K稀疏化函数应用于输入张量。
具体来说,该架构在注意层和前馈层中都使用 nn. 层(矩阵乘法)进行投影,可以表示为 Y=X·W^T。(其中 X 是输入张量,W 表示其权重,Y 是输出张量)
在Q-中,对于一个输入激活张量X,首先计算它的绝对值|X|,并对其进行排序,找到绝对值最大的K个元素。
这里 K 是一个预设的超参数,决定了稀疏化的程度。
Q-随后会创建一个与X形状相同的二元掩码张量M,对于一系列|X|中绝对值最大的K个元素所对应的位置,将其在M中的对应位置设置为1,其余位置设置为0。
接下来,将输入张量 X 与掩码张量 M 相乘(逐元素乘法),得到稀疏张量。
在前向传播过程中,稀疏张量会代替原始输入张量X参与后续计算(例如矩阵乘法)。
由于中的大多数元素已设置为零,因此计算和内存带宽要求可以显著降低。

在反向传播过程中,Q-采用直通估计器(-,STE)计算Top-K函数的梯度。
在传统的训练方法中,通常需要计算损失函数关于网络参数的梯度,并利用梯度下降法更新参数,使损失最小化。
然而当网络中存在量化、Top-K等一些不可微的操作时,梯度的计算就会遇到问题,因为这些操作的输出对于输入的梯度在大多数点上都为0,导致无法有效地传播梯度。
STE 通过在稀疏化之前将梯度直接传递给张量来避免梯度消失问题。
一般反向传播中,损失函数L关于x的梯度为∂L/∂x=∂L/∂y⋅∂y/∂x,但由于其不可微性而无法直接计算。
STE的解决方案是,只针对稀疏张量y计算损失函数的梯度,然后直接复制到原张量x上,即直接将∂L/∂y作为∂L/∂x的估计。

△
对于前馈层,Q-使用平方的ReLU函数代替常规的ReLU激活函数。平方运算可以进一步提高激活的稀疏性(⊙表示乘积)。
此外,为了适配量化模型,Q-在应用Top-K稀疏化之前会对输入张量进行量化,以保证稀疏化操作与量化表示兼容,其函数表示如下:

这里,ε 是一个小常数,用来避免分母为零。
具体来说,对于 1 位量化权重,Q 使用以下量化函数,其中 α 是权重张量 W 的平均绝对值。
60% 激活参数达到相同效果
对比实验表明,Q-无论从稀疏率还是模型性能上,都明显优于之前的ReLU方法。

关于Q-的具体效果,作者在三个任务上评估了其表现:从头训练、持续训练和微调。
重训练实验使用的模型是Llama,结果显示在700M和7B模型上,使用70%top-K(即整体稀疏度为40%)的Q-CNN可以取得与dense相当的训练损失。

继续训练的目的是让密集的模型变得稀疏起来,这里的实验对象是-7B。
结果发现,当激活参数分别为2.9B和3.8B时,模型在ARC、MMLU等数据集上的分数并没有明显下降。

在微调实验中,无论是 Qwen-7B 还是 -7B 模型,Q- 都表现出了与持续训练相似的结果,在激活参数约为 60% 的情况下实现了与密集模型非常接近的性能。

这些结果意味着,在相同性能的情况下,与密集模型相比,稀疏激活模型可以显著减少激活参数的数量,从而减少推理过程中消耗的 FLOPS 数量。
在量化模型方面,团队将Q-应用于自主研发的b1.58模型,并在多个数据集上进行训练和评估。
可以看出,在700M和7B规模下,使用Q-的量化模型的收敛速度和最终的损失函数值与不带Q-的量化模型相当(b1.58)。
这表明Q-可以无缝集成到量化模型中,而不会显著影响模型的训练和收敛。
基于此,作者认为将Q与量化技术相结合可以进一步提高大型语言模型在推理阶段的效率。

发现推理优化的新“规律”
除了评估这些模型在使用稀疏激活时的性能之外,作者还探索了模型性能、规模和稀疏性之间的关系,并取得了一些新的发现。
稀疏激活模型的性能缩放规律:作者发现,与密集模型类似,稀疏激活模型的性能也遵循幂律缩放关系。
具体来说,给定稀疏率S,模型收敛时的损失函数值L(N,S)可以用以下公式近似:

其中 N 是模型参数的数量;E 是一个常数,表示模型在无穷远处的损失;A(S) 是与稀疏率 S 相关的缩放因子。
该缩放定律表明,稀疏激活模型的性能随着模型尺寸的增加而提高,但提高的速度逐渐减慢。

同时作者发现模型的性能也受到稀疏率的影响。
在参数大小与性能关系一节提到,A(S)是与稀疏率S相关的缩放因子,可以通过以下公式近似计算:

其中B和C是常数,β是控制指数衰减速度的参数。
这个公式说明的是,当稀疏率S增大(模型变得更稀疏)时,意味着更高的稀疏率会导致性能的下降,而且下降的速率是指数的。

基于上述发现,作者推导出一个用于推理的最优稀疏率 S*,当预算(推理过程中的浮点运算次数)不变时,该稀疏率 S* 可以最小化模型损失函数的值。
对于全精度(FP32)模型,最优稀疏率约为45.58%;而对于低精度(如1.58位)模型,最优稀疏率较高,约为61.25%。

作者观察到,随着模型尺寸的增加,稀疏激活模型和密集模型之间的性能差距逐渐缩小。
这可以从缩放定律中解释:当模型规模N趋向于无穷大时,稀疏激活模型的损失函数值趋向于L(∞,S)=E,而密集模型的损失函数值趋向于L(∞,0)=E。
这意味着在极大规模下,稀疏激活模型有可能实现与密集模型相当的性能,为设计和训练大规模稀疏激活模型提供了有用的参考。
论文地址:
本文来自微信公众号“量子比特”,作者:,经授权36氪发布。


