編碼器-解碼器架構
課程概述
Encoder-Decoder 是處理「輸入一段內容,再產出另一段內容」的經典架構。翻譯、摘要、語音轉文字,甚至圖片說明,都可以用這個角度來理解。這堂課會先把 Encoder 和 Decoder 的分工講清楚,再比較訓練與實際生成為什麼不太一樣,最後接回 Transformer。

Attention 解除了早期 RNN 把整段來源壓成單一向量的瓶頸。Transformer 訓練時可用完整的正確目標序列一次計算多個位置;真正生成時沒有後面的答案,仍得把自己的預測接回下一步。
你將學到
- 描述 Encoder-Decoder 架構的整體資料流向
- 解釋 Encoder 如何把輸入序列轉成可供 Decoder 讀取的表徵
- 理解 Decoder 如何利用上下文表徵逐步生成輸出序列
- 比較 RNN-based 與 Transformer-based 的 Encoder-Decoder 差異
核心概念
Seq2Seq 問題的本質
很多任務都能看成 Seq2Seq:中文翻成英文、長文章濃縮成摘要、語音轉成逐字稿,或把圖片轉成一句描述。輸入與輸出不必等長,輸出的某個位置也可能需要參考來源的好幾個地方。這正是「先建立來源表徵,再依需要生成」這種分工派得上用場的地方。
Encoder 的角色
Encoder 負責把原始輸入轉成 Decoder 能使用的表徵。早期 RNN 架構常以最後的隱藏狀態當摘要,資訊容易卡在固定大小的瓶頸;加入 Attention 後,Decoder 可以讀取 Encoder 在各位置留下的狀態。Transformer Encoder 則直接替每個輸入 Token 建立上下文化表徵,讓來源細節保留得更完整。
Decoder 的角色
Decoder 負責產生輸出。自迴歸 Decoder 每一步都根據已出現的目標 Token,以及 Encoder 提供的來源表徵,預測下一個 Token。Cross-Attention 是兩端之間的橋樑;生成則會持續到結束標記、長度上限或其他停止條件。若使用 Greedy、Beam Search 或取樣,改變的是「下一步怎麼選」,不是 Encoder 的內容。
Teacher Forcing 訓練技巧
訓練時,Decoder 通常會看到向右位移一格的正確目標序列,並學著預測每個位置的下一個 Token,這就是 Teacher Forcing。對 Transformer 來說,因果遮罩會阻止每個位置偷看未來答案,因此多個位置仍能一起計算;RNN Decoder 即使用 Teacher Forcing,時間步本身還是循序的。實際生成時只能接回模型自己的預測,所以前一步出錯可能一路影響下去,這個落差常被稱為 Exposure Bias。
從 RNN 到 Transformer 的演進
早期 Encoder-Decoder 多用 RNN 或 LSTM,序列得一個時間步一個時間步處理。Transformer 改用 Self-Attention、前饋網路與殘差連接:Encoder 整理來源,Decoder 用 Masked Self-Attention 處理目標,再用 Cross-Attention 讀取來源。訓練時平行度提高很多,但自迴歸推論仍要逐 Token 產生,不能說整個流程都完全平行。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
%%{init: {"flowchart": {"curve": "linear", "nodeSpacing": 24, "rankSpacing": 32}}}%%
flowchart TB
SOURCE["來源序列"] --> ENCODER["Encoder 建立<br/>各位置的上下文表徵"]
ENCODER --> MODE{"現在是訓練<br/>還是實際生成?"}
subgraph TRAIN["訓練:答案已知"]
direction TB
SHIFT["把正確目標<br/>序列右移一格"] --> MASK["套用因果遮罩<br/>不能偷看未來 Token"]
MASK --> PREDICT_ALL["Transformer<br/>一次預測<br/>多個目標位置"]
PREDICT_ALL --> LOSS["與正確答案計算 Loss<br/>再更新參數"]
end
MODE -->|"訓練"| SHIFT
ENCODER --> MASK
subgraph INFER["推論:下一個答案未知"]
direction TB
START["從起始 Token<br/>或既有文字開始"] --> NEXT["預測下一個 Token"]
NEXT --> PICK["依 Greedy、Beam<br/>或取樣策略選一個"]
PICK --> STOP{"遇到 EOS 或上限?"}
STOP -->|"還沒"| APPEND["把結果接回輸入"]
APPEND --> NEXT
STOP -->|"是"| RESULT["輸出完整序列"]
end
MODE -->|"推論"| START
ENCODER --> NEXT 實作重點
- 畫出完整資料流,分別標註 Encoder Self-Attention、Decoder Masked Self-Attention 與 Cross-Attention
- 用 TensorFlow 建構一個小型 Seq2Seq 模型,分開實作訓練路徑與逐步生成路徑
- 比較有無 Attention 機制的 Encoder-Decoder 在長序列翻譯上的表現差異
- 用同一組模型比較 Greedy、Beam Search 與取樣,記錄品質、延遲和輸出多樣性
課程導讀
課程連結:Encoder-Decoder Architecture — Google Skills
課程頁目前列的是概覽影片、Lab Walkthrough 影片、測驗與 Lab Resources 連結,沒有另外列出動手 Lab。依課程說明,Lab Walkthrough 會示範用 TensorFlow 從頭寫出一個簡單的 Encoder-Decoder 來生成詩句。看架構圖時先順著來源資料走一遍,再把訓練和推論分成兩條路看;這樣比較不會把 Teacher Forcing 誤解成正式生成時也能看到正確答案。最後再回頭確認 Cross-Attention 的 Query 來自哪裡、Key 和 Value 又來自哪裡。
延伸學習
- 注意力機制 — Attention 的詳細原理
- Transformer 與 BERT 模型 — 完整的 Transformer 實作
- 圖片說明生成模型 — Encoder-Decoder 在視覺任務中的應用
讀完後,留一個學習紀錄
試著用自己的話說出一個重點,以及你會如何運用。實作文章請先核對結果與清理資源,再標記為讀完。
文章進度以你確認讀完的標記為準,可隨時取消。舊版造訪紀錄保留,但不計入讀完;這份自評不代表已掌握內容。