並非每個輸入都該享有同等運算
至此所有方法都讓模型一律變便宜。但輸入並不一致:辨識一面空白牆壁微不足道,解析一個擁擠的街景卻很難,然而靜態網路對兩者花費相同的 FLOPs。自適應(條件式)運算打破了這種對稱——它讓網路按輸入、甚至按詞元,決定要執行自己的多少。它的承諾是降低平均推論成本,同時不壓低困難情況的天花板。
提前退出網路:有把握時就停
提前退出網路(early-exit networks)在中間層接上輕量的分類「頭」。當輸入往上流動,每個退出頭都會產生一個帶信心分數的暫定預測;若某個早期的頭夠有信心,推論就在此停止、跳過所有剩餘層。容易的輸入提早離開、只花完整深度的一小部分;困難的輸入則一路流到頂端。
提前退出:在第一个最高类置信度超过阈值 τ 的分类头处直接输出预测。
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 個詞元,交由該層的注意力與前饋區塊處理;其餘的則透過殘差路徑完全跳過此層。在整個序列上,模型逐層把運算預算花在需要它的詞元上,同時維持固定且可預測的總成本。
深度混合:只有路由器选出的前 k 个词元进入该层,其余词元经由残差路径跳过。
若這聽起來像專家混合(mixture-of-experts)的近親,沒錯——兩者都是「條件式路由」。差別在於:專家混合把詞元路由給數個平行專家之一(更多參數、相同深度),而深度混合則把詞元路由「繞過」某一層(相同參數、可變深度)。它們是動態運算的互補軸,現代設計有時兩者並用。
詞元合併:縮短序列,而非縮小網路
Transformer 的成本隨序列長度增長——在注意力中是二次方。詞元合併(token merging, ToMe)直接攻擊這個長度:它在層與層之間找出表示高度相似的詞元對,將其平均合併為一個,隨網路加深逐步縮短序列。在視覺 transformer(vision transformer)中,相鄰的天空或皮膚色塊幾乎是冗餘的,因此合併它們幾乎不損準確度,卻移除了真實的工作量。
词元合并为何有效:注意力开销随序列长度呈平方增长,将 N 缩减为 rN 可把开销降为原来的 r² 倍。
詞元合併可愛之處在於,它往往「不需重訓」——你可以把它直接放進一個預訓練模型,在推論時以可調的幅度,用準確度換速度。它是剪枝在序列軸上的手足:不是移除權重,而是移除冗餘的「位置」。