AI時代系列(2) 機器學習三部曲: 🔹 第二部:《深度學習 —— 神經網路的革命》
54/100 第六週:📌 轉換器架構與注意力機制(Transformers & Attention)🔍
54.Position Encoding 位置編碼 📏 解決沒有順序感的問題!
________________________________________
🎯 單元導讀:
Transformer 架構雖然強大,能一次性處理整個序列,但它沒有內建「順序感」。
不像 RNN 順著時間一步步處理,Transformer 是全並行,因此無法自動理解詞語的排列順序。
為了讓模型「知道誰先誰後」,我們需要 位置編碼(Positional Encoding)——讓詞向量同時包含語意資訊與順序資訊。
________________________________________
📦 一、為什麼需要位置編碼?
模型類型 順序處理 是否有內建順序概念
🧠 RNN/LSTM ✅ 有 ✅ 內建
⚡ Transformer ✅ 並行 ❌ 無順序概念
➡️ 所以必須 額外提供位置信息 給 Transformer,讓它知道:
"the cat sat" ≠ "sat cat the"
________________________________________
✨ 二、位置編碼的兩大方法
✅ 1. 固定式位置編碼(Sinusoidal Positional Encoding)
由《Attention is All You Need》提出,透過三角函數設計使用 正弦(sin)與餘弦(cos)函數 為每個詞的位置編碼,使不同位置的向量呈現週期性變化,並且彼此之間保有相對距離資訊。
📘 特點:
• 不需要訓練參數
• 在不同長度下仍具一般化能力
• 支援「相對位置」的推理(如距離、周期)
________________________________________
✅ 2. 學習式位置編碼(Learnable Position Embedding)
• 每個位置對應一個可訓練的向量,類似詞向量 embedding
• 優點是能自適應數據語境,效果通常較好(如 BERT 採用)
• 缺點是泛化到不同長度序列較差,需預設最大長度
________________________________________
🔁 三、位置編碼如何使用?
✅ 使用步驟:
🧩 1. 將詞嵌入(Word Embedding)與位置編碼進行逐元素相加
假設輸入序列長度為 n,每個詞對應的詞向量為 x₁, x₂, ..., xₙ,位置編碼為 p₁, p₂, ..., pₙ,
則最終輸入為:
ei=xi+pi(對每個詞 i 加上位置向量)
✅ 2. 加入後送入 Transformer Encoder 中
這樣模型在處理每個詞的時候,不只是看到語意向量(embedding),還能知道「這個詞出現在句子的第幾個位置」。
_____________________________________
🔬 四、視覺化例子(Sinusoidal)
假設序列長度為 5,維度為 4,我們會得到一個位置編碼矩陣:
🔍 視覺化例子:Sinusoidal 位置編碼矩陣
假設:
• 📏 序列長度 = 5(共 5 個詞)
• 📐 嵌入維度 = 4
我們將為每個詞的位置 pos∈{0,1,2,3,4}產生一個 4 維的 位置向量 PE[pos],其中每個維度交替使用 sin 和 cos 函數。
________________________________________
📊 五、位置編碼的比較整理
- Sinusoidal
• 是否需訓練:❌ 否 • 可否泛化到長序列:✅ 是 • 用於哪些模型:原始 Transformer、GPT-2 - Learnable
• 是否需訓練:✅ 是 • 可否泛化到長序列:❌ 否(固定長度) • 用於哪些模型:BERT、T5、RoBERTa
________________________________________
💡 六、小結與學習啟示
✅ Transformer 雖可全並行處理,但需位置編碼補上「順序感」
✅ Sinusoidal 編碼支援數學泛化,Learnable 編碼則更靈活
✅ 適當設計位置表示,是語言模型成功理解結構的關鍵一環!
________________________________________
💬 問題挑戰與思考:
1️⃣ 如果不加位置編碼,Transformer 的輸出會發生什麼問題?
ANS:
如果不加入位置編碼,Transformer 雖然能計算詞與詞之間的語意關聯,但卻無法感知詞語的先後順序。例如:「狗追貓」與「貓追狗」會被視為完全一樣的輸入,導致語意理解錯誤。沒有順序概念的話,語法結構就無法被學習,輸出容易失去邏輯、語意混亂。因此,位置編碼是讓模型理解語序與結構的關鍵訊號。
________________________________________
2️⃣ 相對位置(如第3個詞 vs 第5個詞)是否也可以設計注意力權重?
ANS:
可以,這也是進階 Transformer 變體(如 Transformer-XL、T5)發展的方向。這些模型會使用相對位置編碼(Relative Positional Encoding),讓注意力機制不只是關注詞本身,也能考慮兩個詞之間的相對距離與方向(前後、間隔)。
這樣可以更靈活處理長序列,並讓模型學會「某些語意關係通常發生在某個距離內」,例如形容詞常出現在名詞前面。
________________________________________
3️⃣ 如果是圖像、音訊等非語言資料,是否也需要位置編碼?如何設計?
ANS:
是的,Transformer 在處理非語言資料時也必須引入位置資訊,因為像素或聲音的結構也依賴於空間或時間順序。
• 📷 圖像資料(如 Vision Transformer):會將圖片切割成小區塊(patches),並對每個 patch 加上 2D 座標位置編碼(例如行/列位置)
• 🔊 音訊資料:視為時間序列,通常使用與 NLP 類似的一維位置編碼或以頻譜圖形式加上時間+頻率雙軸位置資訊
• 📈 表格、圖結構資料:也可以加入 row/column index 或圖中節點的拓樸資訊當作位置
📌 結論:不同型態的資料也需要專屬設計的「位置引導」,才能讓 Transformer 理解資料的結構邏輯。