G4.3 句子的順序有意義,還要忽略排列嗎?
換了先後,意思也換了
「我喜歡你」與「你喜歡我」使用同樣的詞,但說的是不同的事。如果把詞只當成沒有順序的集合,再用 invariant pooling 讀出一個答案,這兩句就無法區分。
這不是 G3 的排列要求出錯,而是任務不同了。地標表的第幾列沒有意義;句子裡誰先出現,卻是內容的一部分。
所以問題不是要不要保留 symmetry,而是這次的變換究竟有沒有改變資料本身的意思。
把先後寫進輸入
前面的 只有各 token 的 content features。要讓模型知道語意位置 ,可以另外加入同維度的向量 :
這就是 positional encoding。它可以是可學的 embedding,也可以是固定函數;Vaswani 等人 [1] 使用的其中一種寫法是
不同 channels 使用不同頻率,讓同一個 token 在不同位置收到不同訊號。我們不必先認為 sinusoidal 是唯一選擇;這裡需要的是把位置提供給模型。
兩種 permutation,不是同一個問題
若真的把詞換到新的語意位置,content rows 變成 ,位置表卻仍表示第一個、第二個、第三個位置。因此新輸入是
而不是原輸入的共同重排
兩者通常不同,所以完整的 不再對「只搬 content、位置固定」保證 permutation equivariance。這讓模型有機會區分換序後的句子,不保證訓練後一定理解它們。
另一種情況只是把資料存放的 rows 換順序:每個 token 連同自己的語意位置一起搬動。這時輸入是 ,block 的排列證明仍成立。像把有頁碼的書頁換個存放順序,頁碼沒有改;與重新替每頁編一個頁碼不同。
知道位置,還不等於限制它看哪裡
若任務是預測下一個 token,訓練時不能偷看未來答案。單靠 不會禁止讀取後面的 keys,所以還要限制參考範圍。
令 是加在 logits 上的 causal mask:
,所以未來位置的權重為零。把輸入與預測 labels 錯開一個位置後,第 列便可用已知前文預測下一個 token [1]。
Positional encoding 提供位置;causal mask 決定哪些資訊可見。 它們不是同一個功能,也不是所有 Transformer 任務都必須使用 causal mask。
補充固定 causal mask 不保留任意 content shuffle 的保證
三角形 mask 依真實的先後建立。若只把詞換序,卻仍沿用同一個三角形表,「誰能看誰」也改了。若只是更換儲存編號,則應把 mask 一起搬成 ;新的矩陣未必在儲存 index 上看起來仍是三角形,但表示的是同一份先後關係。
課堂提問
沒有 positional encoding,就能說所有 Transformer 都完全不知道順序嗎?
先想一想,再展開看整理後的答案
不能。前面證明的是沒有固定順序附加資訊的 self-attention block。Causal mask、其他關係資訊或依序號取值的 readout 也可能帶入順序。若要說整個模型忽略順序,必須把這些部分一起檢查。
動手看一次
切到「固定位置」後只重排 content,defect 通常不再是零。再選「資訊一起搬」,位置與 token 共同重排,檢查對齊後的輸出。Causal 模式則另外檢查可見關係。