Page 120 - 《软件学报》2026年第6期
P. 120
舒善富 等: 基于自适应知识蒸馏的代码大模型轻量化 2439
∂L β
k
β k+1 = β −η β · (17)
∂β
其中, η β 是 β 值的学习率, L i 和 L i 是样本 x i 上计算的 KL 和 RKL 损失函数, sign(·) 是符号函数. 可以发现 β 值
KL RKL
在向着缩小 KL 损失, 提高 RKL 损失的方向更新. 而在 AKD(θ,β) 损失函数中, β 值是 L RKL (p,q θ ) 的权重. 因此 β 值
θ
更新的目的是增加 AKD(θ,β) 损失函数的值, 使 值能够获得更有效的更新.
综上, 本文给出自适应知识蒸馏方法的训练过程, 如算法 1 所示. 首先, 初始化自适应参数 β, 设置正则化强度
K
λ reg 及最大迭代次数 . 从训练数据集中随机抽取小批量样本进行训练. 在每一轮训练过程中, 输入样本 x i 经过
template 方法, 使用 prompt 模板对数据进行填充, 学生模型根据输入样本 x i 生成输出概率 , 教师模型生成对应的
q θ
p. 接着, 计算知识蒸馏损失函数 KL 和 β 进行加权求和, 得到总损失 total_loss. 在
输出概率 RKL, 并根据自适应参数
每个小批量的训练结束后, 基于 mini_batch_loss 更新学生模型的参数 θ. 同时, 计算正则化损失 reg_loss, 用于调整自
适应参数 β. 更新后的 β 参数被限制在 [0, 1] 的区间内. 经过多轮迭代优化模型, 输出经过优化的学生模型.
算法 1. 自适应知识蒸馏训练方法.
N
输入: 训练数据集 D = (x i ,y i ) , 学生模型 , π, 自适应参数 , β 的学习率分别为 η θ 和 ,
π θ θ 为参数, 教师模型
β θ 和
η β
i=1
ϵ
K
正则化强度 λ reg , 常数 , 最大迭代次数 ;
输出: 学生模型 π θ .
1. 初始化 ϵ = 0.0001, 正则化强度 λ reg = 0.5, 设置迭代器 k = 0, 自适应参数 β = 0.1.
2. for k = 0; k < K; k++ do
3. β = random.choice(0.1, 0.6)
4. for mini-batch B ⊂ D do
5. x i = template( )
x i
6. for {x i ,y i } ∈ B do
( )
7. 计算学生模型输出分析概率 q θ y i |x i
( )
8. 计算教师模型输出分析概率 p y i |x i
9. kl_loss = L KL (p,q θ )
10. rkl_loss = L RKL (p,q θ )
11. total_loss = β·rkl_loss+(1−β)·kl_loss
12. end for
1 ∑
13. mini_batch_loss = total_loss
|B| x i ∈B
( )
14. 更新 θ 参数: θ ← θ −η θ ·∇ θ mini_batch_loss
(
15. reg_loss = λ reg × −log(ϵ +|β−0.5|×2)−log(ϵ +1−|β−0.5|×2) )
16. loss_beta = − mini_batch_loss + reg_loss
( )
17. 更新 β 参数: β ← β−η β ·∇ β loss_beta
β 限制在 [0, 1] 区间内: β ← min(max(β,0),1)
18. 将
19. end for
20. end for
21. return π θ
4 实验与分析
本实验旨在针对代码生成任务, 评估基于 AKD 方法的代码大模型生成效果. 通过对比现有先进知识蒸馏方

