這幾天的文章會是一系列的,會需要一起看才比較能看懂整個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 的改變對訓練過程的影響 |
【Day 25】 | 使用神經網路(neural network) 分類資料 |
【Day 25】 | 觀察batch size 如何影響gradient descent |
第三章節的課程地圖:(紅字標記為本篇文章中會介紹到的章節)
TensorFlow Playground
Lab: Practicing with Neural Networks
課程地圖
我們已經知道了linear model
是如何幫我們分類資料集的,
再來我們來看看neural network
是怎麼做的。
不過在那之前,我們需要理解一些新的功能,
我們已經先實作好在 TenserFlow playground 裡面了。
activation
功能Activation
是由激活函數(activation function)
產生的,
在第五課(The Art and Science of ML)時我們會有更詳細的介紹
(不過可能來不及寫到那? 有時間再補一下了~)
現在我們能夠改變的關鍵是激活函數(activation function)
的選擇,
這也是我們該如何從neural networks
區分出linear models
,
而我們以前就是設置線性的激活函數(activation function)
。
自己的註:
前面有提過,
linear models
是一種簡化版的neural networks
隱藏層(hidden layers)
功能hidden layers
的功能允許我們去更改hidden layers
的數量,
同時我們也能更改每一層hidden layers的神經元(neurons)
數量
我們可以先簡單把這段想成「更改資料進入神經網路後的轉換次數」
在每層hidden layer的神經元(neurons)
,會接收所有來自「上一層的結果」,
而「上一層的結果」就會變成「這一層的輸入」,
並且傳遞給所有在這隱藏層(hidden layers)
的神經元,
而我們的整個神經網路就是進行這樣的動作,讓每個神經元都能接收到訊息,
我們可以用簡單的網路(network)架構來比喻用神經元的數量以及他們如何傳遞資訊
batch size
功能前面【Day 23】有介紹過他的意義了,我們會在這個實驗使用他。
再來我們可以使用以下的連結,嘗試去訓練一個能分辨資料集的模型:
然而,這邊與其使用非線性函數的功能來實現,
但我們會建議嘗試只靠修改神經網路(neural network)
架構去改善表現的結果,
(雖然我們目前neural networks
還沒有細講理論,但我們可以先觀察變化)
現在開始,我們可以在這個介面簡單操作,直到你可以訓練出一個良好的網路。
神經網路(neural network)
分類資料
(訓練後)
我們再稍微操作一下之後,應該就能訓練
出一個良好的模型,並且輸出結果可能中間會有包含藍色的多邊形區域,
我們現在要一一的觀察隱藏層(hidden layers)
裡面的內容,
使我們對模型有更直覺的概念,
我們先仔細看第一個hidden layer的神經元(neurons)
(紅色框框的部分第一個)
當我們將滑鼠移到每一個神經元(neurons)
的上方,右側的output也會改為顯示我們的結果。
我們可以觀察每一個神經元(neurons)
,用我們理解最終結果的方式,
特徵(features)X1與X2的值皆已經被編碼在正方形裡面,
顏色表示「在這個神經元」中「X1與X2組合輸出的結果」,
我們依序看過每一格神經元(neurons)
,我們就可以試想一個問題,
如果這些紅色格子內的神經元(neurons)
疊加會是怎麼樣子的呢?
這時我們就可以開始去想,每一個神經元(neurons)
是怎麼樣去參與共同決定最後的決策邊界?
(也就是說,最後輸出的形狀與隱藏層(hidden layers)
有什麼關聯?)
神經元(neurons)
似乎都有對最後的決策邊界貢獻出了幾個邊。現在我們可以用幾何的概念去想,如果「靠我們自己」製造出這個網路並獲得合理的結果的可能性有多小?
batch size
如何影響gradient descent
在TenserFlow playground進行實驗,我們能直接看出我們的直覺是否準確。
我們已經看過神經網路「hidden layer的結果」能用來決定最後的決策邊界(decision boundary)
那只有一層hidden layer的神經網路與很多層hidden layer的差別呢?
我們現在來分類一個螺旋狀的資料集試試看。
我們也可以趁這個機會來了解batch size
是怎麼影響gradient descent
的,
batch size
為1,並以neural network
的架構實驗。再來,我們把batch size
分別設定為10,我們再做一次,
一樣經過300 epochs的時候我們先暫停一下。
最後,我們把batch size
分別設定為30,我們再做一次,
一樣我們也是訓練300個epochs
我們看得出loss曲線的平滑度有明顯的差異,
而且是隨著batch size
增加,平滑度也會增加。
我們能用什麼我們已經知道的知識解釋觀察到的變化呢?
我們就從batch size
會影響gradient descent
的角度下去想,
當batch size
小的時候,
我們的模型「更新參數」的基礎只基於一種example
所計算出的loss。
但是每個example
皆不相同,這就是問題所在。
當batch size
增加的時候,
各個資料集所產生出來的noise(雜訊)
會比較穩定,
漸漸的我們能夠看出比較清楚的特徵。
但是我們不能輕易的依據觀察結果下結論:「batch size
能夠直接對收斂速度產生影響。」batch size
與learning rate
皆為超參數(hyperparameter)
,
所以batch size
會因要訓練的題目不同而有不同,
我們應該使用 hyperparameter tuning 來調整它。
我們的模型完成訓練後,應該會長得像右邊這樣的圖,
第一件事情我們先注意「第一層隱藏層(hidden layer)
」與之後的層之間的關係。
我們應該可以很明顯發現,在第一層隱藏層(hidden layer)
的輸出,基本上都是線。
自己的註:
我稍微想了一下他的意思,應該是指我們可以看到在第一層 hidden layer 中內部的分區圖,基本上都是以「一條線」來區分「白色」與「藍色」區塊的。
在第一層之後的隱藏層輸出複雜很多,這些後續的層是基於前面層的結果堆疊而成,
(與我們上面所說的堆疊方式相同。)
因此,我們可以將neural network
視為特徵的層次架構,
它們從前一層拿取自己的inputs,並以複雜的方式轉換成最終能分類資料的方法。
這個就是最經典的神經網路(neural network)
代表。
這種方法與傳統的機器學習(machine learning)
方法是很不相同的。
在
神經網路(neural network)
之前,
資料科學家花了很多時間做特徵工程(feature engineering)
,
現在我們有ML模型可以幫忙負擔一些工程,
而我們可以將思考layers的意義作為一種特徵工程(feature engineering)
的形式。
過度擬合(over-fitting)
接下來要講到的是模型學到的一些奇怪的東西,
我們的模型似乎將兩個區域中沒有橙色的點,解釋為它是支持藍色的證據。
我們稱「模型將資料集中的雜訊(noise)也解釋了」的錯誤為過度擬合(over-fitting)
自己的註:
也就是白色也等於橘色了,但原本應該只有橘色等於橘色的。
當「模型的決定權」超出了「問題的嚴格必要限制」時,就會發生這樣的情況。
當一個模型是 over-fit 的,它們通常泛化(generalization)
的效果很差,
(也就是對未看過的資料處理能力很差)
比較好的結果應該是保留應該保留的內容,雜訊(noise)
與我們想分析的pattern不應該會有一樣的分類結果
這件事,我們會在往後泛化(generalization)
與取樣(sampling)
的內容仔細討論。
coursera - Launching into Machine Learning 課程
若圖片有版權問題請告知我,我會將圖撤掉