[李宏毅機器學習–1]機器學習與深度學習基本概念簡介

Adam He
11 min readJul 26, 2023

--

本系列為記錄李宏毅機器學習2021的重點筆記,後續會不定期繼續更新

機器學習基本介紹

何謂機器學習?

簡單來說就是尋找一個Function(函式),當我們輸入一筆資料,這個Function可以產出一個我們期望的結果,以下圖為例。如果要做語音辨識,那我們的輸入就是一組聲音訊號,輸出則是一段代表這組聲音訊號的文字。如果要做影像辨識,那輸出就是一張圖片,輸出是這張圖片所表示的內容。除此之外,就連之前很紅的AlphaGo,也是同樣的概念,輸入是目前的棋譜,輸出是效益最大的下一步位置。

機器學習的任務

機器學習最常見的任務可以分成下列三種

Regression

也就是所謂的回歸問題,當我們期望的輸出值是一個數值時,這個任務就可以稱之為Regression。舉例來說,預測隔天的PM2.5數值、預測隔天的氣溫、預測連假時高速公路的車流量等等,這些都是Regression問題。

Classification

也就是所謂的分類問題,當我們期望的輸出值是一個類別時,這個任務就可以稱之為Classification。舉例來說,辨識一張影像中的動物類別、手機常見的Face ID(人臉辨識)、指紋辨識等等,這些都是Classification問題。

Structured Learning

與前面講的預測和辨識不太一樣,Structured Learning主要的任務是創造。舉例來說,最近很紅Chatgpt就是屬於這個類別,其他像是文章創作、圖像創作、音樂創作都是屬於Structured Learning的範疇。

Case Study 預測頻道觀看人數

問題定義

我們要從李宏毅教授的Youtuber頻道過往的數據來訓練一個模型,並使用此模型來預測頻道未來的觀看人數,主要流程分成下列三個步驟。

  1. 定義Function(也可以稱之為Model)
  2. 定義Loss Function
  3. 定義並執行Optimization的方法

一、定義Function(Model)

這裡先定義一個簡單的Function(Model)如下。(為方便起見,後續都將function稱為model)

y: 我們想預測的未來的觀看次數
x: 過往的觀看次數
w: weight,Model的未知參數
b: bias,Model的未知參數

二、定義Loss Function

Loss Function的用途是用來評估Model的好壞,本範例用到的Loss Function為Mean Absolute Error(MAE),簡單來說就是將每個預測出來的數值和其對應的真實數值相減後取絕對值,再將所有數值加總起來取平均。

舉例:
假設有以下連續三天的資料並且假設參數 b = 0.5, w = 1
x為當天的觀看次數, y為預測出的隔日觀看次數, y’為真實的隔日觀看次數
第一天 x = 5, y = 5.5, y’ = 6.2
第二天 x = 6.2, y = 6.7, y’ = 6
第三天 x = 6, y = 6.5, y’ = 6.1
那麼Loss值等於(|6.2–5.5| + |6–6.7| + |6.1–6.5|)/3 = (0.7 + 0.7 + 0.4)/3 = 0.6

三、定義並執行Optimization的方法

Optimization的用途是針對模型那些未知的參數(w和b)來找一組最佳解,使得Loss Function的數值可以最小(也就是使模型表現最好)。而Optimization的方法有很多種,此範例使用的是一種叫做Gradient Descent的方法。

Gradient Descent
如下圖所示,首先我們針對不同的w來計算各自的Loss值,將其對應的數值畫在一個二維平面上,可以觀察到Loss值最小的位置為黃色圈起來的地方,而那個位置就是我們要找的參數的最佳解(Loss最小)。而要找到這個最佳解的演算法就叫做Gradient Descent,其大致的流程如下。

  1. 先隨便選擇一個點當作初始點,這裡設初始點為w0(如下方猴子位置)。
  2. 對當前的Loss做微分(做微分的概念其實可以想像成求斜率)
  3. 根據2. 得到的結果,先判斷正負,如果正(斜率為正),代表w往右的Loss比往左的Loss高,所以要往左移動,反之亦然
  4. 重複2. 3.的步驟,直到找到一個2.的結果為零的位置(斜率為0)

Gradient Descent流程細節1
在前面講解流程的第三點有講到要向左或是向右移動,那麼所謂的移動是要移動多少呢?其主要做法如下圖所示。當微分的結果計算完以後,會乘上一個數值,這個數值就叫做Learning Rate,它可以用來決定一次要移動的距離,所以Learning Rate越大,移動的就越多。而這個參數由於是人自己定義的,所以也稱之為hyperparameters

Gradient Descent流程細節2
在前面介紹流程第四點說要重複執行直到微分計算出來的數值為0,但是觀察下圖可以發現在Local minima的地方數值也是0,但此位置卻不是最佳解,而這也是Gradient Descent潛在的問題之一,這部分後續會在更深入的探討。

