Skip to content

[Machine Learning] 機器學習筆記-0 基本介紹

Last Updated on 2022-02-22 by Clay

前言

最早切身體會到 AI 的強大,是在 AlphaGo 第一次贏了曾是世界圍棋第一人的李世石老師的時候。我從小就嚮往著成為圍棋職業棋士,也花費了許多功夫鑽研棋盤上的競技之道,更重要的是,我從小就是李世石老師的棋迷,幾乎所有從以前認識我的棋界朋友都可以作證 XD...... 於是,在 AlphaGo 擊敗李世石老師的時候,我吃驚到彷彿自己的價值觀都被顛覆了一般。

在那之前,我不認為有任何圍棋 AI 可以贏職業棋手...... 說得更狂妄一點,那就是其實我根本不覺得有任何 AI 可以贏我。但事實就這樣擺在眼前,我對 AI 究竟是什麼樣的技術,越發地感到好奇。

就這樣,後來我進入了研究所,所學的領域也跳轉到自然語言處理 NLP)以及機器學習Machine Learning),我想這都跟我早年的經歷以及被 AlphaGo 震撼教育有關。

前言有點離題了,但總之我想說明的是,AI 是個直到現在都還有許多領域可以應用的技術、也還有著許多只要一突破就能夠更多更廣地造福人群的技術瓶頸,研究這些很是有趣。

但從我進入研究所學習到我領了畢業證書離開,甚至跳出來工作後,我一直都沒能好好地、系統化地紀錄 AI 相關的知識。零碎的幾篇文章確實是有,但我還是認為系統化地記錄這些學習筆記是有價值的。而且這跟初學時紀錄不同,現在的自己有了更多處理資料跟模型的經驗,很多時候不僅是紙上談兵,或許也能提供一兩段範例程式碼在文章中。

更重要的是,其實我最近想換工作了,剛好當一次全面的複習,哈哈哈哈哈。

本系列學習筆記依照台大李宏毅教授 YouTube 影片的進度去複習,絕對不會盜用其圖片,全部所需的圖片我都會重新自行繪製。(https://www.youtube.com/channel/UC2ggjtuuWvxrHHHiaDH1dlQ

我初學時是看這個課程,也曾經去過李宏毅教授所舉辦的講座與演講,還曾有幸在答題猜謎中領到檯燈,直到現在都還放在我的書桌,非常珍惜地使用。對我而言李宏毅教授就像是師父一樣的角色呢。(啊、也很感謝我的指導教授!

那麼,以下進入正題。


什麼是機器學習?

AI & 機器學習 & 深度學習

首先,機器學習Machine Learning)不是一種『全新的觀念』,根據參考資料:

  • 最早有 AI 方面相關的研究(不再是科幻小說的設定)約在 1950 年
  • 將其稱為『機器學習』並專注於電腦科學約在 1980 年
  • 比較晚出現的『深度學習』(Deep Learning)則是大概 2010 年出現的詞彙

三者之間會有些微妙的差異,比方說我的指導教授會聲明用 CLIPS 寫出的代理人agent)程式來解決的任務,是一種『推理任務』,那也是屬於 AI 的範疇;然而以機器學習的定義來看,模型model)應該要能自己學習到規則,程式開發者需要設定的是其學習模式

而深度學習又更限定了,目前比較主流的定義應是『使用類神經網路所架構的模型』這類的技術被稱為深度學習。

基本上,AI 包含了機器學習、而機器學習又分支出了深度學習。


機器學習是怎麼運作的?

我們可以想像一個黑盒子、或是一個函式(function),然後我們將資料輸入(input),接著我們就能透過黑盒子/函式取得最後的輸出(output)。

當然,過程中最重要的黑盒子/函式也就是我們常會掛在嘴邊談論的模型model)。

比方說,我們希望輸入一張貓咪的圖片,然後我們的模型告訴我們這是一隻貓;比方說,我們輸入一張狗狗的圖片,然後我們的模型告訴我們這是一隻狗。

但模型不會一開始就知道這件事,模型可以包含著許許多多的函式,也就是所謂的函式集(function set),藉由訓練資料training data)與標記結果(label),一步步改善模型。

比方說我們一開始使用 function_1,但是它卻把貓咪圖片判斷成狗,那 function_1 就是一個很糟糕的函式;反之,如果 function_2 成功把貓判斷成貓、狗判斷成狗,那麼 function_2 可能就是一個好的函式(模型)...... 以此類推。

這就是所謂的訓練、也就是讓模型去學習。(順帶一提,這是所謂的監督式學習supervised learning),後面的文章會更詳細地討論到,應該。)

機器學習最終的目的,可以簡化成『找到一個很適當的函式』,來達成我們的目的。而輸入的資料與輸出的格式都要依照任務目標而有所改變:

  • 比方說我們要做貓狗辨識,那麼我們的輸入就是圖像,輸出就是標記(ex. 狗 = 0、貓 = 1)
  • 比方說我們要做音訊辨識,那麼我們的輸入就是音訊,輸出就是文字
  • ......

當然,我們在訓練任務中做得很好的模型,不一定也能夠判斷從未見過的資料,所以我們通常需要準備另外一組資料集,是從未在訓練資料中使用的,這就是所謂的測試資料testing data)。

