序列模型與Transformer

自注意力(self-attention)

/ self uh-TEN-shun /

自注意力,是把注意力轉向內部:序列中的每個詞都去看同一序列裡的其他每個詞——包括它自己——以構建對自身含義更豐富的理解。普通注意力或許是讓翻譯的輸出回望輸入,而自注意力則讓輸入審視它自身。每個位置都在問:「在這裡其他人都在的前提下,我在這個語境中究竟該是什麼意思?」

在機制上,每個詞從自己的向量裡產出三樣東西:一個查詢(query,我在找什麼?)、一個鍵(key,我能提供什麼?)、一個值(value,我要傳遞的內容是什麼?)。一個詞的查詢會與每個詞的鍵相比較,得到相關度分數;這些分數變成權重,於是該詞收集到一份對所有人之值的加權調和。結果就是:「它」的表示可以吸收來自「獎盃」的資訊,「岸」的表示可以吸收來自「河」的資訊,如此等等——而這一切對每個位置都是並行計算、一趟完成的。

這是 Transformer 的發動機艙。因為所有位置是同時相互注意、而非從左到右逐字行進,自注意力高度並行,在現代硬體上訓練很快;它還讓相隔很遠的詞能直接相互影響,而不必經過一長串中間步驟。誠實的代價在於規模:讓每個詞都與其他每個詞比較,意味著計算量隨序列長度的平方增長,這正是超長輸入至今仍昂貴的原因,也是為何大量工程心血都花在馴服這一代價上。

在「那隻動物沒有過馬路,因為牠太累了」中,自注意力讓「牠」的向量從「動物」(而非「馬路」)那裡汲取大部分含義。把「累」換成「寬」,同一機制就會把「牠」轉向「馬路」。

每個詞的含義,都是從整句話裡一次性重新調和出來的。

自注意力本身沒有詞序觀念——在它眼裡,一句話就是一袋東西。若不加幫助,「狗咬人」和「人咬狗」看起來一模一樣。這份幫助來自位置編碼,這也是為何這兩個概念總是結伴出現。

又稱
intra-attention自注意力intra-sentence attention