這幾天的文章會是一系列的,會需要一起看才比較能看懂整個ML模型的輪廓,
然而因為一天能寫的內容量有限,所以我會在前言部分稍微說明我寫到哪。
因為ML模型的訓練階段章節內容會分很多部分,我們要先確認好自己在哪個階段,
以免吸收新內容卻不知道用在內容的什麼地方。
★ML的整個「訓練過程」:這裡以監督式學習(Supervised Learning)
為例
階段 | 要做的事情 | 簡介 |
---|---|---|
(訓練前 ) |
決定資料集與分析資料 | 你想要預測的是什麼資料? 這邊需要先知道 example 、label 、features 的概念。介紹可參考:【Day 15】,而我們這次作為範例的訓練資料集介紹在【Day 19】。 |
(訓練前 ) |
決定問題種類 | 依據資料,會知道是什麼類型的問題。regression problem(回歸問題) ? classification problem(分類問題) ? 此處可參考:【Day 16】、與進階內容:【Day 17】 |
(訓練前 ) |
決定ML模型(ML models) | 依據問題的種類,會知道需要使用什麼對應的ML模型。回歸模型(Regression model) ? 分類模型(Classification model) ? 此處可參考:【Day 18】,神經網路(neural network) ? 簡介於:【Day 25】 |
(模型裡面的參數) | ML模型裡面的參數(parameters) 與超參數(hyper-parameters) 此處可參考:【Day 18】 |
|
(訓練中 ) 調整模型 |
評估當前模型好壞 | 損失函數(Loss Functions) :使用損失函數評估目前模型的好與壞。以MSE(Mean Squared Error) , RMSE(Root Mean Squared Error) , 交叉熵(Cross Entropy) 為例。此處可參考:【Day 20】 |
(訓練中 ) 調整模型 |
修正模型參數 | 以梯度下降法 (Gradient Descent) 為例:決定模型中參數的修正「方向」與「步長(step size) 」此處可參考:【Day 21】 |
(訓練中 ) 調整腳步 |
調整學習腳步 | 透過學習速率(learning rate) 來調整ML模型訓練的步長(step size) ,調整學習腳步。(此參數在訓練前 設定,為hyper-parameter )。此處可參考:【Day 22】 |
(訓練中 ) 加快訓練 |
取樣與分堆 | 設定batch size ,透過batch 從訓練目標中取樣,來加快ML模型訓練的速度。(此參數在訓練前 設定,為hyper-parameter )。與迭代(iteration) ,epoch 介紹。此處可參考:【Day 23】 |
(訓練中 ) 加快訓練 |
檢查loss的頻率 | 調整「檢查loss的頻率」,依據時間(Time-based) 與步驟(Step-based) 。此處可參考:【Day 23】 |
(訓練中 ) 完成訓練 |
(loop) -> 完成 | 重覆過程(評估當前模型好壞 -> 修正模型參數),直到能通過「驗證資料集(Validation)」的驗證 即可結束訓練。此處可參考:【Day 27】 |
(訓練後 ) |
訓練結果可能問題 | 「不適當的最小loss?」 此處可參考:【Day 28】 |
(訓練後 ) |
訓練結果可能問題 | 欠擬合(underfitting) ?過度擬合(overfitting) ? 此處可參考:【Day 26】 |
(訓練後 ) |
評估 - 性能指標 | 性能指標(performance metrics) :以混淆矩陣(confusion matrix) 分析,包含「Accuracy 」、「Precision 」、「Recall 」三種評估指標。簡介於:【Day 28】、詳細介紹於:【Day 29】 |
(訓練後 ) |
評估 - 新資料適用性 | 泛化(Generalization) :對於新資料、沒看過的資料的模型適用性。此處可參考:【Day 26】 |
(訓練後 ) |
評估 - 模型測試 | 使用「獨立測試資料集(Test) 」測試? 使用交叉驗證(cross-validation) (又稱bootstrapping )測試? 此處可參考:【Day 27】 |
(資料分堆的方式) | (訓練前 ) 依據上方「模型測試」的方法,決定資料分堆的方式:訓練用(Training)、驗證用(Validation)、測試用(Test)。此處可參考:【Day 27】 |
★小實驗系列:
文章 | 實驗內容 |
---|---|
【Day 24】 | TensorFlow Playground 的簡介與介面介紹 |
【Day 24】 | learning rate 的改變對訓練過程的影響 |
而今天的文章我們先不討論新東西,我們來做點小實驗。
第三章節的課程地圖:(紅字標記為本篇文章中會介紹到的章節)
TensorFlow Playground
Lab: Introducing the TensorFlow Playground
課程地圖
所以,我們現在知道gradient descent
是如何運作的,
我們現在先使用一些工具來看看這方法實際上運作會是怎麼樣。
你應該會看到很多我們之前有提到的現象。
TensorFlow Playground
是一個非常強大的工具,
他能幫助我們視覺化neural networks
是如何運作的。
(neural networks
稍後章節我們就會介紹了)
事實上,我們現在所介紹的linear models
就是一種簡化的neural networks
所以這個工具也很適合做linear models
的視覺化呈現。
我們會用這個工具來證明我們前面所說的理論知識,可以使我們對ML更有直覺,
我們也會直接了解「設定learning rate
」與ML模型是如何降低梯度的。
我也會指出這些內容與之後主題的關係,這些都會在之後的課程有更深入的探討。
首先,我們先看一下介面,
我們先刪除了某些工具的功能,因為他與我稍後將介紹的內容才有關係,
但依然有許多有趣的功能是我們可以使用的。
features
,這些要給model看的inputs在每一個box裡面的顏色代表的是feature的值,其中橘色代表負值、藍色代表正值,
權重(weights)
,隨著模型的訓練,這條線的寬度與不透明度會逐漸改變,
這樣的視覺化表示也方便我們能夠快速的理解他們的值。
在output column我們可以同時看見training data與我們的model現在預測的值,
以及所有的點在features space裡面的位置
我們也看到目前的training loss
這邊都會以「顏色」來表示值(
features
)
最上方的控制列包含著「重新設定訓練, 開始訓練, 執行單個步驟」的按鈕
還有一個可以下拉的列表,可以調整我們的learning rate
batch size
的大小我們就先以訓練一個「linear model」來替我們分類資料開始吧!
(這圖我另外截的XD,上面寫"Don’t Worry, You Can’t Break It. We Promise.
"滿有喜感的XD)可惡,越是這樣講越讓我想嘗試玩壞看看
當我們點進連結後,我們就會看到TensorFlow Playground的介面,,
我們先介紹一下目前畫面上的配置(不用擔心沒有hidden layers的問題),
在目前我們所看到的介面設定中,這個模型接受一個feature vector
,
並與weight factor
計算內積,再加上bias
,
然後使用計算結果去建立決策邊界(decision boundary)
。
因此我們可以將目前的配置視為linear model
,
我們現在會開始訓練這個model,讓他去嘗試分類一些屬於兩大不同族群的資料。
epochs
的數值增加1
我們說代表weights
的線換了顏色、也改變了大小
現在loss function
的值也改變了
loss的圖形顯示了往下的斜率
output的決策邊界(decision boundary)
也產生了改變
我們移動一下滑鼠靠近目前代表1的weights
,觀察一下weights
目前的大小,
我們現在點擊play的按鈕讓他繼續訓練,但當loss小於0.002時我們就先暫停一下。
(應該會在200 epochs以內)
這時,我們已經完成訓練我們的第一個模型了!
現在讓我們稍微改變一點東西,
首先我們先看不同的learning rates
是怎麼影響模型訓練的。
簡單複習一下:
learning rate
是hyperparameter
,也就是在訓練模型前設定的。
這個值會乘上偏微分的結果,並決定我們weights
要改變(之前我們說的「移動」)的量,
這邊我們先試第一種,我們看看當learning rate
非常小(0.00001)的訓練結果
這邊我們只要先等到約100 epochs即可(大約需要兩秒),然後先暫停訓練。
參考範例連結:https://goo.gl/3pmeKj
- 現在的loss是多少?
- loss的變化是怎麼樣的?
- 然後我們的模型變成了怎麼樣的
weights
?
(調整learning rate
的位置)
learning rate
調整為0.001,並再重新訓練一次
- 現在的loss是多少? (應該會少了很多)
- loss的變化是怎麼樣的?
- 然後我們的模型變成了怎麼樣的
weights
?
learning rate
調整為0.1,並再重新訓練一次
- 現在的loss是多少? (應該會少更多)
- loss的變化是怎麼樣的? (減少的有多快?)
- 然後我們的模型變成了怎麼樣的
weights
?
learning rate
調整為10,並再重新訓練一次
weight
的變化。
- 現在的loss是多少? (應該會少更多)
- loss的變化是怎麼樣的? (減少的有多快?)
- 然後我們的模型變成了怎麼樣的
weights
?
我們觀察loss的曲線下降的速度,應該是非常急遽的下降的。
當我們把這些訓練結果放在一起,我們比較這四種的變化,
並試著用我們學到的最佳化知識解釋看看原因,
(上面這張表是影片實驗結果的整理,正常來說我們的結果應該會有點不一樣,而重跑實驗也會有點不一樣也是同理。)
TensorFlow Playground
幫我們隨機初始化了權重(weights)
,
這也表示我們每次的搜尋都從一個隨機位置開始。
weights
的變化與我們learning rate
的關係,learning rate
增加,weight
也會增加。為什麼呢?
因為我們的模型在訓練的時候走比較大步。
而事實上,當learning rate
為10時,「第一步」改變的weight
最為顯著。
我們發現當learning rate
增加,「loss曲線」也逐漸變陡。
這正與我們之前所分析的結果相同。
coursera - Launching into Machine Learning 課程
若圖片有版權問題請告知我,我會將圖撤掉