2. 注意力機制: 破局者
在上篇的實驗程式碼中,核心的邏輯是這一行:
input_seq = input_seq[1:] + [next_char_id]
- AI 讀了 3 個字 => 馬上吐出 1 個字。
- 接著,把新字加進去,再讀 3 個字 => 再吐出 1 個字。
不論你讓它吐出多長的句子,在它的運作機制裡,「進去幾個字、出來幾個字」的比例是死死固定住的!
如果把這種「一進一出」的 RNN 拿來做「英翻中」,會發生什麼事呢?
假設翻譯:"What is your name?"(4 個字)中文是:「你叫什麼名字?」(5 個字)
AI 讀入 "What" RNN 被逼著當場要吐出中文,最終翻出來的結果就會變成:「什麼 是 你的 名字」(剛學中文的老外)。
在同一個時間步(Time Step)裡,輸入一個 Token,就必須對應輸出一個 Token。你輸入的序列有多長,產出的序列就必須等長(或是呈固定比例),兩者在時間軸上是同步綁死的(Synchronous)。
*註 以下內文圖片皆出自於Recurrent Neural Networks (RNNs): A gentle Introduction and Overview這篇論文
Seq2Seq
為了解決「在同一個時間步(Time Step)裡,輸入一個 Token,就必須對應輸出一個 Token。」這種「輸入與輸出長度不對等、語序不同」的難題,Google 的團隊在 2014 年提出了一個革命性的框架——Seq2Seq。
Seq2Seq 的核心思想非常優雅,它把神經網路拆成了兩個部分:編碼器(Encoder) 與 解碼器(Decoder)。

1. 編碼器(Encoder):負責「聽懂並打包」
會負責把輸入的整句英文(源語言)一字不漏地讀完,就像個情報員,讀到 "I"、"love"、"learning"…。每讀一個字,它就把資訊壓縮進隱藏狀態(Hidden State)裡。
當整句英文讀完、遇到句尾符號時,Encoder 會把前面所有吸收到的精華,壓縮提煉成一個最終的固定大小向量,叫做 Context Vector(也有人叫它 Thought Vector,思想向量)。
像是口譯官的筆記!
2. 解碼器(Decoder):負責「看圖說故事」
負責把那張密碼小紙條(Context Vector),翻譯成目標語言(中文)。
一開始,Decoder 的腦袋是空的,但它拿到了 Encoder 遞過來的那張密碼小紙條作為它的初始隱藏狀態(初始記憶)。
接著,工程師會餵給它一個開頭訊號 <SOS>(Start of Sentence,開始符號)。Decoder 看著小紙條,大腦矩陣一算,吐出第一個字:"我"。接著它會把自己剛剛吐出的 "我",當作下一個時間點的輸入,結合手中的小紙條,繼續往下猜:"喜歡" → "學習"… 一直猜到它自己吐出 <EOS>(End of Sentence,結束符號)才收工。

用剛剛的"What is your name?"演示一次:
- Encoder 啟動:
- t1: 讀入
"What"→ 稍微記住這是個疑問句。 - t2: 讀入
"is"→ 順向傳遞。 - t3, t4: 讀入
"your"、"name"→ 讀完句尾。 - 產生 Context Vector: 矩陣裡塞滿了「對方的名字、疑問句、現在式」的抽象語義。Encoder 功成身退,丟給 Decoder。
- t1: 讀入
- Decoder 啟動:
- 雖然英文開頭是
"What"(什麼),但 Decoder 融會貫通了整個context vector的語義後,它知道中文的習慣要先提主詞,於是第一個字吐出:"你"。 - 接著把
"你"作為輸入,配合記憶,下一個字吐出:"叫"→"什麼"→"名字"。 - 直到
<EOS>,完美通關!
- 雖然英文開頭是
Seq2Seq 的出現直接拯救了當年的 Google 翻譯,讓機器翻譯跨入了一個全新的時代。但很快地,工程師在實務上又撞上了另一面厚重的牆 – 「資訊瓶頸(Information Bottleneck)」:
不論你輸入的英文句子有多長——是 5 個字的短句,還是 100 個字長篇大論。Encoder 最終都必須、強迫、只能把所有的資訊壓縮進那個「固定大小」的 Context Vector(小紙條) 裡面。
當句子長達 100 個字時,那張小紙條根本塞不下這麼多精華。Encoder 顧得了開頭就顧不了結尾,導致後面的長句子,Decoder 拿到的紙條資訊早就模糊不清了。這讓 AI 面對長文本時,翻譯品質直接雪崩式暴跌。
Attention Mechanism
為了打破這個『小紙條』的資訊瓶頸,科學家們想出了一個瘋狂的idea:『既然紙條太小,那乾脆不讓 Decoder 死背紙條了!讓 Decoder 在翻譯每個字的時候,自己動態去回頭看 Encoder 的哪些字最重要!』——這,就是引爆現代大模型革命的終極技術:注意力機制(Attention Mechanism)
普通的 Seq2Seq 在 Decoder 翻譯階段時,Encoder 早就已經下班收工了,Decoder 只能孤單地看著那張 Context Vector猜測。而加上 Attention 之後,Encoder 每個隱藏狀態(抽象語意)都會被妥善保存下來,做成一本「歷史紀錄簿」。
當 Decoder 準備吐出下一個字時,便會拿著自己當下的狀態,去跟這本紀錄簿進行對比、計算權重,這就叫「對焦 focus 」。

