完整講解與原文對照 / Full explanation and source comparison
動機:Vanilla SAM 太慢
Vanilla SAM 每步需兩次反向傳播(算 ϵ∗ 一次、在 w+ϵ∗ 再算一次),計算量是標準 SGD 的約兩倍。Efficient SAM(ESAM) [14] 用兩招把成本降下來:Stochastic Weight Perturbation(SWP) 與 Sharpness-sensitive Data Selection(SDS)。此外,原始 SAM 對權重尺度敏感,Adaptive SAM(ASAM) [26] 則讓 sharpness 量測具尺度不變性。
SWP:隨機子集擾動 — 式 (54)
SWP 不對全部 n 個權重做擾動,而是每步抽一個隨機二元遮罩 m=[m1,…,mn]⊤,其中 mi∼i.i.d.Bernoulli(β)(以機率 β 選中第 i 個權重)。用遮罩近似 ϵ∗(w):
ϵ(w)≈β1m⊤ϵ∗(w)(54)
只對被遮罩選中的權重子集計算擾動,大幅減少內層 max 的計算量。關鍵性質:E[ϵ(w)i]=E[ϵ∗(w)i]——期望上與完整 SAM 一致,因 E[mi]=β 且 mi 與 ϵ∗ 獨立。
SDS:只對「銳度敏感」樣本做 SAM — 式 (55)
SWP 省的是權重維度;SDS 則省資料維度——不是整個 mini-batch B 都走 SAM,而是挑出對 sharpness 更敏感的子集:
B+:={(xi,yi)∈B∣L(w+ϵ∗(w))−L(w)>α}(55)
B−:={(xi,yi)∈B∣L(w+ϵ∗(w))−L(w)<α}
B+ 是銳度敏感子集(擾動後損失漲幅超過閾值 α>0);SAM 只對 B+ 計算損失與梯度,樣本數更少、每步更快。
Adaptive SAM:尺度不變的 sharpness — 式 (56)–(57)
原始 SAM 用固定半徑 ρ 約束 ∥ϵ∥p≤ρ。若把權重乘以可逆矩陣 A 做 re-scaling,同一解的 sharpness 數值會改變——優化穩定性與泛化可能受影響。ASAM 引入正規化算子 Tw−1,滿足 TAw−1A=Tw−1(式 56),改為優化自適應 sharpness:
ϵ:∥Tw−1ϵ∥p≤ρmaximize L(w+ϵ)−L(w)(57)
約束改成 ∥Tw−1ϵ∥p≤ρ 而非 ∥ϵ∥p≤ρ。對 scaled 權重 Aw 做變數替換可證:式 (57) 的 sharpness 與權重尺度無關(scale-invariant),而式 (50) 的 regular sharpness 則會隨尺度改變。
三者比較
| 方法 |
解決的問題 |
核心技巧 |
| Vanilla SAM |
找平坦極小值 |
完整 min-max,兩次反傳 |
| ESAM (SWP) |
權重維度計算貴 |
隨機子集擾動,期望不變 |
| ESAM (SDS) |
資料維度計算貴 |
只對 B+ 做 SAM |
| ASAM |
權重 re-scaling 敏感 |
自適應約束 ∥Tw−1ϵ∥p≤ρ |
教授祕笈:ESAM 與 ASAM——遮罩與只挑銳樣本
一句話地圖,一個比喻貫通
主線比喻是「驗屋師傅的兩把省力尺:遮罩抽檢、只驗漏水戶」。KP-13 的 Vanilla SAM 每間房子的每面牆都敲兩遍(兩次反向傳播),工時大約是普通 SGD 的兩倍。Efficient SAM(ESAM)請師傅改用兩招偷懶但不偷工:SWP 是隨機遮罩,只敲一部分牆再按比例放大;SDS 是先輕敲一遍,只對「真的漏水」的樣本做完整 SAM。另外,尺如果不管房子實際大小、永遠用同一把 ρ,量出來的銳度會被權重尺度唬弄——Adaptive SAM(ASAM)就是讓尺跟著房子縮放,sharpness 才具尺度不變性。
鷹架式:先直覺,再符號
先講白話:Vanilla SAM 正確但貴;ESAM 用「少敲幾面牆、少驗幾戶」把成本降下來,ASAM 則修正「同一間屋換個單位制、銳度數字就不一樣」的毛病。
為什麼需要它們?權重有 n 維、一個 mini-batch 有一堆樣本,兩次反傳乘上全維度、全批次,訓練大型網路會痛。SWP 省的是權重維度,SDS 省的是資料維度,ASAM 解的是尺度敏感,三件事不要攪成一鍋。
符號逐個拆(式 54–57)
SWP(Stochastic Weight Perturbation,隨機權重擾動)。每步抽一個二元遮罩 m=(m1,…,mn)⊤,每個 mi 獨立來自 Bernoulli(β)——以機率 β 選中第 i 個權重去擾動。近似(式 54;分量是逐元相乘,再除以 β 把被丟掉的機率補回來):
ϵi(w)≈β1miϵi∗(w).
關鍵性質:E[mi]=β 且 mi 與 ϵ∗ 獨立,所以
E[ϵi]=β1E[mi]E[ϵi∗]=E[ϵi∗].
期望上跟完整 SAM 一樣,只是每步只算子集。
SDS(Sharpness-sensitive Data Selection,銳度敏感資料挑選)。不是整個 mini-batch B 都走第二次反傳,只留擾動後損失漲太多的樣本(式 55):
B+:={(xi,yi)∈B∣L(w+ϵ∗)−L(w)>α}.
α>0 是閾值;B+ 是銳樣本,B− 是漲幅不夠的鈍樣本。SAM 的第二趟損失與梯度只在 B+ 上算。
ASAM(Adaptive SAM)。Vanilla 用固定 ∥ϵ∥p≤ρ。若把權重用可逆矩陣 A 做重新縮放,同一個解的銳度數字會變。ASAM 引入正規化算子 Tw−1,滿足 TAw−1A=Tw−1(式 56),改優化(式 57):
ϵ:∥Tw−1ϵ∥p≤ρmaximize L(w+ϵ)−L(w).
約束從「擾動本身的長度」改成「經 Tw−1 正規化後的長度」,sharpness 對權重尺度不變。
數值真的算一遍:遮罩、銳樣本、尺度尺
接 KP-13 的 ϵ∗=(0.06,0.08,0.10,0.12)(四個權重),取 β=0.5,這一抽的遮罩 m=(1,0,1,0)——只敲第 1、第 3 面牆。SWP 擾動:
ϵ=0.51(0.06,0,0.10,0)=(0.12,0,0.20,0).
被選中的分量乘 2、沒選中的變 0。長期下來,因為選中機率正好是 1/2,期望仍回到 (0.06,0.08,0.10,0.12)。
同一 mini-batch 四筆樣本,擾動前後損失差與 α=0.10:
| 樣本 | L(w+ϵ∗)−L(w) | 跟 α=0.10 比 | 進不進 B+ |
| 1 | 0.03 | 小於 | 否(鈍) |
| 2 | 0.18 | 大於 | 是(銳) |
| 3 | 0.07 | 小於 | 否(鈍) |
| 4 | 0.25 | 大於 | 是(銳) |
第二次反傳只打 2、4 兩筆,資料成本砍半。師傅的邏輯很生活:漏水的戶才值得做完整驗屋,本來就不漏的敲了也是浪費工。
ASAM 用一維函數看尺度。令 L(w)=(w−2)2,在谷底 w=2 處 L=0。Vanilla 取 ∣ε∣≤ρ=0.1,銳度 =0.12=0.01。把參數改寫成 w~=w/2(同一個函數變成 L~(w~)=4(w~−1)2),在對應點 w~=1 再用同一個 ρ=0.1,銳度變成 4×0.01=0.04——屋沒變,尺讀數卻跳了四倍。若 Tw=∣w∣,ASAM 允許 ∣ε∣≤ρ∣w∣:在 w=2 可擾 0.2,銳度 0.04;在 w~=1 可擾 0.1,銳度也是 0.04。尺跟著房子縮,數字才比得了。
懸念與反轉
你大概會覺得:「隨機丟掉一半權重、再丟掉一半樣本,這不就變粗糙了嗎?」反轉在於:SWP 不是亂丟,是無偏抽樣——乘 1/β 正是為了讓期望對得上完整 ϵ∗;SDS 也不是隨機丟資料,是把預算花在「真的尖」的樣本上。真正會讓銳度失真的,反而是你以為最無害的那件事:把權重整體放大縮小。Vanilla 的固定 ρ 球會被尺度愚弄,ASAM 才對症。
舉一反三的出口
把驗屋換成工廠抽檢:一千顆螺絲不必顆顆用扭力板手(Vanilla),可以隨機抽 β 比例再加權還原(SWP),也可以先用聽音篩出「共振異常」的才做全檢(SDS);量測公差還得依螺絲直徑自動調整(ASAM)。換一組數自己算:β=0.25,ϵ∗=(0.8,0.4),m=(0,1),寫出 ϵ;並說明為什麼 E[ϵ2] 仍應等於 0.4。
常見誤解點名
- 誤解「SWP 的遮罩是高斯雜訊」。mi 是 Bernoulli(β) 的 0/1,不是 U(0,1) 也不是高斯。
- 誤解「SDS 的 B+ 是損失最低或驗證集」。定義是擾動後損失增量大於 α,跟「好不好分」不是同一件事。
- 誤解「ASAM 少做一次反傳、或取消了 min-max」。它改的是擾動球的形狀(尺度不變),不是把 SAM 變回普通 SGD。
- 誤解「β 越小越好」。β 太小,單步變異大,期望無偏不代表每一步都準。
跨知識點掛勾
- KP-13:Vanilla SAM 的 ϵ∗ 與兩次反傳;本節是同一具引擎的省油與校準套件。
- KP-8:SDS 作用在 mini-batch 上,先有 B 才切得出 B+。
- KP-7:ESAM 仍是隨機梯度家族,只是梯度來自擾動點與子集。
- KP-12:大家都在追平坦極小值;ASAM 提醒你「平坦」的數字會被參數尺度汙染。
換句話重述
ESAM 與 ASAM 一句話重講:SWP 用 Bernoulli 遮罩只擾一部分權重並除以 β 保持期望無偏,SDS 只對損失漲幅超過 α 的銳樣本做 SAM,ASAM 把 ∥ϵ∥≤ρ 改成 ∥Tw−1ϵ∥≤ρ 讓銳度不隨權重縮放而變——三招分別砍維度成本、砍資料成本、校正尺。
一句收尾口訣
「遮罩抽牆補 1/β,銳樣本才驗第二遍;尺要跟著權重縮,否則銳度被尺度騙。」