很感謝李宏毅老師提供這麼豐富又有趣的課程 [李宏毅【機器學習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,還有基於價值的Q-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)