---
# System prepended metadata

title: 【機器學習2021】序章
tags: [機器學習]

---

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

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

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

### Day 1 今天是機器學習與深度學習的基本概念
2021 年剛好是我大一，也是剛開始接觸到機器學習的時候，今天看影片好像重新夢回大一，重新複習大一的微積分和機器學習概念，我發現雖然我知道這些內容，但突然叫我有系統性解釋每一個內容就說不出來了。

李宏毅老師可以深入淺出解釋每一個觀念，透過機器學習找函式三個步驟貫穿內容，用 YouTube 觀看人數當作例子，說明模型訓練、測試、改良方法還有什麼限制，模型是什麼? 損失函數是什麼? 超參數是什麼? 梯度下降法是什麼? 學習率是什麼?

談到線性模型限制，那我們又要如何建立複雜函數呢? 當想要預測更複雜的模型，需要建立神經元，還有更複雜的多特徵和線性代數表示。還有當模型太深又會遇到一些問題? 該如何在選擇不同超參數?

[【機器學習2021】01~02 機器學習和深度學習基本概念簡介](https://hackmd.io/@JuitingChen/SyoNXkdslx)





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

### Day 2 今天內容是機器學習的模型訓練和各種優化

今天先用一張地圖解釋，訓練和測試時如果遇到表現不佳的原因，然後分析每個原因出在哪裡和各種優化。

印象最深是今天在講局部最小值與鞍點，分享三體III：死神永生其中魔法師迪奧倫娜的故事。故事在 1453 年，鄂圖曼土耳其進攻君士坦丁堡之後，當時的國王不知道該如何對抗。有人向國王獻策，找來了一位魔法師叫作迪奧倫娜。
大家對於迪奧倫娜是否真的擁有如此強大的魔法感到好奇，因此要求她先展示一下她的能力。此時，迪奧倫娜拿出了一個聖杯，看到這個聖杯的人都大吃一驚，因為這個聖杯原本是放在聖索菲亞大教堂裡的石棺中，但這個石棺據說沒有人能夠打開，但是迪奧倫娜卻能從裡面取得聖杯。

為什麼石棺對所有人而言是封閉的，迪奧倫娜卻能進入呢？
這是因為人們覺得石棺是封閉的，是因為他們是從三維的空間來看。

但是迪奧倫娜可以進入四維的空間。從高維度的空間中來看，這個石棺是有路徑可以進去的，它並不是封閉的。
就像在二維的鞍點看起來和局部最小值一樣，但如果到三維其實有路可以繼續走。

[【機器學習2021】03~08 機器學習任務攻略和最佳化技巧](https://hackmd.io/@JuitingChen/BJ6mXy_slg)


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

### Day 3 今天是 CNN 和 Self attention 的觀念
從如何計算圖片，全連接網路的參數爆炸問題，透過觀察影像的特性，來提出不同方法節省計算量，像是不需要整個圖片都看，只要關注需要的模式，所以有 Receptive Field ，還有發現同樣的模式，可能出現在圖片不同的地方，所以可以共用參數，還有近一步發現 pooling 可以減少影像大小，而且對影像辨識影響小，但不一定是都要使用 pooling，要看應用是什麼。

Self attention 是Transformer的核心，透過Query-Key-Value機制，讓模型了解整個序列，解決RNN的長距離問題與平行運算瓶頸。Multi-Head 和 Positional Encoding 的設計，增加了彈性，讓序列任務如語音辨識或圖結構分析更高效。

李宏毅的投影片真的做得很好，可以把複雜的公式拆解的很清楚，終於更了解 Self attention 的計算了。

[【機器學習2021】09~11 CNN 和 Self attention](https://hackmd.io/@JuitingChen/r1ahLgUngl)


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

### Day4 今天講了 Transformer 的 Encoder、Decoder 架構

對於論文提到的架構更清楚了。
在提到用鄉土劇訓練語音辨識系統，不管鄉土劇的雜訊、不管字幕和聲音有沒有對上、不管台語音標轉換，出現經典名言，直接把資料到進去硬 train 一發，這好像我訓練的時候什麼不管先 train 再說。

另外還有分享 beam search 的故事，一種是每次都找最高機率的 Greedy decoding ，另外一種是先選機率比較低，先堵死自己，結果最終結果是比較好的。就像要不要讀博，讀博多窮幾年，但像聯發科碩士畢業 E7，博士畢業 E8，博士比較高機率未來可以繼續往上升，但我還是只唸碩士就好。

還有舉一個例子是之前 TTS 語音合成效果不太好，後來有 Google 的人建議 Decoder 要加 Noise，訓練會加上雜訊很正常，但是測試的時候正常不會加上雜訊，但在 TTS 測試加雜訊最後結果反而比較好，李宏毅分享的英文名言我覺得好美，人生真正的美麗或許就存在於不完美中。

[【機器學習2021】12~13 Transformer](https://hackmd.io/@JuitingChen/H1tfXy_ige)

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


### Day5 今天進入到了 GAN 的部分
為何需要 Generator ? 當要處理非固定輸出或是需要創造力的任務就需要生成模型。

如果要求畫一個紅眼睛的角色，每個人想的動畫人物可能都不同，有人會想到獵人裡面的酷拉皮卡，他是窟盧塔族，生氣的時候眼睛會變成紅色的火紅眼，或是輝夜姬想讓人告白裡的輝夜姬，因此 Model 需要能輸出一個分佈。

很喜歡 GAN 的概念，Generator 和 Discriminator 必須互相進步才能共同成長，只要其中一者發生問題或停止訓練，另外一個也會跟著停滯或變差，就像是棋靈王的進藤光和塔矢亮，兩個人互相較勁成長，如果在人生中可以遇到一起成長的夥伴那會很棒。

在分享 Cycle GAN 有循環一致性，目標是要求輸入 X 經過 X to Y to X 兩次轉換後，輸出的 X 要與原來的 X 越接近越好。例子出現李宏毅的照片，但李宏毅都會說是臭酸宅本人，強者果然是謙虛的。

[【機器學習2021】14~17 GAN](https://hackmd.io/@JuitingChen/S1adiwvhxg)



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



### Day6 那一天，人類想起了被支配的恐懼

今天進入自監督式模型，模型名稱出現各種芝麻街人物，印象深刻是有一張圖是超大型巨人，但臉是芝麻街人物 Bert ，剛好第一季的超大型巨人操控者是Bertolt Hoover，也是 Bert 這段真的很好笑，現在模型一個比一個大，就像地鳴的超大型巨人陣列，而且演進速度真的很快。

印象深刻有個例子是 Multi-BERT ，原先不管怎麼調參數，效果不太好，猜想會不會是資料量不夠? 把資料量變五倍大重新訓練，但用國網中心8張 v100 訓練兩天 training loss 都沒有下降，信仰不夠當準備放棄的時候 loss 下降了，實驗也花一週才訓練完，訓練後的效果非常的好。原來很多問題在需要足夠資料量，量變改變質變，很多現象才開始改變，這就很像現在的大型語言模型。

但現在 AI 模型越來越複雜，實驗室如果資源不夠，模型訓練會和坐牢一樣，之前修深度學習的一個作業，要用 T4 GPU 花 15個小時訓練和坐牢一樣，那段不管是睡覺還是出去玩都要訓練的日子。

[【機器學習2021】18~21 自監督式學習](https://hackmd.io/@JuitingChen/ryQG7J_sgl)


![image](https://hackmd.io/_uploads/rJReBrog-l.png)

### Day7 情谷底我在絕

今天是 Auto encoder，印象深刻是維度壓縮舉神鵰俠侶例子。

故事發生在楊過進入絕情谷後。楊過遇到絕情谷谷主的弟子樊一翁，他的武器除了鋼鉤之外還有鬍子。他可以甩動他的鬍子當作軟鞭來使用。這鬍子有兩丈那麼長，是一種非常厲害的武器。楊過與他打了很久都難分上下。但突然楊過說要在三招之內剪掉對方的鬍子，讓其他人很驚訝。這是因為楊過發現，雖然鬍子甩開來兩丈長，表面的變化非常厲害，但它最終是由頭所操控的。

因為頭部能做的變化是有限的，楊過決定直接去攻擊他的頭和臉，逼迫樊一翁不得不閃避。這樣一來，鬍子能動的路線就變得有限，楊過最終在三招內打敗了樊一翁並剪掉了他的鬍子。

這個故事告訴我們 Autoencoder 之所以能夠成功地將高維度圖片壓縮成低維度的 Code 並還原回來，是因為它知道，即使表面很複雜，但高維度資料的實際變化範圍是有限的，透過這種方式將複雜的圖片用較簡單的 Code 表示，在下游的任務中訓練時就能夠只需要比較少的訓練資料。可以想到用神鵰俠侶的例子舉例也太厲害了吧

[【機器學習2021】22~23 Auto-encoder](https://hackmd.io/@JuitingChen/r1sLPr92ge)

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


### Day8 來自人類的惡意

我們期待訓練好的類神經網路可以直接應用，但只有高正確率是不夠的，還要能夠防止來自人類的惡意。印象深刻是有舉獵人裡面的蟻王梅露艾姆的例子，他非常強，即使是尼特羅會長百式觀音也打不贏，但蟻王沒想到，最後尼特羅引爆體內的薔薇炸彈把自己炸死。

還有個例子是在一個 50 層的 ResNet 實驗中，輸入的貓圖原本被判斷為 Cat，信心分數為 0.64。加入人眼看不出的雜訊後，被判斷為海星，而且信心分數高達 1，那如果在訓練資料集中，裡面藏有看不到的微小雜訊的圖片，導致模型辨識錯誤?

另外還講到很多攻擊和防禦的概念，像是被動防禦是模型參數不變，在模型前面增加一個過濾器來削弱攻擊訊號的威力，但弱點是一旦攻擊者知道你使用的防禦機制，他們就可以將防禦機制也加入攻擊，產生可以穿越模糊層的攻擊訊號。
另外一個是主動防禦，在訓練模型時就強化抵抗攻擊的能力。但缺點是防禦新攻擊困難，訓練時沒有考慮到新攻擊，防得了舊攻擊，但防不了新攻擊。
防禦和攻擊兩者不斷的在進步，但道高一尺就魔高一丈。


[【機器學習2021】24~25 Adversarial Attack ](https://hackmd.io/@JuitingChen/HJ6jJIq3ge)


![image](https://hackmd.io/_uploads/Skb8rBilZe.png)
![image](https://hackmd.io/_uploads/BJiPSSox-l.png)

### Day9 人類總是需要一個解釋

印象深刻是有舉一個影印機排隊心理學實驗，在 1970 年代哈佛大學圖書館進行，當時印表機前經常大排長龍。當一個人只說「拜託請讓我先，我就印一張而已」，有60%的人會答應讓其先印。當請求者將說「能不能讓我先印，因為我趕時間」，接受的程度飆升到 94%，神奇的是，當請求者給一個看起來很多餘的理由「請讓我先，因為我需要先印」，人們接受的程度仍然高達 93%。

人類需要一個理由才能感到接受。好的解釋是讓人接受的解釋。可解釋性 AI 的技術發展，不一定是機器真的看到的結果，但是傾向於讓人類看起來滿意的結果。

有個常聽到例子是神奇寶貝和數碼寶貝分類器，一個訓練好的分類器實驗結果，在測試資料集上準確率高達 98.4%，後來發現神奇寶貝圖都是背景透明的 PNG 檔，而數碼寶貝圖背景都是黑色的。這美麗的誤會說明可解釋性還是有必要。

還有也有介紹分析類神經網路內部運作，還有機器心中的貓長什麼樣子？另外還有領域適應的問題，訓練好的模型在實際應用資料分佈不一致，導致表現下降該如何處理?

[【機器學習2021】26~28 Explainable ML 和 Domain Adaptation](https://hackmd.io/@JuitingChen/SJZzQkdslg)


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


### Day 10 今天進入到強化學習的部分

強化學習裡面，在選擇Actor動作上，有兩個常見的演算法，分別是基於機率的Policy Gradient，還有基於價值的Ｑ-learning。

講到Policy Gradient，但它限制是用於收集資料的 Actor 必須與被訓練的Actor是同一個。一個Actor之前收集的經驗，可能不適合用來訓練一個參數已經更新過的 Actor 。

印象深刻是棋靈王第八集的大馬步飛和小馬步飛的故事，主角阿光和佐為在下棋時。在某個盤勢下，阿光採取了小馬步飛的走法。佐為指正他，認為這個時候不應該下小馬步飛，應該下大馬步飛。因為之前下小馬步飛比較不容易出錯。比較合適能力較弱的阿光，但若現在阿光想變強，他就應該學習下大馬步飛，大馬步飛的下法會比較複雜，這說明了同一個行為，對不同棋力的棋士來說，它的好是不一樣的。

我們知道限制是舊經驗不適用和評估標準失準，所以每次更新完模型參數後，最好都要重新收集資料，這是導致 Policy Gradient 耗費大量時間的原因。

[【機器學習2021】29-30 強化學習-1](https://hackmd.io/@JuitingChen/HJYziZR3gx)


![image](https://hackmd.io/_uploads/Sk-z8rsxWx.png)


### Day 11 今天繼續強化學習

如果遇到獎勵永遠都是 0，或是在多數時候都是 0，只有極低的機率能得到巨大的獎勵，這就是稀疏獎勵問題。這時候可以用 Reward Shaping，除了在 Agent 最終目標的獎勵之外，提供額外的獎勵來引導 Agent 學習。

印象深刻是舉《妙法蓮華經》化城喻品的故事，故事中有一位領隊帶領一群人前往尋找寶藏，但寶藏在非常遙遠的地方，當這群人走到半路時，他們感到非常疲累，不願意再繼續往前走。領隊為了鼓勵大家繼續前行，不讓他們半途而廢，便告訴他們再往前 10 公里就有一個飯店可以休息。大家聽到後有動力繼續前進。但到了隔天早上，這個飯店就不見了。領隊解釋說，那個飯店是他用法力變出來的，目的是為了引導大家繼續向前走。

就像是佛道是一條非常漫長的路，佛在中間設立了小乘、中乘、大乘等不同的位階，來作為階段性的目標，引導人們持續前進，就像是唸博士班畢業這個目標，中間設置小階段的獎勵，鼓勵繼續往博士之路前進。太厲害了李宏毅連《妙法蓮華經》也可以舉例。

[【機器學習2021】31~33 強化學習-2](https://hackmd.io/@JuitingChen/Sy5DoWA3xl)


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


### Day 12 今天進入到機器終身學習的部分

原本我們以為 AI 可以不斷學習不同任務，最終變成超強 AI，但原來AI有災難性遺忘的問題，機器在學習新任務時，很容易忘記過去學過的技能。印象深刻有個例子是 Facebook 設計的 20 個簡單 QA 任務 Babi 任務實驗，在依序學習時，模型學到任務五準確率衝到 100%，但當它繼續學任務六，任務五的準確率馬上暴跌到 0%。
但是同時學習 20 個任務，準確率又沒問題。
模型可以學會多個任務，但依序學時就會學了新東西，忘了舊東西。
雖然同時把很多任務一起訓練學習避免遺忘，但機器需要把看過的所有資料都存起來不切實際。

災難性遺忘的本質是學習新任務的參數更新，可能導致舊任務的損失升高。比較好的解決方法像是選擇性突觸可塑性，透過正則化的方法，讓類神經網路中只有某些連接或神經元具有可塑性 ，其他連接被固化，讓它數值不能改變。

把修改後的損失函數設置一個守衛 Bi，Bi的值很重要，如果Bi都設為零，會發生災難性遺忘，Bi值很大又會不容易學習新技能。

[【機器學習2021】34~35 機器終身學習](https://hackmd.io/@JuitingChen/BytWmyuilg)


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


### Day 13 進入到神經網路壓縮的部分

現在模型越來越大，如果想要在資源有限邊緣裝置上的跑怎麼辦?
那就需要神經網路壓縮技巧，像是類神經網路修剪。修剪有分成以權重為單位，但是容易導致不規則結構，GPU難以加速。
還有以神經元為單位更結構化。有一個很有趣的討論，為什麼是先訓練大模型再修剪，而不是直接訓練小模型，有介紹大樂透假說，大模型有很多子模型組合，訓練本質是找到幸運初始化參數，而不是最終權重。實驗結果說如果小模型的參數沿用大模型的原始初始化值，可以訓練起來，但是小模型的參數重新隨機初始化訓練會訓練失敗。但後續有論文提到或許是訓練回合不足的幻覺。

還有提到知識蒸餾，小模型學生不直接抄真正的答案，而是模仿大模型老師的結果，目標是讓學生的輸出盡量接近老師的輸出。透過溫度參數T平滑輸出，讓學生學習效果更好。

還有量化，使用較少空間儲存參數，來減少模型的大小。
或是也可以重新透過設計網路架構來減少參數數量，還有動態運算，讓模型能自由調整所需的運算量。透過這些組合技combo讓模型更小。

[【機器學習2021】36~37 神經網路壓縮 ](https://hackmd.io/@JuitingChen/Bk7-m1_jlx)


![image](https://hackmd.io/_uploads/SJqw8Ssl-l.png)
![image](https://hackmd.io/_uploads/r1mK8Hjxbg.png)


### Day 14 學習如何學習的元學習

這是2021機器學習最後一個單元，傳統機器學習中，我們通常只能憑藉經驗和直覺來設定超參數 。元學習的目標是讓機器，可以根據資料自動地學習出這些超參數，像是學習率 、類神經網路架構、或初始化參數。元學習也可以用機器學習三個步驟。
步驟一:定義可學習參數 ϕ ，代表那些想被學習出的超參數。
步驟二:定義 Loss Function 在元學習中，訓練的單位是任務，而非單一的資料。我們需要準備各種的訓練任務。
步驟三：優化找尋 ϕ∗，找到使得總 Loss Function 最小。
如果可微分，可以直接使用梯度下降法。如果是複雜的離散結構難以微分的話也可以使用強化學習。

最後是課程結語改編《為學一首示子姪》來勉勵學生，用富者和貧者的學習態度對比，鼓勵那些缺乏運算資源的學生，只要堅持修完這門課就成功了。

最後李宏毅提到希望這門課能對學生的人生有所影響 ，並期許學生未來能用深度學習做出今日無法想像的成就，真的很感動，很感謝開放課程，讓大家都可以學習到有趣的AI知識。

[【機器學習2021】37~40 Meta Learning](https://hackmd.io/@JuitingChen/SkkC6rT2gl)
