JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

自適應運算:只在需要處花力氣

靜態壓縮對每個輸入都縮小同一個模型。自適應方法——提前退出、深度混合、詞元合併——讓容易的輸入在執行時花的成本比困難的少。

並非每個輸入都該享有同等運算

至此所有方法都讓模型一律變便宜。但輸入並不一致:辨識一面空白牆壁微不足道,解析一個擁擠的街景卻很難,然而靜態網路對兩者花費相同的 FLOPs。自適應(條件式)運算打破了這種對稱——它讓網路按輸入、甚至按詞元,決定要執行自己的多少。它的承諾是降低平均推論成本,同時不壓低困難情況的天花板。

提前退出網路:有把握時就停

提前退出網路(early-exit networks)在中間層接上輕量的分類「頭」。當輸入往上流動,每個退出頭都會產生一個帶信心分數的暫定預測;若某個早期的頭夠有信心,推論就在此停止、跳過所有剩餘層。容易的輸入提早離開、只花完整深度的一小部分;困難的輸入則一路流到頂端。

\hat{y}=g_\ell(h_\ell),\qquad \text{exit at layer }\ell \iff \max_{c}\,[\hat{y}]_c \ge \tau

提前退出:在第一个最高类置信度超过阈值 τ 的分类头处直接输出预测。

h = embed(x)
for layer, exit_head in zip(layers, heads):
    h = layer(h)
    p = exit_head(h)
    if confidence(p) > threshold:
        return p          # leave early, skip the rest
return p                  # used all layers
提前退出:一旦某個中間頭夠有信心就回傳。

設計上的張力在於信心閾值:太低會在錯誤答案上退出,太高則永遠省不到。校準退出頭很重要,而把它們訓練好——常是把最終層的行為蒸餾進早期頭——才是讓這技術在實務上划算的關鍵。

深度混合:每個詞元一份運算預算

提前退出較為粗糙——整個輸入一起離開。深度混合(mixture-of-depths, MoD)更為精細:在每一層,一個小型路由器只挑選最有用的前 k 個詞元,交由該層的注意力與前饋區塊處理;其餘的則透過殘差路徑完全跳過此層。在整個序列上,模型逐層把運算預算花在需要它的詞元上,同時維持固定且可預測的總成本。

y_i=\begin{cases}x_i+f_\ell(x_i),& i\in\mathcal{S}_\ell\\ x_i,& \text{otherwise}\end{cases}\qquad \mathcal{S}_\ell=\text{top-}k\big(r_\ell(x_1),\dots,r_\ell(x_N)\big)

深度混合:只有路由器选出的前 k 个词元进入该层,其余词元经由残差路径跳过。

若這聽起來像專家混合(mixture-of-experts)的近親,沒錯——兩者都是「條件式路由」。差別在於:專家混合把詞元路由給數個平行專家之一(更多參數、相同深度),而深度混合則把詞元路由「繞過」某一層(相同參數、可變深度)。它們是動態運算的互補軸,現代設計有時兩者並用。

詞元合併:縮短序列,而非縮小網路

Transformer 的成本隨序列長度增長——在注意力中是二次方。詞元合併(token merging, ToMe)直接攻擊這個長度:它在層與層之間找出表示高度相似的詞元對,將其平均合併為一個,隨網路加深逐步縮短序列。在視覺 transformer(vision transformer)中,相鄰的天空或皮膚色塊幾乎是冗餘的,因此合併它們幾乎不損準確度,卻移除了真實的工作量。

C_{\mathrm{attn}}=\mathcal{O}(N^2 d)\ \xrightarrow{\,N\to rN,\ r<1\,}\ \mathcal{O}(r^2 N^2 d)

词元合并为何有效:注意力开销随序列长度呈平方增长,将 N 缩减为 rN 可把开销降为原来的 r² 倍。

詞元合併可愛之處在於,它往往「不需重訓」——你可以把它直接放進一個預訓練模型,在推論時以可調的幅度,用準確度換速度。它是剪枝在序列軸上的手足:不是移除權重,而是移除冗餘的「位置」。