只要模型真的能在測試階段取得不錯的成果(比方說在看到一隻全新的貓時可以確實地將其分類成貓),那麼我們才可以認為這個模型真的有學習到東西。


機器學習的種類

本來沒有打算在這裡紀錄跟提到各種不同的模型與架構,但看了李宏毅老師的課程後,覺得這裡簡單紀錄 overview 似乎更清楚,更能理解機器學習究竟有多複雜或多簡單。

我認為,沒有必較過度擔心這是一項高深到自己學不會的技術(我爸媽就常把「自己學不起來」這句話掛在嘴邊......),因為只要是人類發明的技術,那麼一定有其脈絡可循。問題僅僅只是走到哪、能理解了多少。

至於有多複雜,到深度學習的領域上去,複雜的技術可真的是複雜到令人眼花撩亂。但是這種探索也是很有樂趣的,不諱言地說,我就算窮極一生也無法將全部資料記錄歸檔,因為新技術的發明與創造遠比我個人筆記的速度還快。但有時想想也真是感慨,我們或許是處在一個很不得了的時代,人類的技術、生活的進步是用著肉眼可見的速度成長著。


種類一、監督式學習(supervised learning)

剛剛提到,使用訓練資料找出最佳的函式(也就是模型架構),接著將標記好的資料結果與模型的輸出做比較,接著調整模型...... 這就是所謂的監督式學習,資料通常是『資料特徵』和『資料標籤』一對的格式。這種模型的訓練通常需要非常大量的資料才會找到比較好的模型架構,也就是常聽見的『AI 需要大量的資料!』這回事。

  • 迴歸(regression):我們要預測的是數值(scalar),比方說降雨量預測、股價預測等等的任務
  • 分類(classification):
    • 二分類(binary classification):只需要判斷『是』或『不是』,比方說垃圾郵件(spam mail)辨識、預測今天是否會下雨
    • 多分類(multi-class classification):比方說文章分類(經濟、政治、花邊、國際......)以及動物分類(像是十二生肖之類的,雖然我很懷疑上哪去找龍)
    • 多標籤分類(multi-label classification):一筆資料可能存在著多個輸出的類別,比方說我們要讓模型找到一張圖片裡是否有著太陽、海洋、山脈、森林...... 有可能只有太陽,也有可能同時存在著海洋山脈森林但就是沒有太陽...... 這種通常是影像物體辨識(object recognition)的分類(順帶一提,使用這些分類出來的項目來做詩歌創作曾是我論文主題的候選名單之一:對圖像寫詩的 AI


種類二、半監督式學習(semi-supervised learning)

剛剛有提到監督式學習需要大量的訓練資料...... 但人類是一種偷懶的生物,偷懶又帶來了科技的進步。嘗試著不使用大量標記資料的半監督式學習也就應運而生。

畢竟,產出高品質標記資料的環節,終究還是需要靠人類手動完成。所以如果可以不用進行數量那麼龐大的『標記』,肯定能替機器學習的研究帶來不小的助益。

我在網路上找了找比較沒找到很明確的案例...... 或許之後有談到的話附加段範例程式碼來時做比較好。


種類三、遷移學習(transfer learning)

大致上的定義就是將已經訓練好好的模型,複製一份移到另外一個可能有點相近的任務上進行訓練,可能會使所需要的下一個任務需要的資料量減少、也有可能會提升下一個任務的效果,這就是遷移學習。

比較常舉的案例是,假設我們的模型已經學會分類狗跟貓,那麼接著我們將其挪到分類狗跟貓跟老鼠的多分類上或許會訓練得很快。(基本上以類神經網路的架構來看,只需要改掉最後一層的輸出


種類四、非監督式學習(unsupervised learning)

非監督式學習就更徹底了,完全不需要有標記的資料。比方說將文字轉成向量,由 Google 提出 Word2Vec 模型,就是不需要資料標記,直接將文章輸入給模型就可以訓練了。


種類五、結構化學習(structured learning)

這個我自己不是很熟悉,按照李宏毅教授的說法,比方說像是音訊辨識(輸入一段音訊,產生一段文字)就是一種結構化學習,凡舉翻譯、人臉辨識皆屬此類。

那我想,例如 GAN 等產生圖片、GPT、seq2seq 產生文字敘述,也都屬此類。與其他種類的區別在於『輸出』更加複雜,是存在著結構的特定輸出。


種類六、強化學習(reinforcement learning)

強化學習(reinforcement learning)可能可以視為又比非監督式學習更徹底一點:這次我們手上可能沒有任何資料,所有的資料都要從任務當中自行產生。

不知道大家有沒有看過一個有趣的案例呢:例如讓 AI 自己去玩馬力歐賽車(Mario Kart),開發者設定好了得到前幾名會有正面回饋而後幾名會有負面回饋,接著讓 AI 自己接收畫面,判斷自己應該要按下哪些按鍵...... 讓它就這樣一直玩一直玩一直玩,只要訓練得夠久(然後還要運氣好),或許就會成為一個很棒的馬力歐賽車 AI,實力海放人類。

現在強力的圍棋 AI 很多都已經屬於這種類型的學習方式了,或是先藉由其他訓練方式的模型遷移學習到強化學習的任務。


References


Read More

Leave a Reply