---
# System prepended metadata

title: 第八章：自督導式學習 (Self-supervised Learning)
tags: [機器學習]

---

# 第八章：自督導式學習 (Self-supervised Learning, SSL) 
>上課筆記

* 上課影片連結
    * ==[**自督導式學習(一)：芝麻街與進擊的巨人**](https://youtu.be/e422eloJ0W4)==
    * ==[**自督導式學習(二)：BERT簡介**](https://youtu.be/gh0hewYkjgo)==
    * ==[**自督導式學習(三)：BERT的奇聞軼事**](https://youtu.be/ExXA05i8DEQ)==
    * ==[**自督導式學習(四)：GPT的野望**](https://youtu.be/WY_E0Sd4K80)==

---

## 自督導式學習概述

### 什麼是自督導式學習？

自督導式學習 (Self-Supervised Learning, SSL) 是一種**無需人工標註數據**的機器學習方法，如同[Cycle GAN](https://hackmd.io/@Jaychao2099/imrobot7#Cycle-GAN)，屬於無監督學習 (Unsupervised Learning) 的一個子類別。其核心思想是從未標註的數據中自行生成監督信號，從而訓練模型。

- **與監督學習的對比**：監督學習 (Supervised Learning) 需要輸入 $X$ 和標註 $Y$ (例如情感分析中的文章與正負面標籤) ，而自督導式學習則無需外部標籤，通過數據本身的結構創造訓練目標。
- **基本原理**：==將數據 $X$ 分成兩部分==，例如 $X'$ 作為輸入，$X''$ 作為標籤，讓模型預測 $X''$。例如，給定一段文字，遮蓋部分詞彙，讓模型填空。
- **歷史淵源**：Yann LeCun 在 2019 年 4 月的 [Facebook 貼文](https://www.facebook.com/share/p/1EcK44Asou/)中首次明確提出 "Self-Supervised Learning" 這一名詞，區別於更廣泛的無監督學習，以強調這種方法的獨特性。
![image](https://hackmd.io/_uploads/By419AM6kg.png)

### 為什麼重要？

自督導式學習利用大量未標註數據 (如網頁文本) ，解決了標註成本高昂的問題。其訓練出的模型 (如 BERT、GPT) 具有強大的泛化能力，可應用於多種下游任務 (Downstream Tasks) ，例如情感分析、問答系統等。

---

## BERT 系列模型

### BERT 簡介

BERT (Bidirectional Encoder Representations from Transformers) 是最知名的自督導式學習模型之一，由 Google 於 2018 年底提出。它基於 Transformer 的編碼器 (Encoder) 架構，具有雙向性，能同時考慮上下文。

- **參數規模**：BERT 擁有 340 萬個參數 (340M) ，相較於課程作業中的 Transformer (0.1M) 大 3400 倍。
- **命名由來**：以《芝麻街》角色命名，呼應其他模型如 ELMo、ERNIE 等。

### 預訓練 (Pretraining) 

BERT 的預訓練採用兩種自督導任務：

#### 1. 遮罩語言模型 (Masked Language Modeling, [MLM](https://arxiv.org/abs/1810.04805)) 

- **方法**：隨機遮蓋輸入序列 (例如一段文字) 中的部分詞彙 (約 15%) ，讓模型預測被遮蓋的部分。
  - **遮蓋方式**：
    - 替換為特殊符號 `[MASK]`。
    - 替換為隨機詞彙。
  - **數學表達**：輸入序列 $X = [w_1, w_2, ..., w_n]$，隨機選擇 $w_i$ 遮蓋，模型輸出 $Y_i$，目標是最小化 $Y_i$ 與 $w_i$ 的交叉熵損失：$$L = -\sum_{i \in \text{masked}} \log P(w_i | X_{\text{masked}})$$
- **目的**：訓練雙向資訊的 [contextual embedding](###BERT-為什麼有效？)。
- **範例**：輸入「台灣大學」，遮蓋「大」，模型需根據「台灣 [MASK] 學」預測「大」。
![image](https://hackmd.io/_uploads/rJVOs0GaJe.png)

#### 2. 下句預測 (Next Sentence Prediction, NSP) 

- **方法**：輸入兩個句子，中間以 `[SEP]` 分隔，首部加入 `[CLS]` 符號，模型預測兩句是否連續。
  - **訓練數據**：50% 連續句子，50% 隨機句子。
  - **輸出**：`[CLS]` 對應的向量經線性變換與 softmax，進行二分類 (Yes/No) 。
- **目的**：訓練整個 input 的 [contextual embedding](###BERT-為什麼有效？)。
- **爭議**：後續研究 (如 [RoBERTa](https://arxiv.org/abs/1907.11692)) 顯示 NSP 幫助有限，任務過於簡單，後被句序預測 (Sentence Order Prediction, [SOP](https://arxiv.org/abs/1909.11942)) 取代。
![image](https://hackmd.io/_uploads/SyVb2CMpJe.png)

### 微調 (Finetuning) 

BERT 預訓練後，可針對**下游任務 (Downstream Tasks)** 微調：

- **流程**：將預訓練的 BERT 參數作為初始化，後接任務特定的線性層，使用標註數據進行梯度下降調整。
> 延伸閱讀：[大型語言模型的 Fine-tuning](https://hackmd.io/6OgOrRZkSRmof8ZKXA7U6g?both#%E7%AC%AC%E4%BA%8C%E9%9A%8E%E6%AE%B5%EF%BC%9A%E5%90%8D%E5%B8%AB%E6%8C%87%E9%BB%9E%EF%BC%8C%E7%99%BC%E6%8F%AE%E6%BD%9B%E5%8A%9B-Instruction-Fine-tuning)

![image](https://hackmd.io/_uploads/rk2Nn0fp1x.png)
- **優勢**：相比隨機初始化，預訓練參數顯著降低訓練損失，提升性能。[[來源]](https://arxiv.org/abs/1908.05620)
![image](https://hackmd.io/_uploads/B1UAnRzaJg.png)

#### 下游任務範例

1. **情感分析 (Sentiment Analysis)**
   - **輸入**：句子 + `[CLS]`。
   - **輸出**：`[CLS]` 向量經線性層**分類為正/負面**。
   - **範例**：輸入「這部電影很棒」，輸出「正面」。
![image](https://hackmd.io/_uploads/S1MNpAfaJe.png)
2. **詞性標註 (POS Tagging)**
   - **輸入**：句子。
   - **輸出**：每個詞彙對應的向量經線性層預測**詞性**。
   - **範例**：輸入「他跑得快」，輸出「他/代詞 跑/動詞 得/助詞 快/形容詞」。
![image](https://hackmd.io/_uploads/rkAB6Rf61g.png)
3. **自然語言推論 (Natural Language Inference, NLI)**
   - **輸入**：兩個句子 (前提 + 假設) ，中間以 `[SEP]` 分隔，前加 `[CLS]`。
   - **輸出**：`[CLS]` 向量預測**關係** (例如「矛盾」) 。
   - **範例**：前提「他騎馬跳過飛機」，假設「他在餐館」，輸出「矛盾」。
![image](https://hackmd.io/_uploads/BJPGR0zTJl.png)
4. **抽取式問答 (Extraction-based QA)**
   - **輸入**：文章 + 問題，中間以 `[SEP]` 分隔，前加 `[CLS]`。
   - **輸出**：預測答案在文章中的起始位置 $S$ 和結束位置 $E$。使用兩個向量 (分別代表 $S$ 和 $E$) 與文章輸出向量的內積，經 softmax 選出最大值。
   - **範例**：文章「牛頓發現重力」，問題「誰發現重力？」，輸出 $S=1, E=1$ (答案「牛頓」) 。
![image](https://hackmd.io/_uploads/rkjs0RzTyx.png)

#### General Language Understanding Evaluation ([GLUE](https://gluebenchmark.com/))
*   **目的：** 測試和評估像 BERT 這樣經過自我監督式學習訓練的模型在多個自然語言理解任務上的能力。
*   **組成：** 包含 **九個不同的自然語言理解任務**。
*   **評估方式：**
    *   將預訓練好的模型（如 BERT）在 GLUE 的各個任務上**進行微調 (fine-tune)**。
    *   取得模型在每個任務上的評分。
    *   **GLUE 分數是這些任務評分的平均值**，用來**代表模型的整體表現**。
    *   **與人類表現的比較：** GLUE 的評估結果會與人類在相同任務上的表現進行比較。
*   **重要性：**
    *   **比較不同模型之間的效能**。
    *   **追蹤自然語言處理技術的進展**。
    *   GLUE 分數的逐年攀升顯示了技術的進步。
*   **Super GLUE：** 由於原始 GLUE 後來被認為不夠具挑戰性，因此出現了更難的基準測試集，例如 **Super GLUE**。
![image](https://hackmd.io/_uploads/r1FvremT1x.png)

延伸閱讀：[BERT Embryology (胚胎學)](https://arxiv.org/abs/2010.02480)：BERT 模型內部學習的動態過程與模式

### BERT 為什麼有效？

- **語境嵌入 (Contextualized Embedding)**：BERT 的輸出向量依據上下文變化，例如「果」在「吃蘋果」與「蘋果手機」中的嵌入不同。實驗顯示，相似語義的詞彙 (如「果」作為水果) 嵌入距離較近。
![image](https://hackmd.io/_uploads/Sy1Onk7Tyl.png)
![image](https://hackmd.io/_uploads/HJ65hkXa1l.png)
- **語言學假設**：基於 John Rupert Firth 的理論「詞義由上下文決定」，BERT 通過填空任務學習語義。
- **神秘現象**：即使輸入無意義序列 (如將 DNA 映射為隨機詞彙) ，BERT 仍能提升分類性能，暗示其能力可能超越語義，或源於優良的參數初始化，目前尚待研究。

[2020上課影片(BERT)(上)](https://youtu.be/1_gRK9EIQpc)
[2020上課影片(BERT)(下)](https://youtu.be/Bywo7m6ySlk)
### 多語言 BERT (Multi-lingual BERT) 

- **訓練**：使用 104 種語言的數據進行填空預訓練。
- **特性**：跨語言轉移能力。例如，用英文問答數據微調後，未見過中文問答數據仍達 78% 正確率 (接近 QANet 的 78%，人為 93%) 。[[來源]](https://arxiv.org/abs/1909.09587)
- **解釋**：相同語義的詞彙 (如「rabbit」與「兔子」) 嵌入接近，語言資訊隱藏於嵌入差異中 (英文嵌入均值 - 中文嵌入均值可轉換語言)。[[來源]](https://arxiv.org/abs/2010.10041)
![image](https://hackmd.io/_uploads/ryc3lx761l.png)
![image](https://hackmd.io/_uploads/HkvBxeXp1x.png)

---

## GPT 系列模型

### GPT 簡介

GPT (Generative Pre-trained Transformer) 由 OpenAI 開發，基於 Transformer 的解碼器 (Decoder) ，專注於生成能力。

- **參數規模**：GPT-3 達 1750 億參數 (175B) ，遠超 BERT。
- **命名趣聞**：未採用《芝麻街》命名，但因生成獨角獸假新聞而聯繫到獨角獸形象。

### 預訓練

- **任務**：預測下一個詞彙 (Next Token Prediction) 。
  - **方法**：給定序列前半部分，預測下一個詞彙。例如，輸入「台灣」，預測「大」；輸入「台灣大」，預測「學」。
  - **數學表達**：輸入序列 $X = [w_1, w_2, ..., w_{n-1}]$，預測 $w_n$，損失為：$$L = -\sum_{i} \log P(w_i | w_1, ..., w_{i-1})$$
- **結構**：只用 Transformer Decoder，去除 [Cross Attention](https://hackmd.io/@Jaychao2099/imrobot6#Cross-Attention) ，使用 [Masked Self-Attention](https://hackmd.io/@Jaychao2099/imrobot6#Decoder) 確保單向性。
![image](https://hackmd.io/_uploads/S1lRBeXayx.png)

### 使用方式

GPT 不像 BERT 普遍微調，而是採用「情境學習」 (In-context Learning) ：
- **Few-shot Learning**：提供任務描述和少量範例，無梯度下降。例如：
  ```
  Translate English to French:
  sea otter => loutre de mer
  peppermint => menthe poivrée
  cheese => fromage
  ```
- **One-shot Learning**：僅給一個範例。
- **Zero-shot Learning**：僅給任務描述。
- **性能**：GPT-3 在 42 個任務上測試，Few-shot 平均正確率從 20% 提升至 50% (隨模型規模增加) ，但邏輯推理任務表現不佳。

### 生成能力

GPT 可連續預測詞彙生成文章。例如，輸入「科學家發現」，可能生成「科學家發現了一種新物種」。線上工具如 [Talk to Transformer](https://talktotransformer.com/) 展示此功能。
>[!Warning]注意
>此為 2021 上課內容，不能完全描述現今之 GPT。

---

## 模型規模演進

自督導式學習模型規模不斷增長：

- **ELMo**：94M 參數。
- **BERT**：340M 參數。
- **GPT-2**：1.5B 參數。
- **Megatron**：8B 參數。
- **T5**：11B 參數。
- **Turing NLG**：17B 參數。
- **GPT-3**：175B 參數 (台北 101 高) 。
- **Switch Transformer**：1.6T 參數 (超過人腦神經元數量) 。

規模提升帶來性能增益，但訓練成本高昂。例如，BERT 需 3 億詞彙數據，訓練需 TPU 跑數天。

---

## 自督導式學習的擴展

### 影像領域

- **[SimCLR](https://arxiv.org/abs/2002.05709)**：通過對比學習 (Contrastive Learning) ，最大化增強後相同圖像的表示一致性。
- **[BYOL](https://arxiv.org/abs/2006.07733)**：無對比損失，通過自引導 (Bootstrap) 學習表示，機制神秘但效果卓越。

### 語音領域

- **語音版 BERT/GPT**：遮蓋聲音片段或預測下一段聲音。
- **[SUPERB](https://github.com/s3prl/s3prl)**：語音版 [GLUE](####General-Language-Understanding-Evaluation-GLUE)，包含 10+ 任務 (內容、講者、情感、語義) ，即將上線。

---

## 總結

自督導式學習通過**自創監督信號**，利用**未標註數據**訓練強大模型。BERT 擅長**填空與雙向理解**，GPT 聚焦**生成與單向預測**，二者奠定了 NLP 的基礎，並延伸至影像與語音領域。其成功依賴大數據與計算資源，未來研究空間廣闊，例如優化訓練效率與解釋神秘效能。
![image](https://hackmd.io/_uploads/SJe9vlX6kg.png)

---
回[主目錄](https://hackmd.io/@Jaychao2099/aitothemoon/)