Boosting Parameter Efficiency in LLM-Based Recommendation through Sophisticated Pruning

本文尝试通过参数pruning来减小模型规模。 核心认识就是通用模型用在推荐任务下,其关于数学或者代码的能力并不是必须的,这部分能力对应的参数就是冗余的,是应当去除的。而原本针对通用llm的pruning方式,目的是保留其各方面的通用能力,因此在推荐任务下并不会有很好的效果。 比如WANDA[1]与随机pruning相比,在推荐任务下的性能几乎差不多,甚至有所不足。这意味着需要在推荐场景下单独设计pruning策略。 ## Step1 减小模型宽度 包括减小embeding size,减小attention头的个数

对每一个attention head求一个重要性,定义为抑制其前后模型输出的KLD,记为\(Imp(O_{i}^l)\),代表第l层第i个attention head的重要性。为了考虑去除前面的attention head之后,对后面层的影响,将其更新为 \[ Imp(O_{i}^l) = \alpha Imp(O_{i}^l) + (1-\alpha) Imp(O_{i}^{l+1}) \] 显然这是递归定义的,就考虑到了对之后每一层的影响 之后根据Imp对attention head进行修剪。

对于embeding,定义每一个维度\(d\)的重要性为\(|E_{d}\bigodot \nabla_{E_{d}}|\),即其对应嵌入权重与梯度的乘积的abs,然后按照重要性修剪。

Step2 修剪MLP

实验发现MLP层的activation分布明显长尾,这意味着少部分维度提供了大部分信息,从而存在冗余维度。考虑每一个序列最后一个token对应的activation(这应该是只希望考虑任务强相关的信息,毕竟最后一个token之后就是预测结果了) 定义每一个维度的重要性为其整个batch中其对应activation大于给定阈值\(\tau\)的概率,之后保留topK维度

Step3 层级修剪

对于每一层,重要性定义为去除其前后的PPL变化,变化越大,代表其越重要。然后依据此修剪冗余层

性能恢复

以修剪前的模型作为teacher,与修建后的模型做KD,加上student与ground truth的对齐

总结

对于每一个组件,主要还是依据其对具体任务的影响来评估其重要性,然后依据重要性修剪。 当然最终的效果还是很好的,在修剪了95%的参数(非embedding)之后还能还原88%的性能。

Reference

[1] Sun, M., Liu, Z., Bair, A., & Kolter, J.Z. A Simple and Effective Pruning Approach for Large Language Models. In ICLR, 24


Boosting Parameter Efficiency in LLM-Based Recommendation through Sophisticated Pruning
https://sophilex.github.io/posts/bdceb487/
作者
Sophilex
发布于
2025年8月4日
许可协议