使用機器學習解決問題的五步驟 : 模型訓練
前言 & 概述
本篇為機器學習入門觀念的第五篇文章。在前一篇文章中,我們介紹了「建立資料集」的概念與重要性。在本篇文章中,將會說明「模型訓練」的意義。
資料集到模型訓練
建立資料集後,我們通常會將資料集切成兩部分 : 訓練資料集 (Training Dataset) 與測試資料集 (Test Dataset)。訓練資料集用來訓練模型,當模型完成訓練過後,我們希望利用一些模型沒看過的資料來檢驗模型的表現。此時,即是透過測試資料集來檢驗模型的好壞。
模型訓練的意義
在「機器學習的模型、訓練與推論」一文中,我們了解到機器學習中「模型」其實就是一個「函式」。一個函式會接受一個輸入,經過運算後,回傳一個輸出。函式中有許多「參數」(Parameter),正式這些參數決定函式的輸出是什麼。
因此,模型訓練的概念就是「透過某種方式不停的調整模型中的參數 (Parameter) 數值,使的模型的輸出愈來愈精準,也就是最小化損失函數 (Loss Function)」。
上面這句話中,出現了兩個重要的名詞 : 參數 (Parameter) 與損失函數 (Loss Function),讓我們好好理解他們的意思!
- 參數 (Parameter) : 模型其實就是一個函式,函式中存在許多參數,這些參數與函式的輸入進行運算後,得到一個輸出。舉例來說,我們有一個函式:F1(x) = 3x + 5
其中 3 與 5 都是這個函式的參數。如果輸入 6 到函式中,則此函式會輸出 F1(6) = 23。當然,函式可以更複雜,也就是擁有更多參數:F2(x) = 3x2 + 2x – 10
此時,3、2 與 -10 皆為此函式的參數,如果輸入 1 到函式中,函式會輸出 F2(1) = -5。 - 損失函數 (Loss Function) : 損失函數 (式) 是模型訓練中重要的角色。損失函數可以衡量目前「模型的好壞」。在上述的 F2(x) 函式中,三個參數皆可以替換成千萬種不同的數字。為了找出一組最好的參數,我們可以透過損失函數的協助來找到。損失函式既然也是函式,就會有輸入與輸出:Loss Function(模型的參數) = 模型有多壞
輸入目前模型的參數到損失函式中,損失函式回傳該模型有多壞。因此輸出的數值愈大,表示模型愈差。
因此,我們再看一次模型訓練的概念 :「透過某種方式不停的調整模型中的參數 (Parameter) 數值,使的模型的輸出愈來愈精準,也就是最小化損失函數 (Loss Function)」。
模型訓練步驟的循環
將上述的內容統整後,我們可以了解模型的訓練過程就是不斷地重複以下三個步驟 :
- 輸入訓練資料集到模型中
- 透過損失函數計算目前模型的好壞
- 更新模型中的參數使得損失函數的數值降低 (提升模型的品質)
我們可以自行決定停止的條件,也許是重複 10000 次後停止,或是當損失函數的數值下降到某個程度後就停止。
模型訓練時的超參數 (Hyperparameter)
了解模訓練的流程後,接著要介紹實際在實作 (coding) 時,需要注意的一些事項,以及專有名詞。首先是「超參數」(Hyperparameter),模型在建立與訓練的過程中,有些參數是我們必須手動設定,模型無法自己學習並調整的參數。
最簡單的例子就是「訓練次數」,模型的訓練次數應該為多少,是我們自己去設定,我們可以根據我們的經驗直接設定一個數值,或是設定某些條件,當模型已經滿足條件時,就停止訓練。
簡單來說,模型就是一個函式,裡面有許多參數,模型裡面的參數是可以在模型訓練的過程中,不斷的調整。然而,超參數 (Hyperparameter) 就是我們必須手動設定的參數,無法在模型訓練的過程中自動調整。
常用的 Python 函式庫
在開始寫程式建立模型或是訓練模型時,我嗯有許多套件與框架可以使用,讓我們不必從頭開始撰寫。
以傳統的機器學習模型而言,最常使用的函式庫為 :
若是深度學習模型,常用的函式庫有 :
在這裡我們就先不深入的介紹,在網路上有非常多的資源,對這些函式庫的使用以及概念有詳細的說明。
常見的模型種類
在「使用機器學習的五步驟 : 定義問題」一文中,我們了解到需要辨識「問題」屬於哪一種機器學習的任務,進而建立相對應的模型。實際上,機器學習中的模型百百種,「選擇模型」也是一個「不斷嘗試」 (Trial-and Error) 的過程。我們將百百種的模型大致分為以下三類 :
- 線性模型 (Linear Model)
在我們的機器學習入門觀念介紹中,我們介紹的模型多為此類模型。這類模型通常也比較簡單,可以用一個數學函式將其表示:F(x) = 2x3 + 3x2 – 10x + 5
輸入不同的 x 此函式就會輸出不同的結果。在使用機器學習的五步驟 : 定義問題中,我們也利用房價預測的例子說明這類的模型適合處理「線性回歸」(Linear Regression) 的問題因此又稱為「線性回歸模型」。
然而,如果是「分類」問題,我們還能夠使用線性模型來解決嗎 ? 當然是可以的。如果是「二元分類問題」(Binary Classification),也就是將輸入模型的資料分成 A 類別或是 B 類別,我們可以將線性回歸模型的輸出通過一個「函式轉換」,使得輸出的範圍一定是在 0 ~ 1 區間。透過這個 0 ~ 1 區間的數字,來表示屬於其中一個類別的機率。
將原來的線性回歸模型 (Linear Regression Model) 再加上一個函式轉換形成一個新的模型,我們稱其為羅吉斯回歸模型 (Logistic Regression Model)。 - 樹狀模型 (Tree-Based Model)
樹狀模型也是在此系列文章中,常見的模型。樹狀模型就是透過像「樹」一樣的結構,將輸入的資料不斷的分類,最後得到一個結果。舉例來說,如果我們有一個人的基本資料,包含身高、血型、興趣、專長、年齡 …,我們想預測他的職業,我們可能經歷以下的過程 :
1.年齡大於 25 歲嗎 ? 如果不是,就「是學生」,如果是就「不是學生」。
2.有在寫程式嗎 ? 如果有,就「是工程師」,如果沒有就「是其他」。
我們可以將上述的分類過程,用以下的樹狀結構表示 :
- 深度學習模型 (Deep Learning Model)
深度學習模型正是近幾年特別火熱的議題。深度學習模型模仿人類的「大腦」結構,以一層又一層的神經元 (Neuron) 建構模型。深度學習模型也是百百種,依據不同的任務屬性,適用不同類型的模型。以下舉出常見到的幾個模型 :
前饋神經網路 (Feed Forward Neural Network, FFNN) : 最早發明也是最簡單的神經網路,將神經元 (Neuron) 一層 (Layer) 又一層 (Layer) 的疊在一起,層與層之間透過透過權重 (Weight) 來將資訊向下傳遞。
卷積神經網路 (Convolutional Neural Network, CNN) : 善於從圖像中找到有價值的資訊,廣泛應用在圖像處理的任務中。
循環神經網路 (Recurrent Neural Network) : 善於從時間序列的輸入資料中,汲取有價值的資訊。廣泛應用於自然語言處理的任務中。
結語
在本篇文章中,我們了解到「模型訓練」的意義,介紹「參數」與「損失函數」的概念。此外,我們也學習到實作時的一些議題。例如 : 超參數、常用的函式庫與模型的種類。
文章後半部屬於比較進階的部分,如果在閱讀吸收上比較困難,不要氣餒!第一次總是比較辛苦。隨著看到這些名詞與觀念愈來愈多次,你將會漸漸的熟悉起來,累積愈來愈多實力!
如果你對於機器學習、深度學習類型的文章有興趣,也可以到我最近剛成立的個人網站上逛逛呦!