我們來詳細對比一下 Transformer、RNN (循環神經網絡) 和 CNN (卷積神經網絡) 這三種在深度學習中極其重要的架構,并通過具體例子說明它們的區別。
核心區別總結:
-
處理數據的方式:
-
CNN: 專注于局部特征和空間/時間模式。通過卷積核在輸入數據(如圖像的像素網格、文本的詞序列)上滑動,提取局部特征(如邊緣、紋理、短語)。
-
RNN: 專注于序列順序和時間依賴性。按順序處理輸入(一個時間步一個時間步),并維護一個隱藏狀態來傳遞之前步驟的信息。擅長建模序列中元素間的時間依賴關系。
-
Transformer: 專注于全局依賴關系和并行處理。利用自注意力機制 (Self-Attention) 計算序列中所有元素(詞/像素/音符)之間的關聯強度,無論它們相距多遠。能夠同時處理整個序列。
-
-
依賴關系建模:
-
CNN: 主要捕獲局部依賴關系(鄰近元素之間的關系)。通過堆疊層可以捕獲更長距離的依賴,但效率較低且路徑較長。
-
RNN: 理論上可以捕獲任意長度的依賴關系(通過隱藏狀態傳遞)。但實際上,由于梯度消失/爆炸問題,很難有效學習長距離依賴(序列開頭的信息很難傳遞到結尾)。
-
Transformer: 天生擅長建模長距離依賴。自注意力機制允許序列中的任何元素直接關注序列中的任何其他元素,計算它們之間的相關性權重,一步到位。
-
-
并行化能力:
-
CNN: 高度并行化。同一層的不同卷積核可以在輸入的不同部分同時計算。
-
RNN: 順序處理,并行化困難。計算第
t
步必須等待第t-1
步完成(因為依賴隱藏狀態h_{t-1}
)。 -
Transformer: 高度并行化。序列中的所有元素都可以通過自注意力機制同時計算其與其他所有元素的關系。
-
-
位置信息處理:
-
CNN: 通過卷積核的滑動隱含地捕獲位置信息(局部順序)。池化操作會丟失精確位置。
-
RNN: 天然地通過處理順序捕獲位置信息(先處理第1個詞,再處理第2個詞...)。
-
Transformer: 需要顯式編碼。因為自注意力機制本身是排列不變的(打亂輸入順序,輸出關系不變),所以必須通過位置編碼 (Positional Encoding) 將元素的順序信息顯式注入到輸入嵌入中。
-
詳細舉例說明:機器翻譯任務 - 將英文句子 "I love you" 翻譯成中文 "我愛你"。
假設每個詞都被表示為一個向量(詞嵌入)。
-
CNN 的處理方式:
-
將句子視為一個 1D 網格(詞序列)。
-
使用多個不同寬度的卷積核(比如寬度為 2 和 3)在詞序列上滑動。
-
寬度為2的核:可能捕獲到
("I", "love")
和("love", "you")
這樣的二元組特征。 -
寬度為3的核:可能捕獲到
("I", "love", "you")
這個三元組特征。
-
-
這些卷積核的輸出(特征圖)會被池化(如最大池化),提取最顯著的特征。
-
這些局部特征被送入后續的全連接層或其他層進行預測。
-
關鍵點:
-
CNN 有效地提取了短語級別的局部模式(如
"love you"
)。 -
它很難直接建模 "I" 和 "you" 之間跨越 "love" 的長距離依賴(主謂關系)。這種關系需要堆疊很多層才能間接捕獲。
-
輸出翻譯時,模型主要基于它從局部窗口中學到的模式來預測下一個詞。
-
-
-
RNN (例如 LSTM/GRU) 的處理方式:
-
按順序處理每個詞:
-
處理
"I"
:計算隱藏狀態h1 = f(Embedding("I"), h0)
(h0
通常是零向量)。h1
包含了"I"
的信息。 -
處理
"love"
:計算隱藏狀態h2 = f(Embedding("love"), h1)
。h2
包含了"I"
和"love"
的信息。 -
處理
"you"
:計算隱藏狀態h3 = f(Embedding("you"), h2)
。h3
包含了"I"
、"love"
、"you"
的信息。
-
-
在解碼(生成中文)時,通常使用
h3
作為整個句子的“上下文向量”來初始化解碼器,或者解碼器在生成每個中文詞時都參考h3
(或編碼器的最終狀態)。 -
關鍵點:
-
RNN 顯式地建模了序列順序。
"love"
的處理依賴于"I"
的處理結果 (h1
)。 -
它理論上可以捕獲
"I"
和"you"
的關系,因為h3
包含了所有歷史信息。 -
但是: 在這個短句中是有效的。如果句子非常長(如“The cat that chased the mouse that ate the cheese that... was tired”),
"The cat"
的信息在傳遞到"was tired"
時,經過多層傳遞后可能會嚴重衰減或變形(梯度消失),導致模型難以正確理解主語是誰。 -
處理是順序的,無法并行計算
h1
,h2
,h3
。
-
-
-
Transformer 的處理方式:
-
同時輸入整個句子
["I", "love", "you"]
的詞嵌入向量,并加上位置編碼(例如sin/cos
函數)來指示每個詞的位置(第1個,第2個,第3個)。 -
核心步驟:自注意力機制
-
對于序列中的 每個詞(Query),計算它與序列中 所有詞(Key)的 關聯度分數(通過點積或縮放點積)。
-
將這些分數歸一化(Softmax)得到 注意力權重。
-
用這些權重對序列中所有詞的 值(Value) 進行加權求和,得到該詞的 輸出表示。
-
具體到例子:
-
計算
"I"
的輸出:-
"I"
(Query) 會計算與"I"
(Key),"love"
(Key),"you"
(Key) 的關聯度。 -
可能發現
"I"
與"love"
關系強(主語-動詞),與"you"
關系弱。 -
加權求和:
Output_I = weight_I*Value_I + weight_love*Value_love + weight_you*Value_you
。權重weight_love
最大,所以Output_I
包含了很強的"love"
信息。
-
-
計算
"love"
的輸出:-
"love"
會計算與"I"
,"love"
,"you"
的關聯度。 -
可能發現與
"I"
和"you"
關系都強(主語-動詞-賓語)。 -
Output_love
同時包含了很強的"I"
和"you"
的信息。
-
-
計算
"you"
的輸出:-
"you"
會計算與"I"
,"love"
,"you"
的關聯度。 -
可能發現與
"love"
關系非常強(動詞-賓語),與"I"
關系弱。 -
Output_you
包含了很強的"love"
信息。
-
-
-
這樣,每個詞的輸出表示都融合了序列中所有其他詞的信息,特別是那些與它語義關系密切的詞(由注意力權重決定)。
-
-
這些經過自注意力增強的表示再送入前饋神經網絡進行進一步處理。
-
在解碼時,Transformer 解碼器也使用自注意力(只能關注已生成的詞)和 編碼器-解碼器注意力(關注整個源語言序列)來生成目標詞。
-
關鍵點:
-
直接建模全局依賴:
"I"
的輸出直接包含了它最相關的詞"love"
的信息;"love"
的輸出同時包含了"I"
和"you"
的信息。長距離依賴(如"I"
和"you"
)通過"love"
的橋梁作用(或者它們自己直接計算權重)被有效捕獲。 -
高度并行化: 所有詞的 Query, Key, Value 計算以及注意力權重的計算都可以同時進行。
-
位置編碼至關重要: 沒有它,模型無法區分
"I love you"
和"you love I"
。
-
-
總結表格:
特性 | CNN (卷積神經網絡) | RNN (循環神經網絡) | Transformer |
---|---|---|---|
核心機制 | 卷積核、池化 | 循環單元、隱藏狀態 | 自注意力機制 (Self-Attention) |
擅長建模 | 局部空間/時間模式 (鄰近特征) | 序列順序、短期依賴 | 全局依賴、長距離依賴 |
依賴關系范圍 | 局部 (通過堆疊層可擴展,效率低) | 理論上任意,實踐中長距離困難 | 任意距離,一步到位 |
并行化能力 | 高 (同層卷積核并行) | 低 (順序依賴隱藏狀態) | 非常高 (序列元素并行計算) |
位置信息處理 | 隱含 (通過滑動) | 天然 (通過處理順序) | 顯式 (位置編碼 Positional Enc.) |
主要優勢 | 高效提取局部特征,參數共享,平移不變性 | 天然處理序列,建模時間動態 | 強大建模能力,并行高效,長距離依賴 |
主要劣勢 | 捕獲長距離依賴效率低、困難 | 梯度消失/爆炸,訓練慢 (無法并行),長距離依賴弱 | 計算復雜度高 (O(n2)),需要大量數據 |
典型應用 | 圖像識別、目標檢測、短文本分類 | 時間序列預測、簡單文本生成、語音識別 | 機器翻譯、大語言模型 (LLM)、文本摘要、問答 |
簡單類比:
-
CNN: 像拿著不同放大鏡(卷積核)在照片(輸入)上局部區域仔細查看,找出特定圖案(特征)。
-
RNN: 像一個人逐字閱讀句子,一邊讀一邊在便簽(隱藏狀態)上記下當前的理解,這個理解依賴于之前讀過的內容和之前的筆記。句子太長容易忘記開頭。
-
Transformer: 像把整個句子鋪開在桌上,給每個詞都發一個調查問卷,問它:“你覺得這個句子里的每個詞對你來說有多重要?” 然后每個詞根據收到的所有問卷結果(注意力權重),重新組合一個能反映全局關系的“理解報告”。
總而言之,Transformer 因其強大的全局建模能力和并行性,在處理復雜序列任務(尤其是需要理解長距離依賴的任務如機器翻譯、文本理解)上取得了革命性的成功,成為當前大語言模型(LLM)如 GPT、BERT 等的基石架構。CNN 在圖像和局部模式識別上依然不可替代。RNN 在特定序列任務(尤其短序列或實時流處理)中仍有應用價值,但其重要性已被 Transformer 大幅超越。