[學習筆記] 機器學習: 應用上的建議 (Machine Learning: Advice for Applying Machine Learning)

假設我們實作 regularized linear regression 來預測股價.

\( J(\theta) = \frac{1}{2m} [\sum_{i=1}^{m} (h_{\theta}(x^{(i)})-y^{(i)})^2 + \lambda \sum_{j=1}^{n}\theta_j^2] \)

當我們餵進一組新的數據來預測股價時, 如果發現誤差過大, 接下來應該怎麼做?

有下列可能的方法:

1. 取得更多的 training examples.

2. 縮減 feature 數

3. 增加新的 feature

4. 增加 polynomial features (\(x_1^2, x_2^2, x_1x_2, etc\))

5. 把 \(\lambda\) 調小

6. 把 \(\lambda\) 調大

但哪一種作法真的有效? 在什麼情況下應採取什麼作法? 盲目地去嘗試各種作法會耗費很多時間但沒有效果.

Machine learning diagnostic 是一種 test, 有助於判斷上述的作法是否真的有用, 使得我們能夠根據有效的作法來改善 machine learning 的準確度.

實作 diagnostic 需要花費一些時間, 但可避免耗費更多的時間在嘗試各種可能性.

評估 hypothesis function 準確度的方式


Hypothesis function 可能讓 cost function minimized, 對於 training examples 誤差極低, 但對於新的 example 卻有很大的誤差, 亦即 hypothesis function 是 over-fitting.

因此, 在評估 hypothesis function 的準確度時, 我們可以把 training examples 分為 2 組:

1. training set: 大約占 70%.

2. test set: 大約占 30%.

使用這 2 組 training examples 的步驟:

1. 使用 training set 來學習 \(\Theta\) 以 minimize \(J(\Theta)\)

2. 使用 test set 來計算誤差 \(J_{test}(\Theta)\)
Linear regression: \( J_{test}(\Theta) = \frac{1}{2m_{test}}\sum_{i=1}^{m_{test}}(h_{\Theta}(x_{test}^{(i)})-y_{test}^{(i)})^2 \)

Classification: \( J_{test}(\Theta) = \frac{1}{m_{test}}\sum_{i=1}^{m_{test}}err(h_{\Theta}(x_{test}^{(i)}), y_{test}^{(i)}) \)
\(
err(h_{\Theta}(x), y) = \begin{cases}
1, & \text{if } h_{\Theta}(x) \geq 0.5 \text{ and } y = 0, \text{or } h_{\Theta}(x) \lt 0.5 \text{ and } y = 1 \\
0, & \text{otherwise}.
\end{cases}
\)

Model Selection


在選擇 hypothesis function 時, 需要評估不同 polynomial degree 的 hypothesis function 的準確度. 因此我們需要把 training examples 分為 3 組:

1. training set: 大約占 60%.

2. cross validation (cv) set: 大約占 20%.

3. test set: 大約占 20%.

使用這 3 組 training examples 的步驟:

1. 對於每一個 polynomial degree, 使用 training set 來學習 \(\Theta\) 以 minimize \(J(\Theta)\)

2. 使用 cross validation set 找出 \(J_{cv}(\Theta)\) 最小的 polynomial degree d
Linear regression: \( J_{cv}(\Theta) = \frac{1}{2m_{cv}}\sum_{i=1}^{m_{cv}}(h_{\Theta}(x_{cv}^{(i)})-y_{cv}^{(i)})^2 \)
3. 使用 test set 估計 generalization error \(J_{test}(\Theta^{(d)})\)
Linear regression: \( J_{test}(\Theta) = \frac{1}{2m_{test}}\sum_{i=1}^{m_{test}}(h_{\Theta}(x_{test}^{(i)})-y_{test}^{(i)})^2 \)

判斷準確度不足是屬於 high bias 或是 high variance 問題的方式



High bias (偏差過大) 是由於 underfitting, high variance (變化過大) 是由於 overfittng.

判斷準確度不足是屬於 high bias 或是 high variance 問題, 有助於決定準確度的改善方向.

由上圖可知, degree of polynomial 過低, 會導致 high bias; degree of polynomial 過高, 會導致 high variance.


如上圖所示, 判斷是屬於 high bias 或是 high variance 問題的方式:
High bias (underfitting): \(J_{train}(\Theta)\) 和 \(J_{cv}(\Theta)\) 都很大, 而且 \(J_{cv}(\Theta) \approx J_{train}(\Theta)\).

High variance (overfitting): \(J_{train}(\Theta)\) 低, 而且 \(J_{cv}(\Theta) \gg J_{train}(\Theta)\).

其中, for linear regression:
\( J_{train}(\Theta) = \frac{1}{2m_{train}}\sum_{i=1}^{m_{train}}(h_{\Theta}(x_{train}^{(i)})-y_{train}^{(i)})^2 \)

\( J_{cv}(\Theta) = \frac{1}{2m_{cv}}\sum_{i=1}^{m_{cv}}(h_{\Theta}(x_{cv}^{(i)})-y_{cv}^{(i)})^2 \)

Regularization 和 Bias/Variance 的關聯性