實驗結果

根據上述這些流程,針對2017/01/01–2020/12/31的資料來做計算,最終得出以下的實驗結果。越紅的地方代表Loss越高,越深藍的地方代表Loss越低,最終實驗結果是當w = 0.97, b = 0.1k時,Loss = 0.48k為最佳解

而將這個Model套用在2021的資料上來做預測的結果Loss為0.58k,其預測結果下方折線圖,紅色是真實數值,藍色是預測結果。可以發現藍色都剛好跟紅色的前一天的數值很相近,其原因就是因為w的數值有0.97,也就是所模型幾乎是依據前一天的數值來推論隔天的數值。

Case Study 模型的優化和變形

觀察更多天以前的資料

前面的做法是只有將前一天的資料作為模型的輸入,但我們也可以將Model改寫成觀察前七天的資料,公式如下。而根據這樣的做法可以發現實驗結果有大幅度的提升了。此模型也就是所謂的Linear Model

深度學習基本介紹

然而有時候我們的資料分布不一定是線性關係,所以使用Linear Model很難很好的去解決我們的問題,也這種情況也稱之為Model Bias。如下圖所示,紅色線是真實的資料分布,而這樣的資料分布是非線性的,因為在中間出現了轉折點。因此我們需要更具彈性的Model

Sigmoid Function

這裡我們的目的是求出一個Function(Model),可以最接近上圖的紅線,其中一種作法如下圖。我們將好幾組這樣的藍線組合再加上一個常數就能得到一個最接近紅線的結果了。而這個藍線就叫做Sigmoid Function,其數學式如下和其特性如下方兩張圖。因此只需要夠多的Sigmoid Function就能夠得到一個接近紅線的最佳解。

Sigmoid Function細節補充
w可以改變的是線條的斜率
b可以改變的是線條的平移
c可以改變的是線條的高度。

利用Sigmoid Function重建模型

最後我們就可以將一堆Sigmoid Function加起來,並把Model改寫成以下這樣。觀察下圖可以更詳細的了解公式的原理。假設我們今天輸入的天數只有三天,而這三個input都會有各自的參數(w和b),計算完的結果先定義為r1, r2, r3

將上一張圖計算出來的r1, r2, r3接續做Sigmoid Function的計算並且加總起來,最後加上一個b,就是我們這個Model的構造了。

Loss計算以及Optimization方法

這裡要先定義幾個名詞,我們先前一直以來輸入的x,其對應的專有名詞為feature,而其它我們要求的參數,也就是Unknown parameters,將這些參數全部串接起來稱為Theta(如下圖)。

而這裡做Optimization的方法和先前相同,是利用Gradient Descent的方式,根據前面定義的Theta,這裡一樣要利用MAE計算Loss,並且做偏微分我們就可以如下圖所示來定義我們的Gradient,這裡用g來表示。

Optimization細節

這裡要注意的是,假設今天資料量非常龐大,一般來說我們會因為記憶體大小的限制,而沒辦法一次將所有資料餵給模型訓練,除此之外,將資料做切割後再餵給模型對模型的訓練會有一定的好處,細節會再後續章節介紹。因此這裡會需要將資料切分成好幾個batch,每次就是將一個batch餵給模型,並且做一次的update,而當所有的batch都做過一次update,此時就叫做一個epoch

Rectified Linear Unit (ReLU)

這裡要額外介紹另外一個Function,叫做Rectified Linear Unit (ReLU),這個Function和Sigmoid Function都稱作為Activation Function。其公式為

f(x) = max (0, x)

而這部份由於有先做過實驗,發現Relu的效果比Sigmoid還要更好,因此在這裡直接將Sigmoid換成Relu。

建立多層結構

我們可以將剛剛建立的模型結構往後再延伸一層,新的這層的輸入就是先前那層的輸出,而新的這層的結構也和先前是一樣的。而這樣一層就叫做一個hidden layer,每一個layer都會有好幾組的input和output,而這樣一組就稱為一個Neuron,因此整個架構就稱作Neural Network。最後,如果疊加更多的layer,就形成所謂的Deep Learning

實驗結果

最終實驗結果,每一層有100個ReLU,並且輸入的Feature為過去56天的資料,實驗結果如下,當建構3層layer時的Loss最低,但也不是越多層越好,因為到了建構4層時,雖然訓練資料的Loss降低了,但2021(模型未看過)的資料的Loss反而升高了,而這種情況就叫做Overfitting,代表訓練出來的模型沒有針對新資料的彈性,只能用來處理看過的資料。

教材及影片來源:
https://www.youtube.com/watch?v=Ye018rCVvOo&list=PLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2J
https://www.youtube.com/watch?v=bHcJCp2Fyxs&list=PLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2J&index=2

--

--