20251012 筆記,內容可能有錯,請參考來源影片。 [李宏毅機器學習2022影片](https://www.youtube.com/playlist?list=PLJV_el3uVTsPM2mM-OQzJXziCGJa8nJL8) [【機器學習 2022】語音與影像上的神奇自督導式學習 (Self-supervised Learning) 模型](https://youtu.be/lMIN1iKYNmA?si=7M1T3R83rZTvMU4J) ### 【機器學習 2022】語音與影像上的神奇自督導式學習 (Self-supervised Learning) 模型 大綱 一、 文字自監督學習 (Self-supervised Learning) 回顧:以 BERT 為例 二、 語音上的 Self-supervised Learning 應用與成效 1. 語音版 BERT 概念 2. 評估基準:SUPERB 任務 三、 影像上的 Self-supervised Learning 應用與成效 四、 Self-supervised Learning 模型訓練的五大類方法 1. Generative Methods 2. Predictive Coding 3. Contrastive Learning 4. Bootstrapping 5. Regularization --- #### 一、 文字自監督學習 (Self-supervised Learning) 回顧 1. **最知名模型:** 在文字 Self-supervised Learning 應用上,最知名的模型就是無人不知無人不曉的 **BERT**。 2. **訓練資料:** BERT 的訓練過程**不需要有標註**的文字資料。只需要收集到**大堆的、沒有標註**的文字資料,例如從網路上爬取文章,就可以訓練出 BERT 模型。 3. **模型功能:** BERT 具體而言,是給它一段文字,它會輸出一串 **representation**,輸入文字中的每一個 token 都有一個對應的 representation。 4. **下游任務應用(Downstream Tasks):** * 假設要做**情感分析 (Sentiment Analysis)**,一般需要收集標註資料來判斷文章是正面還是負面。 * 如果今天有 BERT,你的情感分析模型(downstream model)就可以很簡單,它是把 BERT 輸出的這些向量**當作輸入**,然後輸出對應的文字是正面還是負面。 * **少量的標註資料**有時候只需要拿來訓練這個 BERT 以外的下游模型就好。 * 這個下游模型在課堂的例子裡通常只是一個 **linear model**。 * 當然,除了訓練下游模型以外,有時候也會用這些標註的資料來**微調 (fine-tune) BERT**,讓它可以適應不同的任務。 5. **評估基準:** 在文字上,我們有 **GLUE** (General Language Understanding Evaluation) 基準,它衡量模型是否能在解**九個自然語言處理任務**上都有好的表現。 #### 二、 語音上的 Self-supervised Learning 應用與成效 把 Self-supervised Learning 用在語音上跟用在文字上的大框架其實**沒有非常不同**。 1. **語音版 BERT 概念:** * 我們也可以有一個「**語音版的 BERT**」。 * 這個模型是透過**大量沒有標註**的聲音訊號訓練出來的,不需要任何文字標註,也不需要標註是誰講的。 * 它做的事情跟文字版 BERT 一樣:給它一段聲音訊號,它會把這段聲音訊號變成**一排向量 (representation)**。 * **應用於語音辨識 (ASR):** ASR 模型可以把「語音版 BERT」輸出的結果作為輸入,然後產生語音辨識的結果。 * **效益:** 訓練一個好的 ASR 模型通常需要上萬個小時的有標註資料。有了語音版 BERT,很多人挑戰只用 **10 分鐘的資料**就能訓練語音辨識模型。 * **微調:** 語音版 BERT 微調**往往不是必要的**,通常固定住語音版 BERT 或是只微調下游模型就能得到不錯的結果。 2. **評估基準:SUPERB (Speech processing Universal PERformance Benchmark)** * 在語音領域,我們有語音版的 GLUE,叫做 **SUPERB**。 * SUPERB 至少衡量了 **14 個**與語音相關的不同任務。 * 這些任務涵蓋了多個面相: * **理解內容:** 語音辨識 (ASR)、喚醒詞偵測 (Keyword Spotting)。 * **說話者相關:** 說話者辨識、說話者驗證、說話者分割 (Speaker Diarization)。 * **語言學/語義理解:** 情感辨識、語音翻譯(直接從中文語音輸出英文文字)。 * **聲音合成:** 語音轉換、語音增強、語音分離。 * **驚人結論:** 這些 Self-supervised Learning 模型被證實在各式各樣不同的任務上表現優異,**甚至連微調都不用**,就能直接有好的結果。 #### 三、 影像上的 Self-supervised Learning 應用與成效 1. **應用領域:** 包括影像分類(Image Classification)、物件偵測 (Object Detection)、語義分割 (Semantic Segmentation)、以及導航 (Navigation)。 2. **效能表現:** * 影像 Self-supervised Learning 模型的效能表現與文字、語音的結論很像。 * 在許多任務上,Self-supervised Learning 模型的結果**超過了 Supervised Learning 的基準線**。 * 這個 Supervised Learning 基準線是假設那些原本用來訓練 Self-supervised Learning 的**沒有標註的影像資料,其實是有標註的**(例如假設它們都被 ImageNet 標註了)。 * 這證明了即使有人費心去標註這些原本未標註的影像資料,結果也不會更好,**這些標註是多餘的**。 #### 四、 Self-supervised Learning 模型訓練的五大類方法 接下來,我們看看要在影像和語音上怎麼訓練出這些 Self-supervised Learning 模型。 #### 1. Generative Methods 這類方法就是把文字上成功的 **BERT 系列**跟 **GPT 系列**拿來語音和影像上用用看。 | 方法類別 | BERT 系列 (Masking) | GPT 系列 (Autoregressive) | | :--- | :--- | :--- | | **概念** | 遮蓋聲音訊號的某部分(把值設為零),要求模型還原被遮蓋的部分。 | 給定一段聲音訊號,預測接下來會出現的聲音訊號。 | | **語音代表模型** | **Mockingjay**。 | **APC** (Autoregressive Predictive Coding)。 | | **語音特有技巧** | 1. 必須一次性 **Mask 一長串 feature**,避免機器只學到簡單的內插。 2. 可嘗試 **Mask 向量的某些 dimension**(而非時間方向),這會讓機器比較容易學到整個句子的資訊。 | 必須預測**夠遠時間之後**的向量(N 要設大於等於 3),使問題夠難,機器才能學到有用的東西。 | | **主要限制** | 語音與影像包**含太多資訊**,要求模型完整還原或生成非常複雜的訊號是困難的事情。 | #### 2. Predictive Coding 因為生成或還原原始訊號太複雜,所以讓機器去預測一些**比較簡單**的東西。 * **影像上的小遊戲**: * **旋轉預測 (Rotation Prediction):** 讓機器判斷一張圖片被旋轉了多少角度 (0°, 90°, 180°, 270°)。 * **上下文預測 (Context Prediction):** 給圖片中的兩個小區塊,讓機器判斷第二個區塊相對於第一個區塊的相對方向。 * **語音上的小遊戲:** 判斷從同一句話切出來的兩段聲音訊號之間,距離有多遠。 * **挑戰:** 什麼樣的小任務有效沒有標準答案,需要**領域知識 (domain knowledge)** 來設計。 * **簡化生成目標:** 將原本要生成的複雜 **acoustic feature**(一排向量)透過 clustering 或 quantization,轉成**離散的 Class ID** 。 * 訓練目標變成:模型還原被 Mask 的部分時,是預測這個離散的 ID。 * 產生 ID 比產生複雜向量簡單得多。語音上有 **VQ-VAE** 等模型實行此概念。 ##### 3. Contrastive Learning Contrastive Learning的目標是**不產生任何東西**,而是透過定義正面例子和負面例子讓 representation 相似或分離。 * **基本概念:** * **Positive Examples (正面例子):** 屬於同類別的圖片,輸出的向量應**越接近越好**。 * **Negative Examples (負面例子):** 屬於不同類別的圖片,輸出的向量應**越遠越好**。 * **Self-supervised Learning 應用 (SimCLR):** * 在沒有標籤的情況下,Self-supervised Learning 透過**數據增強 (Data Augmentation)** 來定義正面例子與負面例子。 * 從同一張圖片 Augmentation 出來的不同版本(例如經過 Random Cropping、顏色變化、雜訊等處理),即使長得不一樣,仍被視為 **Positive Pair**。 * 來自不同圖片的結果則視為 Negative Example。 * **關鍵:** Augmentation 的難度非常重要,不能太難(可能導致同類圖片差異過大)。Random Cropping 被認為是最有效的增強手段之一。 * **對比學習與 BERT 的聯繫:** * BERT 的重建(Masked Token Prediction)其實可以被視為一種對比學習。 * 在分類問題中,正確的類別(對應的向量)就是 Positive Example,其他的類別就是 Negative Examples。 * BERT 要讓輸出的 embedding 跟正確詞彙的 embedding 距離越近越好,跟其他詞彙的 embedding 距離越遠越好。 * **語音應用 (Wav2vec 2.0 觀點):** * Wav2vec 2.0 將 BERT 的 Masking 概念與對比學習結合。 * 它用被 Mask 起來位置的向量,去預測**同一位置的離散 Token**。 * 目標 Token 是 Positive Example (希望產生機率越大越好),其他 Token 則是 Negative Examples (希望機率越小越好)。 * **Contrastive Learning 的主要問題:** 選擇 Negative Example 是一大挑戰。 * Negative Example 必須具有**足夠難度**(例如貓的負面例子選狗或老虎,而非天空)。 * 若刻意選擇困難的負面例子,可能誤將應視為同類的東(如兩隻不同的貓)硬是拉遠,使模型學習過於困難。 #### 4. Bootstrapping 這是為了解決 Contrastive Learning 中選擇 Negative Sample 的難題而發展的方法。 * **動機:** 如果只用 Positive Example 訓練,模型會發生 **Collapsing** (崩潰),即不論輸入什麼圖片,模型總是輸出相同的向量(例如 0 向量)。 * **Bootstrapping 的解決方法(例如 BYOL/SimSiam):** 避免崩潰需要兩個關鍵機制。 1. **非對稱網路結構:** 採用左右兩條路徑,右邊的 Student Encoder 之後要多加一個 **Predictor**,而左邊的 Teacher Encoder 則不需要。 2. **梯度停止與參數更新:** 只計算右邊(Student 網路)路徑的梯度。計算完梯度後,將右邊更新後的參數**複製**給左邊 Teacher 網路,或是使用**移動平均 (Moving Average)** 的方式去影響 Teacher 參數。 * **觀點:** 這可以被視為一種**知識蒸餾 (Knowledge Distillation)**:Student Encoder 從 Teacher Encoder 學習,每次學完後,**學生馬上就變成老師**,然後新的老師繼續教新的學生。 * **語音應用:** 語音上也有類似的做法,代表模型為 **Data2vec**。 #### 5. Regularization 這是另一種**避開 Negative Sample 選擇**的方法,在只用 Positive Example 訓練的基礎上加入 Regularization 項來強制避免 Collapsing。 * **Invariance (不變性):** 只用 Positive Example 訓練,讓正面例子的 representation 越接近越好。 * **關鍵 Regularization(避免崩潰):** 1. **Variance Invariance:** 強制要求輸出 batch 中,representation 的**每個 dimension 必須有足夠大的 Variance**。這能避免模型總是輸出相同的常數向量。 2. **Covariance Invariance:** 要求輸出 representation 矩陣的 Covariance 矩陣,讓它非對角線數值接近零。才能確保了所有維度都能被充分利用。 * **結論:** 只需要 Invariance 和 Variance 兩個條件,就足以讓模型不會崩潰,只用 Positive Example 也能訓練起來。 --- 其他課程 [【機器學習 2022】01~04 機器學習原理介紹](https://hackmd.io/@JuitingChen/Sk_VtIJaeg) [【機器學習 2022】05 各式各樣神奇的自注意力機制](https://hackmd.io/@JuitingChen/rJeNpFIpxl) [【機器學習 2022】06 如何有效的使用自監督式模型](https://hackmd.io/@JuitingChen/BJXeLKD6xx) [【機器學習 2022】07 語音與影像上的神奇自監督式學習](https://hackmd.io/@JuitingChen/r1q-N1uagg) [【機器學習 2022】08-09 自然語言處理上的對抗式攻擊-1](https://hackmd.io/@JuitingChen/B14i61uTxx) [【機器學習 2022】10~11 自然語言處理上的對抗式攻擊-2](https://hackmd.io/@JuitingChen/HkLRoFOTgx) [【機器學習 2022】12~13 Bert 三個故事 和 各種 Meta Learning 用法](https://hackmd.io/@JuitingChen/HyjfTptTel)