Q26: 推导拉格朗日乘子法
的 KKT 条件
拉格朗日乘子法与 KKT 条件是啥?
拉格朗日乘子法是解决约束优化问题的利器。比如,想最小化函数 ,同时满足约束
,就构造拉格朗日函数
(
是乘子)。KKT 条件是解这类问题的核心规则,包含以下几点:
- 梯度为零:
,即
,表示在最优解处,目标函数梯度与约束函数梯度成比例。
- 原始可行性:
,确保解在约束范围内。
- 对偶可行性:
,乘子非负。
- 互补松弛:
,意味着要么
(约束不起作用),要么
(约束刚好满足)。
在 LLM 中的使用
在 LLM 的模型压缩中,既要最小化模型大小 ,又要保证精度
(如精度下降不超过阈值)。通过 KKT 条件找到最优压缩参数,确保在精度约束下模型最小。例如,剪枝时确定保留哪些连接,使模型变小同时精度达标。
代码示例(简单约束优化):
import numpy as np
# 目标函数 f(x) = x²
# 约束 g(x) = x - 1 ≤ 0
def lagrangian(x, lam): return x**2 + lam * (x - 1)
# 假设λ=0,检查x=0是否满足
x = 0
g = x -1
lam = 0
print(f"x={x}, g(x)={g}, λg(x)={lam*g}")
if lam * g ==0 and g <=0: print("满足KKT条件")
解释:代码中,若 ,
满足
,且
,符合互补松弛。这说明无约束解
也满足约束,是最优解。LLM 中类似逻辑用于约束下的参数优化。
Q27: 分析投影梯度下降(Projected Gradient Descent)的可行性保持条件
投影梯度下降是啥?
投影梯度下降处理约束优化,先梯度下降更新参数,再将参数投影回可行域。可行性保持条件确保每次迭代后参数仍在可行域内。例如,可行域是 ,更新
后,投影
使
。
可行性保持条件
- 可行域需是凸集(如球体、矩形),保证投影唯一。
- 投影操作
满足
可行域。例如,若可行域
,投影为
。
在 LLM 中的使用
LLM 训练中,对参数范数约束(如 )防止过拟合。每次参数更新后,投影到范数球内。例如,训练 BERT 时,限制权重矩阵范数,投影确保权重在可行域,提升模型稳定性。
代码示例(简单投影梯度下降):
import torch
# 可行域 x ≥0
x = torch.tensor([-1.0], requires_grad=True)
eta = 0.1
f = x**2
f.backward()
with torch.no_grad(): x -= eta * x.grad x_proj = torch.max(torch.zeros(1), x) # 投影
print(f"更新后x: {x.item()}, 投影后x_proj: {x_proj.item()}")
解释:代码中 x 初始为 - 1,梯度下降更新后,投影 确保
,保持可行性。LLM 中类似投影操作,确保参数在约束范围内,优化更稳定。