---
# System prepended metadata

title: 李宏毅【機器學習2022】序章
tags: [機器學習]

---

很感謝李宏毅老師提供這麼豐富又有趣的課程

[李宏毅【機器學習2022】](https://www.youtube.com/playlist?list=PLJV_el3uVTsPM2mM-OQzJXziCGJa8nJL8)


![image](https://hackmd.io/_uploads/H1O9hrogWx.png)

### Day 15 開始2022年機器學習旅程
今天影片重點是提到機器學習的困境，以及為什麼要深度學習?
李宏毅舉神奇寶貝和數碼寶貝分類器當作例子，從機器學習三步驟， 資料觀察與函式定義，模型複雜度，損失函式和誤差率分析等等。

探討機器學習理想很豐滿現實很骨感的困境。
當模型複雜度大時，理論上可以找到一個損失很低的損失函式， 但實際上抽到壞資料的機率高，造成現實結果與理想結果差距大。

那當模型複雜度小，現實結果與理想結果差距小，但因為可選函數少，找到的最佳損失函式還是高，變成理想是崩壞的，這樣就算理想和現實接近也沒有用，那到底有沒有魚與熊掌兼得的方法?

影片比較兩種網路結構，一個只有單一隱藏層矮胖的網路，一個是多層隱藏層高瘦的網路，發現後者效果比較好，同樣的複雜函式，深層網路能用較小的參數量就能做到，這代表比較不容易發生過度擬合。

我們常常聽到有人說深度學習需要大資料、容易過度擬合。但剛好相反，當目標函式是複雜有規律的時候，深度網路優勢是用比較少的參數來實作相同的函式能力，讓魚與熊掌可以兼得。

[【機器學習 2022】01~04 機器學習原理介紹](https://hackmd.io/@JuitingChen/Sk_VtIJaeg)

![image](https://hackmd.io/_uploads/ryQahSsebe.png)


### Day16 各種神奇的自注意力機制
今天是我生日，先坐火車到內灣車站，然後跑半馬跑到竹中火車站，當作是自己的生日禮物。希望新的一年也順利。
原本自注意力機制痛點是計算量O(N²)，當序列長度N非常長，計算量很大，有什麼方法可以減少計算量來加速?

1. 減少要看的範圍
從只看左右鄰居，跳躍的看，還有利用像是里長伯的特殊符號全域，像是Longformer結合這三個，讓模型可以看到近處，也能掌握大局。

2. 減少矩陣的維度
Linformer發現了一個秘密，注意力矩陣很冗餘，資訊量沒那麼大。所以它只挑選少數幾個有代表性的 Key 向量來計算。將運算量降為 N x K。

3. 改變矩陣乘法順序
Linear Transformer利用數學上的結合律，本來我們是先算 (K^T⋅Q)，得到一個巨大的 N×N 矩陣。
但如果我們改成先算 (V⋅K^T)，會得到一個比較小的 D×D 矩陣。

4. 重新思考注意力機制
Synthesizer 連Q和K的互動都不要，乾脆把注意力矩陣當成網路參數直接學出來。

[【機器學習 2022】05 各式各樣神奇的自注意力機制](https://hackmd.io/@JuitingChen/rJeNpFIpxl)

![image](https://hackmd.io/_uploads/rymMABsl-x.png)


### Day 17 語音和影像的自監督式模型
先複習文字的自監督學習，再延伸到更複雜的語音跟影像上，雖然大框架是一樣的，但藏著蠻多玄機。

第一種生成方法是直接把BERT/GPT的概念搬過來，但語音與影像包含太多資訊，要求模型完整還原，或生成非常複雜的訊號很困難。
那能不能讓機器去預測一些比較簡單的東西? 

所以第二種Predictive Coding，讓機器判斷圖片被旋轉了幾度，或是把複雜的聲音訊號透過分群或量化變成離散的Class ID，這樣模型只要預測這個ID就輕鬆多了。那能不能不產生東西?

第三種對比學習，目標是不產生任何東西，而是透過定義正面和負面例子讓表示相似或分離。對比學習要讓正面例子接近，負面例子遠離。但如果負面例子挑得太簡單，像貓的負面例子選天空，機器只會學到顏色差異。

如果挑得太難，例如選兩隻不同的貓當負面例子，可能把原本應該當作同類的東西拉遠，造成學習困難。
為了避開這個問題，還有兩招Bootstrapping和Regularization 來避免模型崩潰的問題。

[【機器學習 2022】07 語音與影像上的神奇自監督式學習](https://hackmd.io/@JuitingChen/r1q-N1uagg)


![image](https://hackmd.io/_uploads/r1KLCBoeWl.png)


### Day 18 如何有效的使用自監督式模型
這是2022年4月還沒有ChatGPT3.5的年代，原來這時候就已經有 Prompting等等技巧了。

先介紹一下像是BERT、GPT預訓練模型，可以從大量文本中提取有用的表示，可以在各種下游任務上有不錯表現。但是實際應用會遇到兩大挑戰：一是任務資料標籤稀少，二是模型過於龐大。

對於標籤稀少的問題，核心方法是Prompting。把資料轉換為自然語言，讓模型更容易理解任務。這種方法在資料量很少時，表現比 Fine-tuning很好多。


針對模型過於龐大的問題，可以使用參數高效微調策略，目標是只調整模型一小部分的專屬參數，減少儲存空間和計算量。具體方法像是在模型中插入可訓練小模組的 Adapter，或利用Low-Rank 分解平行插入調整權重的LoRA，以及在輸入端或注意力層前加入可訓練向量的 Prefix-Tuning或Soft prompt 等技巧。還有動態推論技巧，可以在推理時，如果信賴度足夠，就可以提早退出層數減少計算時間。


[【機器學習 2022】06 如何有效的使用自監督式模型](https://hackmd.io/@JuitingChen/BJXeLKD6xx)

![image](https://hackmd.io/_uploads/B1rOABjeZg.png)


### Day 19 自然語言處理上的對抗式攻擊-1
之前有分享過影像上的對抗式攻擊，但NLP要如何做到類似的事情呢?
今天可以學到各種攻擊方式，但學到後不是去攻擊別人模型，而是去更謹慎設計模型，讓模型更強健，抵抗來自人類的惡意。
影像和文字的差別是影像是落在連續的數值裡，可以直接加人眼看不到的雜訊。

但在NLP的世界裡，輸入是離散的字詞。
攻擊者無法直接在文字上加雜訊讓模型誤判，需要透過操作字詞本身，例如進行替換或增刪。
最常被討論的類型是Evasion攻擊。它的目標就是想辦法修改輸入，讓模型的預測結果出錯。但是這個修改後的句子跟原句在語義上不應該有差別。

要做出一個成功的對抗性樣本，主要有四個步驟
1. 目標:希望模型誤判成隨機類別還是特定類別。
2. 變換方法:如何產生潛在的修改。常見的方法是在字詞層級進行替換。
3. 限制條件:確保產生的樣本是合理的。檢查替換前後句子的語義相似、文法是否正確，句子是否流暢。
4. 搜尋方法:如何從眾多變換中，找到一組能達成目標且符合限制的最佳組合。

[【機器學習 2022】08-09 自然語言處理上的對抗式攻擊-1](https://hackmd.io/@JuitingChen/B14i61uTxx)

![image](https://hackmd.io/_uploads/Hyx50rslWg.png)
![image](https://hackmd.io/_uploads/BkxjRHolWx.png)


### Day 20 自然語言處理上的對抗式攻擊-2
今天介紹另外兩種攻擊模仿攻擊和後門攻擊

模仿攻擊像是偷偷複製別人的模型。即使我們不知道它的架構或訓練資料是私人的，只要不斷查詢它的預測結果，就可以用低成本偷到一個性能差不多的仿冒品模型。
為了防止被偷，防禦方可以選擇在模型輸出中增加雜訊，或者訓練一個壞老師，讓複製模型學不好。

後門攻擊像在模型埋了一個隱藏開關。攻擊者可以在模型訓練階段透過有毒的資料，或是釋出帶有後門的預訓練語言模型，讓模型學會在正常情況下表現正常，但一遇到特定觸發器，像是特定符號就會失控，做出預設的異常行為。雖然有像 ONION 偵測異常詞彙的防禦方法，但攻擊者也能利用多重觸發器來繞過防禦機制。

模型比我們想像的要脆弱，或是一些翻譯系統，像之前看到黃偉哲市長FB發文「地震！大家平安！」但FB把貼文判讀為阿拉伯文，並自動翻譯成「去死！祝大家平安！」。
攻擊與防禦是一個永無止境的遊戲，助教也提到，並不是鼓勵攻擊線上API或釋出惡意資料集，而是學習如何讓模型更強健。

[【機器學習 2022】10~11 自然語言處理上的對抗式攻擊-2](https://hackmd.io/@JuitingChen/HkLRoFOTgx)

![image](https://hackmd.io/_uploads/H1UaRBilZe.png)


### Day 21 Bert 的三個故事 和 各種元學習的用法
今天是2022的最後旅程，分享Bert的三個故事。

第一個是跨語言能力，Multi BERT即使在英文QA資料上微調，也能自動解決中文QA問題，模型能夠將不同語言中意義相同的符號對應起來，還有訓練資料的數量和模型本身對於觀察到這種跨語言能力至關重要。

第二個是跨學科能力。模型在人類語言上預訓練後，能顯著提升 DNA、蛋白質或音樂分類等人類語言無關任務的準確率，讓模型可以舉一反三。

第三個是人造資料訓練，有發現到隨機生成的資料對訓練沒有幫助，但具有週期性或打亂順序結構的人造資料對NLP任務有顯著幫助。

再來是之前有分享過的元學習，今天是講延伸到更多個領域。
像是自監督式學習Bert訓練出的參數可作為元學習的初始化來學得更好。還有可以讓知識蒸餾中的教師模型學習如何教學，讓學生模型學得更好更佳。還能透過模擬未知領域的方式，幫助模型在領域泛化任務中獲得更好的泛化能力。並且能用於學習更有效的正規化策略，解決終身學習中災難性遺忘的問題。

[【機器學習 2022】12~13 Bert 三個故事 和 各種 Meta Learning 用法](https://hackmd.io/@JuitingChen/HyjfTptTel)