先前我們瞭解到 cost function 加入 regularization term 有助於避免 overfitting, 但整體而言 regularization 和 bias 及 variance 的關聯性是怎麼樣呢?

以下列的 linear regression with regularization 為例:

\( h_{\theta}(x) = \theta_0 + \theta_1 x + \theta_2 x^2 + \theta_3 x^3 + \theta_4 x^4 \)

\( J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 + \frac{\lambda}{2m}\sum_{j=1}^{n}\theta_j^2 \)

\( J_{train}(\Theta) = \frac{1}{2m_{train}}\sum_{i=1}^{m_{train}}(h_{\Theta}(x_{train}^{(i)})-y_{train}^{(i)})^2 \)

\( J_{cv}(\Theta) = \frac{1}{2m_{cv}}\sum_{i=1}^{m_{cv}}(h_{\Theta}(x_{cv}^{(i)})-y_{cv}^{(i)})^2 \)


由上圖可知:
\(\lambda\) 太大時, 經過 training 後, \( \theta_1, \theta_2, \theta_3, \theta_4 \) 會趨近於 0, 使得 \(h_{\theta}(x) \approx \theta_0\), 導致 high bias (underfitting).

\(\lambda\) 太小時, 因為 degree of polynomial 過大, 會導致 high variance (overfitting).
如何找出合適的 \(\lambda\) 呢?


作法如下 (基本上是把 model selection 的作法套用在選擇合適的 \(\lambda\)):

1. 選定一組 \(\lambda\). 例如: \(\lambda \in \{0, 0.01, 0.02, 0.04, 0.08, 0.16, 0.32, 0.64, ... 10.24\}\).

2. 對於每一個 \(\lambda\), 使用 training set 來學習 \(\Theta\) 以 minimize \(J(\Theta)\).

3. 使用 cross validation set 找出 \(J_{cv}(\Theta)\) 最小的 \(\lambda\).

4. 使用 test set 估計 generalization error \(J_{test}(\Theta^{(d)})\)

學習曲線 (learning curves)


學習曲線描繪出隨著 training example 數量的增加, training error (training set error, \(J_{train}(\Theta)\)) 及 test error (cross validation set error, \(J_{cv}(\Theta)\)) 的變化.


如上圖所示, 當 training example 數量很小時, 舉例來說若只有 1 到 3 個, 很容易以 quadratic curve 來 fit, 因此 \(J_{train}(\Theta)\) 很小; 隨著 training example 數量增大, 越來越不容易 curve fit, 因此 \(J_{train}(\Theta)\) 會逐漸增加.

當 training example 數量很小時, 預測新的 example 的能力較低, 因此 \(J_{cv}(\Theta)\) 很大; 隨著 training example 數量增大, 預測新的 example 的能力會逐漸提升, 因此 \(J_{cv}(\Theta)\) 會逐漸降低.


如上圖所示, 在 high bias 的情況下:
當 training example 數量小時, training error 低, test error 高.

隨著 training example 數量增加, test error 降低會趨緩, 使得對於降低 test error 沒有太大的幫助.

當 training examples 數量大時, training error 和 test error 都高, 而且彼此相近.

如上圖所示, 在 high variance (low bias) 的情況下:
當 training example 數量小時, training error 低, test error 高.

隨著 training example 數量增加, training error 會增加, 而 test error 會持續降低.

當 training examples 數量大時, training error 和 test error 之間仍有顯著的 gap.

總結


假設我們實作 regularized linear regression 來預測股價.

當我們餵進一組新的數據來預測股價時, 如果發現誤差過大, 接下來應該怎麼做?

1. 取得更多的 training examples: 有助於解決 high variance 的問題.

2. 縮減 feature 數: 有助於解決 high variance 的問題.

3. 增加新的 feature: 有助於解決 high bias 的問題.

4. 增加 polynomial features (\(x_1^2, x_2^2, x_1x_2, etc\)): 有助於解決 high bias 的問題.

5. 把 \(\lambda\) 調小: 有助於解決 high bias 的問題.

6. 把 \(\lambda\) 調大: 有助於解決 high variance 的問題.

神經網路架構的設計考量


1. 小型神經網路 (較少的 layer 數, 較少的 unit 數): 比較容易遇到 underfitting 的問題. 運算量較小.

2. 大型神經網路 (較多的 layer 數, 較多的 unit 數): 比較容易遇到 overfitting 的問題. 運算量較大. 可以藉由 regularization 來解決 overfitting 的問題.

一開始可以試著採用單一個 hidden layer. 可以試著觀察不同 hidden layer 數的情況下, cross validation set error 的差異, 據此選擇適當的 hidden layer 數.

模型複雜度的效應 (Model Complexity Effects)


複雜度較低的模型 (degree of polynomial 較低): 會有比較大的 bias.

複雜度較高的模型 (degree of polynomial 較高): 對於 training set 能夠較準確的預測, 但對於新的 data set 則預測的誤差較大, 會有比較大的 variance.

我們的目標是找出複雜度適當的模型, 使得能夠適當地 fit training set, 且對於新的 data set 的預測也能夠達到期望的準確度.

延伸閱讀


[Coursera] Machine Learning: Neural Networks: Advice for Applying Machine Learning, by Andrew Ng, Stanford University