20251016 筆記,內容可能有錯,請參考來源影片。 [李宏毅機器學習2022影片](https://www.youtube.com/playlist?list=PLJV_el3uVTsPM2mM-OQzJXziCGJa8nJL8) [【機器學習 2022】惡搞自督導式學習模型 BERT 的三個故事](https://youtu.be/Pal2DbmiYpk?si=cnd288z2oVZ9pDzH) [【機器學習2022】各種奇葩的Meta Learning (Meta Learning) 用法](https://youtu.be/QNfymMRUg3M?si=nDOw_EddkQWlK4iB) ### 【機器學習 2022】惡搞自督導式學習模型 BERT 的三個故事 大綱 1. **第一個故事:Bert 模型的跨語言能力**。 * 即使模型只使用英文 QA 資料進行微調,也能自動解決中文 QA 問題。 * 模型能夠將不同語言中意義相同的符號對應起來。 * 訓練資料的數量和模型本身對於觀察到這種跨語言能力至關重要。 2. **第二個故事:Bert 模型的跨學科能力**。 * 在人類語言上預訓練的模型,可應用於與人類語言完全無關的任務,例如 DNA、蛋白質分類及音樂分類,並帶來顯著幫助。 * 預訓練強化了模型的**優化**和**舉一反三**能力。 * 應用:可實現端到端語音問答,無需依賴語音辨識。 3. **第三個故事:在人造資料上訓練 Bert**。 * 探討預訓練是否必須使用人類語言,以及何種能力對於 NLP 任務重要。 * **隨機生成**的資料沒有幫助,但具有**週期性**或**打亂順序** 結構的人造資料對 NLP 任務有顯著幫助。 * 發現在預訓練時,讓模型學習看待較長範圍的能力(較長的連續數字序列)似乎是重要的因素。 *** ### 故事一:Bert 模型的跨語言能力 #### 核心發現與實驗 * **多語言訓練 (Multilingual Training)**:在訓練 BERT 時,可以輸入各種語言的資料,讓模型執行多種語言的填空題訓練。 * **跨語言 QA 轉移**:訓練好的 Multi-BERT(多語言 BERT)展現出驚人的效果。若目標是解決中文 QA任務,**不需要提供中文 QA 的訓練資料**,只需要提供英文 QA 的訓練資料(英文文章、問題、答案),模型就能自動舉一反三,解決中文 QA 問題。 * **實驗結果**:在中文 QA 測試資料上,若使用在 104 種語言上預訓練的 Multi-BERT,並只使用**英文 QA** 資料進行微調,它的 F1 Score 為 **78.8%**。這個結果與使用中文 QA 資料進行微調的結果幾乎一樣好,甚至更好一點。如果沒有預訓練,僅使用中文資料微調,F1 Score 僅 78.1%;若預訓練後再用中文資料微調,F1 Score 可達 89%。 * **現狀**:這種跨語言能力已經在自然語言處理(NLP)領域成為一種**共識**。有一個名為 XTREME 的基準資料集,專門用於測驗多語言模型是否具有跨語言能力,要求模型只用英文資料訓練,然後在其他 30 種語言上進行測試。 #### 跨語言能力成因分析 * **常見猜想**:Multi-BERT 可以無視語言差異,將不同語言中**同樣意思的符號給予一樣的表示。例如,對於 Multi-BERT 來說,「魚」和「fish」看起來差不多。 * **驗證對應關係 (Alignment)**:透過計算中文字與英文單字 Representation 之間的相似度,並利用字典關係來計算 **Mean Rank Net (MNR)** 分數。MNR 值越高,代表模型將同義的中英文詞彙對應得越好。 * **影響因素**: 1. **訓練資料的重要性**:如果將每種語言的訓練資料從 1000K 降至 200K,**跨語言能力會顯著下降**。資料量足夠多才能觀察到跨語言能力。 2. **模型的重要性**:傳統的 Word Embedding 模型(非 BERT 時代),即使給予與 Multi-BERT 相同多的資料,也無法觀察到單字對應關係。這顯示出需要一個**大的模型**並經過足夠的資料訓練,才能展現出跨語言能力。 #### 語言資訊的儲存與應用 * **語言資訊的存在**:儘管 Multi-BERT 具有跨語言能力,但它在執行填空題時,仍能區分輸入是中文句子還是英文句子,並填入對應的中文或英文詞彙。這意味著 Multi-BERT **並未完全抹去所有語言間的差異**;語言資訊仍然存在,只是被藏起來了。 * **語言差異向量 (Difference Vector)**:將所有英文 Embedding 平均後減去所有中文 Embedding 的平均,可以得到一個「英文與中文之間的差距向量」。 * **向量平移與翻譯**:將一個英文詞彙的 Embedding 加上這個差距向量,得到的結果會與中文中意思相同的詞彙 Embedding 很接近(例如 fish + 差距 $\approx$ 魚)。 * **跨語言轉換應用**:可以將英文句子丟入 Multi-BERT 取得 Representation,然後**將這些 Representation 加上英文與中文的差異向量**,使它看起來像中文的 Representation,再讓 Multi-BERT 還原,結果可以得到一個粗略的中文翻譯。例如,輸入 "there is no one who can help you",平移後還原得到「無人能助我」。 * **修正跨語言轉移的表現**:利用語言差異向量可以修正在跨語言任務中模型表現的落差。當模型在英文上訓練,但測試在中文上時,由於 Multi-BERT 仍存有語言資訊,中英文的 Representation 略有差異。可以透過將中文的 Representation **減掉**英中之間的差異向量,使其看起來更像英文 Representation,從而幫助模型得到更好的結果。 ### 故事二:Bert 模型的跨學科能力 #### 核心發現與實驗 * **跨學科任務**:探討在人類語言上預訓練的 BERT 模型,能否幫助解決與人類語言完全無關的任務,如 DNA 或蛋白質分類。 * **方法**:由於模型只看得懂人類語言(英文單字),因此將 DNA 序列(由 ATCG 四種去氧核醣核酸構成)透過**隨機對應表**轉換成一串不知所云的英文單字序列。 * **結果**:在蛋白質分類、DNA 分類和音樂分類等任務中,使用在英文上預訓練的 BERT 進行初始化,與從頭訓練相比,**正確率都有顯著提升**。 * **結論**:模型不只學到人類語言的語意,還學到了一些更通用的能力,讓它能把所有分類任務或機器學習任務做得更好。 * **通用性**:不只是英文 BERT 有此能力,其他在人類語言上預訓練的模型對於這些無關任務也都有幫助。 #### 預訓練的價值:優化與泛化 * **優化**:觀察訓練過程中的 Loss Function 變化。使用預訓練 BERT 初始化的模型,它的 Loss 下降得比從頭訓練的模型 **更多、更快**,卡住的機率較低。 * **舉一反三**:即使將預訓練模型和從頭訓練模型在訓練資料上都訓練到非常低的 Loss(結果一樣好),但在 Development Set(測驗舉一反三能力)上,**預訓練模型的準確率仍然更高**。 #### 應用:端到端語音問答 (End-to-End Speech QA) * **挑戰**:目標是訓練一個模型,完全不使用語音辨識(ASR),也不使用語音與文字成對的資料,只根據語音問題和語音文章,找出答案在聲音檔案中的起始與結束位置。 * **過去嘗試的限制**: 1. 傳統方式是 ASR 模型接文字處理模型(但受 ASR 錯誤率影響大)。 2. 單純使用像 HuBERT 這樣的語音預訓練模型進行初始化,無法成功解決 QA 問題,因為語音模型沒有學到足夠的**語義資訊**。 * **跨學科解決方案**:結合兩種預訓練模型: 1. 語音預訓練模型(如 HuBERT):用來提取聲音內容(Discret Token/ID 序列)。 2. 文字預訓練模型(如 Text BERT):負責理解語義。 * **關鍵步驟**:由於 HuBERT 輸出的 ID 序列與人類文字無關,因此需要將這些 ID **隨機對應**到英文單字,然後將其丟給文字 BERT 進行初始化和微調。 * **結果**:如果沒有使用文字 BERT 進行預訓練(初始化),F1 Score 只有 6%(等於沒做起來)。但若使用文字模型來 Pre-train 這個處理語義的模組,F1 Score **顯著提升到 54%**。 * **優勢**:這個端到端(End-to-end)的藍色線模型基本上**不受語音辨識錯誤率的影響**。當語音辨識錯誤率超過 25% 時,這個端到端模型(藍線)的準確率甚至可以超越傳統的 ASR+NLP 模組(綠線)。 ### 故事三:在人造資料上訓練 Bert #### 核心問題與方法 * **動機**:探討是否真的需要人類文字來做預訓練,以及模型需要具備什麼樣的能力才能在人類語言相關任務(如 GLUE benchmark)上表現良好。 * **方法**:使用簡單規則產生人造的 Token 序列資料。用這些假資料訓練一個 BERT 模型(它只讀得懂 ID)。測試時,將人類語言的詞彙**隨機對應**到這些 ID,然後測試模型在 NLP 任務(如情感分析 sentiment analysis)上的表現。 #### 人造資料的效果 * **基準線 (Baseline)**:使用英文資料進行預訓練,在 GLUE 任務上平均可得到 **20%** 的進步。 * **隨機資料**:若人造資料是**隨機生成,沒有規律**,則預訓練**完全沒有幫助**。這證明了資料本身的內容還是重要的。 * **週期性資料**:如果生成的 Token 序列是**週期性**的(例如連續出現 5, 5, 3, 3, 0, 0),則這種資料進行預訓練**非常有效**,可達到接近 **15%** 的進步,大約是英文預訓練結果的四分之三。這可能是因為人類語言中也存在類似的共現或週期性結構。 * **打亂順序資料**:先產生一串連續編號的序列(如 1 到 64),然後將其**隨機打亂**順序,並在這個打亂的序列上做填空訓練。這種資料對預訓練也**非常有幫助**。 #### 關鍵能力:長範圍依賴性 * **長度影響**:觀察 Shuffle 實驗的結果,若一次只產生四個連續數字的 Token 進行打亂訓練(4 個為單位),進步量不大。但若產生 **64 個連續數字**的序列進行打亂訓練(64 個為單位),則進步量非常可觀。 * **推論**:這結果暗示,如果強迫預訓練模型學習**看一個比較長的範圍**,它就能夠在 NLP 任務上做得比較好。學習處理比較長範圍的資訊,可能是模型具備解 NLP 任務所需的重要能力之一。 ### 【機器學習2022】各種奇葩的Meta Learning (Meta Learning) 用法 1. **Meta Learning 與自監督式學習 (Self-supervised learning)**:兩者目標相似(尋找好的初始化參數),但可以互補。Bert 訓練出的參數可作為 Meta Learning 的初始化。 2. **Meta Learning 與知識蒸餾 (Knowledge Distillation)**:利用 Meta Learning 概念,訓練老師模型學習**如何教學**,讓產生的學生模型效果更好。 3. **Meta Learning 與領域泛化 (Domain Generalization)**:利用 Meta Learning 方法,學習一種學習演算法 (learning algorithm),讓它能夠在未知的目標領域 (target domain) 上表現良好。 4. **Meta Learning 和 Lifelong Learning**:利用 Meta Learning 來學習更好的正規化 (regularization) 策略或其他學習機制,以避免災難性遺忘。 *** ### 一、 Meta Learning 與自監督式學習 #### 共同目標與關係 * **自監督式學習的目標**:最具代表性的技術如 **Bert** 和相關模型,所做的事情是尋找一組好的**初始化參數 ($\theta_0$)**。 * **Meta Learning 的目標**:在Meta Learning 中,也有一系列的技術 MAML 專門在尋找參數的初始化,執行「**學習初始化 (learn to initialize)**」的任務。 * **關係**:儘管 Bert 和 MAML 有共同的目標,但它們並非互相取代,而是可以**互相結合**來使用。 #### 結合與優勢 * **Bert 初始化 MAML**:當 MAML 需要初始化時,在自然語言處理(NLP)相關任務中,常常使用 Bert 或透過自監督式學習學到的參數作為 MAML 的**初始化參數**。隨後,再透過 MAML 技術尋找更好的初始化參數。 * **優勢:彌補目標差異**: * Bert 雖然在任務上表現良好,但自監督式學習訓練目標(如填空題)與最終的下游任務之間存在**目標差異**。 * MAML 在尋找初始化參數時,其目標就是為了在我們關心的**目標任務上**獲得好的表現,因此更有**保障**。 * 將 Meta-learning (如 Reptile) 加到 Bert 之後,可以得到更好的結果(例如圖表顯示為綠色線優於藍色線),尤其是在**訓練資料特別少**(Few-shot learning)的情況下,更有優勢。 #### 挑戰與現狀 * **訓練資料的差異**:Bert 的訓練可使用**無標註**的大量資料。但 MAML 需要收集一系列**有標註**的訓練任務,這涉及到人工標註,且 MAML 本身的計算量非常龐大。 * **文獻趨勢**:多數文獻在執行 MAML 或相關技術時,會使用 Bert 或其變體 (如 RoBERTa) 來做初始化,而**完全從隨機初始化**的 MAML 文章相對較少。 ### 二、 Meta Learning 與知識蒸餾 (Knowledge Distillation) * **傳統知識蒸餾挑戰**:在知識蒸餾中,一個在分類任務上表現特別好的大型模型(Teacher Model)**不見得擅長教學**。文獻指出,正確率最高的老師教出來的學生不一定是最強的;有時表現較差的老師反而能教出更強的學生。 * **Meta-learning 介入**:可以使用Meta Learning 的概念,讓 Teacher Network 學習**如何教學**。 * **Meta Learning 目標的改變**:Teacher Network 更新參數的目標**不再是自己的分類正確率**,而是讓 Student Model 在完成知識蒸餾後的**正確率** 或 **損失值** 變好。 * **應用實例**:在知識蒸餾中,輸出通常會加上一個 **Temperature** 參數。過去這個參數是超參數,需要人工調整;現在可以透過「學習蒸餾 (learn to distill)」的方法,利用Meta Learning 來自動學習這個 Temperature 應該有多大。 ### 三、 Meta Learning 與領域泛化 (Domain Generalization) * **Domain Generalization 定義**: Domain Generalization 的目標是,在面對一堆不同的訓練領域時,訓練出一個模型,即使在**從未見過的目標領域** 上,也能有好的泛化能力。 * **Meta Learning 應用**:將Meta Learning 應用在 Domain Generalization 上,即是學習一種學習演算法 (learning algorithm),讓這個演算法能從不同的訓練領域中學習出一個模型,此模型可被應用在新領域上。 * **Domain Generalization 的特殊 Meta-learning 做法**: * 由於訓練階段無法取得目標領域的資料,因此採用**模擬** 的方式。 * 將訓練領域中的其中一個領域拿出來,**假扮成目標領域**。 * 使用 Meta-learning 方法,在剩下的領域上進行訓練,但其最終目標是讓在**假扮目標領域**上的正確率越高越好。 * 這樣,每一個訓練領域都可以輪流扮演目標領域,形成不同的訓練任務,用來訓練出一個學習演算法,使其能夠泛化到最終未見過的測試領域。 * **Meta-learning 的更高層次挑戰**:Meta Learning 可以幫助 DG,但Meta Learning 本身也可能遇到「訓練任務和測試任務分佈不相似」的狀況,此時需要更高層次的領域遷移處理。 ### 四、 Meta Learning 與 Lifelong Learning * **Lifelong Learning 挑戰**:處理「災難性遺忘 (Catastrophic Forgetting)」,即模型學習新任務時,會遺忘在舊任務上學到的東西。 * **Meta Learning 介入**:Meta Learning 可以強化現有的連續學習方法,例如基於正規化 (regularization base) 的方法(如 EWC、LwF 等)。 * **Meta Learning 目標的改變**:不再是由人來設計正規化項。Meta Learning 的目標被修改為:學習一種學習演算法,使其在學習新的資料(如 Data 2)後,**不只學會 Data 2,也能夠記住 Data 1** 的知識。 * **Meta-learning 的更高層次挑戰**:如同領域泛化,Meta Learning 本身也可能遇到連續學習的問題。如果訓練任務是依序到來的(例如先是訓練任務組 1,接著是任務組 2),模型仍可能在看到後續任務時,**遺忘**早期任務的學習結果。因此,Meta Learning 本身也可能需要處理連續學習的問題。 --- 其他課程 [【機器學習 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)