Q26: 推導拉格朗日乘子法?
?的 KKT 條件
拉格朗日乘子法與 KKT 條件是啥?
拉格朗日乘子法是解決約束優化問題的利器。比如,想最小化函數?,同時滿足約束?
,就構造拉格朗日函數?
(
?是乘子)。KKT 條件是解這類問題的核心規則,包含以下幾點:
- 梯度為零:
,即?
,表示在最優解處,目標函數梯度與約束函數梯度成比例。
- 原始可行性:
,確保解在約束范圍內。
- 對偶可行性:
,乘子非負。
- 互補松弛:
,意味著要么?
(約束不起作用),要么?
(約束剛好滿足)。
在 LLM 中的使用
在 LLM 的模型壓縮中,既要最小化模型大小?,又要保證精度?
(如精度下降不超過閾值)。通過 KKT 條件找到最優壓縮參數,確保在精度約束下模型最小。例如,剪枝時確定保留哪些連接,使模型變小同時精度達標。
代碼示例(簡單約束優化):
import numpy as np
# 目標函數 f(x) = x2
# 約束 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 中類似投影操作,確保參數在約束范圍內,優化更穩定。