AI時代系列(2) 機器學習三部曲: 🔹 第二部:《深度學習 —— 神經網路的革命》
60/100 第六週:📌 轉換器架構與注意力機制(Transformers & Attention)🔍
60.小結與測驗:用 Transformer 訓練中英文翻譯模型 🌐 自己打造多語言橋樑!
____________________________________________________
🧱 單元小結總覽(51~59):掌握 Transformer 的核心力量!
51 🚀為什麼要用 Transformer?➜ 擺脫 RNN 訓練瓶頸,專為處理長距序列設計的注意力架構
52 ✨Attention 機制原理 ➜ 模仿人類「關注重點」能力,Q/K/V 機制捕捉關聯
53 🧠Self-Attention ➜ 一句話內每個詞都能互相理解語境,是語言模型的語意底層
54 📏位置編碼 ➜ 補足 Transformer 不具時間性的缺陷,加入順序感
55 🏗Transformer 架構總覽 ➜ Encoder-Decoder 架構,多頭注意力 + 前饋層 + 殘差
56 🎯多頭注意力 ➜ 同時從多角度觀察資料,讓模型理解更全面
57 ✉️Encoder-Decoder 架構 ➜ 輸入語意表/ 輸出語言生成,是翻譯/摘要核心
58 🌪LayerNorm + 訓練技巧 ➜ 穩定每層輸出,促進深度網路收斂與泛化
59 🌍應用實例翻譯、摘要、聊天機器人 ➜ 一個架構橫掃 NLP 任務,從語言到多模態皆適用
________________________________________
✅ 單選測驗題組(含解析)
________________________________________
1️⃣ 為什麼 Transformer 能夠比 RNN 更有效處理長距依賴?
A. 因為它使用 CNN 結構
✅ B. 因為它使用自注意力可直接關注任意位置
C. 因為它沒有參數
D. 因為它只處理短語
📘 解析:
RNN 是一步步處理的結構,長距離會造成梯度消失,而 Transformer 的 Attention 可直接比較序列中任意兩詞的關係。
________________________________________
2️⃣ Self-Attention 的最大優勢是什麼?
A. 它只能觀察前一個詞
B. 它在計算上很簡單
✅ C. 它讓每個詞都能考慮整句話中所有詞的語意關係
D. 它是 RNN 的變體
📘 解析:
Self-Attention 允許每個位置關注所有其他位置,是語境理解的關鍵。
________________________________________
3️⃣ 為什麼需要 Position Encoding?
A. 為了減少運算時間
✅ B. 因為 Transformer 是全並行處理,沒有自然順序感
C. 因為用不到語意資訊
D. 為了讓模型變輕量化
📘 解析:
Transformer 是平行處理架構,無法像 RNN 一樣感知先後,因此需額外加入順序資訊。
________________________________________
4️⃣ 多頭注意力的目的為何?
A. 增加訓練資料量
✅ B. 從不同角度捕捉語意關係
C. 減少層數
D. 防止過擬合
📘 解析:
多頭 Attention 是將注意力分成多個視角並行運算,提升模型語意理解能力。
________________________________________
5️⃣ 哪些任務最常使用 Encoder-Decoder 架構?
A. 圖像分類
✅ B. 翻譯與摘要
C. 聲音辨識
D. 分類與排序
📘 解析:
Encoder-Decoder 架構的特點是從一種序列映射到另一種序列,如語言翻譯、文章摘要等。
________________________________________
📘 問答題 1
問題:Transformer 為何能有效解決 RNN 在處理長距序列中遇到的「梯度消失」與「資訊遺失」問題?請說明其核心機制。
✅ 建議答案:
Transformer 採用 Self-Attention 機制,可以讓每個詞的位置直接與句中所有其他詞建立關聯,而非像 RNN 一樣逐步傳遞。這種「任意位置直接互動」的特性消除了隱藏狀態傳遞所造成的訊息遺失問題。
此外,Transformer 支援 全並行計算,避免了時間步長積累誤差,也沒有連續乘法造成的梯度消失風險,因此更適合處理長距依賴的序列資料。
________________________________________
📘 問答題 2
問題:請說明在 Transformer 架構中,Encoder 與 Decoder 如何協同工作完成翻譯任務?包括它們各自的任務與相互連結方式。
✅ 建議答案:
在翻譯任務中,Encoder 的任務是將輸入語言(如英文)轉換為一組高階語意表示,這組表示保留了整句話的語境與詞彙間關係;Decoder 則根據這些語意表示和已生成的目標語言片段(如中文)來逐步預測下個詞。
兩者透過 Encoder-Decoder Attention 模塊協作,Decoder 利用這個模塊查詢 Encoder 的輸出,以便在生成詞彙時關注輸入中最重要的部分。這種設計讓模型具備「讀懂→翻譯」的能力。
________________________________________
📘 問答題 3
問題:在訓練深層 Transformer 模型時,為何需要使用 Layer Normalization?它如何與殘差連結搭配發揮作用?
✅ 建議答案:
Layer Normalization(層正規化)能夠穩定每層網路的輸出分佈,減少層與層之間訊號的變異,進而提升收斂效率與模型穩定性。在 Transformer 中,每個子層(如 Attention、FeedForward)都會套上 Residual Connection(殘差連結)+ LayerNorm 組合。
殘差連結可幫助梯度向後傳遞、避免梯度消失,而 LayerNorm 則標準化輸出,避免因深層網路而造成訊號爆炸或收斂困難。這兩者的搭配,是 Transformer 能穩定訓練數十層模型的關鍵技術之一。
________________________________________
🌐 實作任務:用 Transformer 訓練中英文翻譯模型
🧑💻 自己打造多語言橋樑!
________________________________________
✅ 任務簡介:
目標: 使用簡化版 Transformer 實作「英文 → 中文」翻譯任務
工具: Python + PyTorch + torchtext 或 HuggingFace's transformers
________________________________________
📦 安裝依賴(簡版 PyTorch)
pip install torch torchtext sentencepiece
________________________________________
🧱 1. 建構 Transformer 模型骨架(簡略版)
import torch.nn as nn
from torch.nn import Transformer
class TranslationModel(nn.Module):
def __init__(self, vocab_size_src, vocab_size_tgt, d_model=512, nhead=8, num_layers=6):
super().__init__()
self.src_embed = nn.Embedding(vocab_size_src, d_model)
self.tgt_embed = nn.Embedding(vocab_size_tgt, d_model)
self.transformer = Transformer(d_model, nhead, num_layers, num_layers)
self.output = nn.Linear(d_model, vocab_size_tgt)
def forward(self, src, tgt):
src_emb = self.src_embed(src)
tgt_emb = self.tgt_embed(tgt)
out = self.transformer(src_emb.permute(1, 0, 2), tgt_emb.permute(1, 0, 2))
return self.output(out.permute(1, 0, 2))
這個 TranslationModel 是基於 PyTorch 的 nn.Module 所建構的序列到序列(Seq2Seq)模型,內部使用了原生的 nn.Transformer 模組。模型包含兩個嵌入層(src_embed 和 tgt_embed),將輸入的詞 ID 映射為連續向量表示;接著經由 Transformer 編碼器-解碼器架構進行序列建模。在 forward 方法中,輸入的源語言和目標語言張量會先嵌入,再轉置為 (sequence_length, batch_size, embedding_dim) 的格式,符合 PyTorch 的 Transformer 要求。最後,模型輸出經過線性層轉換為目標詞彙表大小的 logits,用於預測翻譯結果中每個詞的機率分佈。
________________________________________
📝 2. 訓練資料可用:WMT14 英中翻譯資料集(或簡化版)
• 可用 torchtext.datasets.IWSLT2016(language_pair=('en', 'zh'))
• 或使用 HuggingFace 的 opus100、flores 多語對照資料集
________________________________________
🚀 3. 模型訓練技巧
• 使用 LabelSmoothingLoss 作為目標函數提升泛化能力
• 使用 Noam 動態學習率調整器
• 每 100 步打印翻譯樣本預測,觀察模型改善進度
________________________________________
🔚 4. 翻譯效果觀察
輸入:
The weather is nice today.
模型翻譯輸出:
今天天氣很好。
________________________________________
🔍 小結與啟示:
✅ 理解 Transformer 架構背後的機制與組件,有助於你開發各種語言智能應用
✅ 懂得調用開源工具與資料,可快速啟動多語翻譯項目
✅ 翻譯任務訓練完成後,也能遷移應用於摘要、對話等任務!