說明:
這文章其實也是李宏毅老師 2023 年機器學習課程的個人一些學習整理,李老師上課的內容&口吻很精彩,很建議大家直接看李老師的課程影片:
完整的所有課程在這裏
機器學習是什麼
傳統的程式設計與機器學習的方法大有不同。前者需要程式設計人員深入了解特定領域的問題和規則,再基於這些知識來編寫程式。相對之下,機器學習的核心理念則是讓機器自行尋找並應用適當的函式來解決我們面臨的問題。
例如,當我們向ChatGPT輸入一段文字時,該系統的任務就是預測出應該如何回應。再例如Midjourney,我們只需輸入一段描述,它就能生成一張對應的照片。而2016年風靡一時的AlphaGo也是機器學習的一個出色應用例子,它能根據當前的棋盤狀況來決定下一步的棋路。
雖然機器學習有著眾多的應用,但其主要任務可以被分為兩類:迴歸和分類。
迴歸問題,簡單來說,就是在給定一些條件後,系統需要輸出一個具體的"數值"。例如,我們可以設計一個PM2.5預測器,透過輸入與PM2.5相關的各種條件,來預測明天的PM2.5指數。
分類問題則相對直觀,它的輸出是一個"類別",就像是我們在考試時遇到的選擇題或是非題。以垃圾郵件的判斷為例,我們輸入一份電子郵件的資料,然後系統評估它是否為垃圾郵件
然後我們來看看ChatGPT
從實際操作來看,ChatGPT的輸出實際上屬於分類問題。即使它輸出的是一段完整的文字,但如果我們將它分解開來看,它其實是在所有可能的字詞中選擇出最可能的一個(也就是從眾多的類別中選出一類),然後依次輸出。而這種輸出有結構性的文字的方式,也被稱為生成式學習。
生成式學習其實也叫 Structured Learning,它的任務就是使用機器學習來產生有結構的東西,例如文字、影像甚至聲音,ChatGPT 以及 Midjourney 都是這類的應用。
找出函式的三階段
在正式開始機器學習的函式尋找之前,我們首先需要確定我們的問題屬於迴歸問題還是分類問題。
以寶可夢應用為例,假設你要設計的程式是輸入一個寶可夢並預測其攻擊力,這個問題就屬於迴歸問題,因為攻擊力是一個數值。如果你要開發的程式是輸入一張圖片後,判斷這是否為寶可夢,那麼這就是分類問題。
對你要解決的問題有了基本認識之後,你才能在接下來的"選擇範圍"步驟中選擇正確的路徑。
正式尋找我們的適合函式時,基本上可以將這個過程分為三個階段:設定範圍、設定標準、達成目標。下面是這三大階段的工作細節::
設定範圍階段
這一步主要是選擇使用的神經網絡結構。
全世界的函式種類無窮多,但解決我們問題的合理函式只佔其中一部分範圍。你選擇的神經網絡結構,本質上就是在劃定你認為可能的函式範圍。選擇好你想使用的神經網路結構後,就可以開始下一步,也就是"設定標準"。
設定標準階段
"設定標準"就是定義出一個評量函式好壞的標準,即損失函式(Loss函式)。這個函式能夠計算出我們預測函式與實際狀況的誤差值。以下是一個完整的計算過程例子。
首先,我們需要有一個人工標註資料,並將這些標註作為標準答案。例如,標註人員標記出寶可夢的真實攻擊力為103, 17, 和212。
然後,我們使用預測函式來進行預測。假設我們的預測函式預測出的攻擊力為101, 18, 和200。
最後,我們可以將實際值與預測值相減,計算出每筆資料的誤差值。然後將所有的誤差值總和,這個總和的誤差值就被用來評量我們的函式的好壞(誤差值越小越好)。例如:(103-101) + (18-17) + (212-200) = 15。
另外實務上損失函數可以有多種計算模式,這部分則超過了我們設定檔範圍就不在此說明。
由於所有的評量資料都需要人工標註,所以這種方法也被稱為監督學習(Supervised Learning)。
達成目標階段
在設計標準階段,我們已經確認並理解了損失函式(Loss Function)的計算內涵。而在這一階段的最後,我們需要運用一種方法,透過我們所選定的損失函式,從眾多的候選函式中尋找出最佳的預測模型——這就是我們所謂的「最佳化」。
例如,在我們的候選函式中,我們有 f1, f2, f3 三種函式。假設 f1 預測函式所計算出的誤差值為 5, f2 為 33,而 f3 為 11。從這個例子我們可以看出,根據損失函式的計算,f1 是最佳的選擇。
以上是我們對於"最佳化"的簡化說明。若想深入了解最佳化的方法,這裡有兩個重要的關鍵字可以作為你的學習導引,分別是"梯度下降法(Gradient Descent)"和"反向傳播法(Backpropagation)"。
訓練以及測試
在實務應用中的機器學習訓練,我們通常會將資料劃分為訓練資料和測試資料。訓練資料用於訓練模型,而測試資料則用於在我們找到最好的預測函式後,來驗證我們找到的最佳預測函式是否真的優秀。
為什麼我們訓練出的預測函式,在我們的測試資料上表現不一定會是最好的呢?
這種現象其實很像一個只是很會背書的學生他的情況。他對於看過的題目都能回答得很好,但是一旦遇到新的題目,他可能並沒有真正理解問題的本質,因此回答可能會變得混亂。
總結
在這裡,我們總結了上述的機器學習流程。機器學習實際上是一種使用特定函式來實現我們期望任務的方法。在確定應用哪個函式時,我們可以將其分成三個階段來考慮:設定範圍、確立標準,以及實現目標。每個階段都有許多策略可供選擇。
例如,在設定範圍的階段,我們可以選擇使用深度學習或決策樹等方法;在確立標準的階段,我們可以選擇採用監督式學習、半監督式學習或增強式學習等策略;至於在實現目標的階段,我們則會尋找最佳化的方案,例如梯度下降法或遺傳演算法等方法。
整體而言,這三個階段所要達成的任務,即是本文所述的核心概念。希望這篇文章能幫助大家更深入理解機器學習的運作原理。