緯緯道來

大四學生,主修資訊工程,熱衷於深度學習與機器學習。初期先以基本的程式教學為主,希望我的文章能夠幫助到你!

使用機器學習解決問題的五步驟 : 模型訓練

發布於

前言 & 概述

本篇為機器學習入門觀念的第五篇文章。在前一篇文章中,我們介紹了「建立資料集」的概念與重要性。在本篇文章中,將會說明「模型訓練」的意義。

資料集到模型訓練

建立資料集後,我們通常會將資料集切成兩部分 : 訓練資料集 (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)」。

模型訓練步驟的循環

將上述的內容統整後,我們可以了解模型的訓練過程就是不斷地重複以下三個步驟 : 

  1. 輸入訓練資料集到模型中
  2. 透過損失函數計算目前模型的好壞
  3. 更新模型中的參數使得損失函數的數值降低 (提升模型的品質)

我們可以自行決定停止的條件,也許是重複 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)
     : 善於從時間序列的輸入資料中,汲取有價值的資訊。廣泛應用於自然語言處理的任務中。

結語

在本篇文章中,我們了解到「模型訓練」的意義,介紹「參數」與「損失函數」的概念。此外,我們也學習到實作時的一些議題。例如 : 超參數、常用的函式庫與模型的種類。

文章後半部屬於比較進階的部分,如果在閱讀吸收上比較困難,不要氣餒!第一次總是比較辛苦。隨著看到這些名詞與觀念愈來愈多次,你將會漸漸的熟悉起來,累積愈來愈多實力!

如果你對於機器學習、深度學習類型的文章有興趣,也可以到我最近剛成立的個人網站上逛逛呦!

喜歡我的文章嗎?
別忘了給點支持與讚賞,讓我知道創作的路上有你陪伴。

CC BY-NC-ND 2.0 版權聲明
3

看不過癮?

一鍵登入,即可加入全球最優質中文創作社區