注意力機制中最重要的三個變數分別是 Q、K、V:
- Q(Query,查詢): 這是Decoder 發出的。代表「我此時此刻正準備要吐出下一個中文,我需要什麼樣的資訊?」
- K(Key,鍵值): 這是 Encoder 的歷史紀錄。代表「我是原文裡的某個字,我這裡包含的是哪種語義特徵?」
- V(Value,數值): 也是 Encoder 的歷史紀錄。代表「如果我對你有幫助,我真正要傳遞給你的完整資訊是什麼?」
舉個例子,你去蝦皮搜尋商品:
- 你在搜尋列輸入:
「抗噪藍牙耳機」→ 這就是 Q。 - 系統後台有成千上萬件商品的標題和標籤 → 這就是 K。
- 系統會拿你的 Q 去跟所有的 K 做相似度配對(計算 點積 Dot Product),算出來發現某款耳機配對率高達 95%,某條抹布配對率 0% → 這就是 Attention Score(注意力權重)。
- 最後,系統把這些商品真正的詳細規格和購買連結 → V,按照剛才算出來的百分比加權打包,呈現在你眼前。這就是 Attention Output!
演示:AI 怎麼一邊翻譯一邊對焦?
繼續沿用開頭的 "What is your name?" :
此時,Encoder 已經把四個字的記憶 (K1, V1) 到 (K1, V4) 記在紀錄簿上了。
- Decoder 準備吐出第一個字(此時 Q1 出動):
- Q1(我想吐出中文開頭)回頭去和紀錄簿裡所有的K 做配對。
- 比對結果:Q1 發現跟 K3(
"your")的靈魂最契合,關聯度高達 80%!跟 K1("What")只有 10%。 - 加權打包: AI 把 80% 的注意力放在
"your"上,順利吐出第一個字:「你」。
- Decoder 準備吐出第三個字(此時 Q3 出動):
- 此時 Decoder 已經吐出了「你叫」,它現在的狀態 Q3 代表:「我接下來想知道這句問句的核心疑問詞是什麼?」
- Q3 再次回頭去翻紀錄簿,這一次,它跟 K1(
"What")的配對率飆到了 90%! - 加權打包: 完美的把
"What"的精華提煉出來,順利吐出:「什麼」。
結

- 徹底打破資訊瓶頸:Decoder 翻到第 100 個字時,依然可以透過 Attention 直接回頭去調閱 Encoder 第 1 個字的完整 V(Value)。記憶力不再受限於那張小紙條,長文本翻譯品質直接起死回生 !!
- 具備驚人的「可解釋性」(Explainability):以前的 RNN 是個黑盒子,沒人知道隱藏狀態裡到底裝了什麼。但 Attention 機制算出了清清楚楚的「權重百分比(0.0 ~ 1.0)」。
工程師可以直接把這個權重畫成矩陣熱點圖(Heatmap),親眼看到 AI 在翻「什麼」的時候眼睛真的盯著"What"看。這在學術上是非常震撼的視覺證據。 - Attention 證明了一件事——想要連動前後文的記憶,根本不需要靠 RNN 一站一站傳話!直接用 Q, K, V 進行跨時空的矩陣矩陣相乘,就能瞬間抓到全域的關聯!
