Regression
===
###### tags: `李宏毅`
## 課程資訊
* [影片](https://www.youtube.com/watch?v=fegAeph9UaA&ab_channel=Hung-yiLee)
* [講義](https://drive.google.com/file/d/1iXWaDCofiGRjbC9s6b7YzMmIzaGjDO1h/view?usp=sharing)
## 實作步驟
### 1. 定義 Model
Model 就是一群 Function,只要能寫成 $y=b+\sum_{}^{}w_ix_i$ 形式的就是 Linear Model。

### 2. 判斷 Function 的好壞
需要有足夠的訓練資料,再定義 Loss Function L 就可以判斷一個 Function 的好壞。
Loss Function 的 Input 是一個 Function,可以判斷 Input Function 有多不好,$L(f)=L(w,\ b)$。直接把訓練資料代入 Loss Function 就可以知道目前這個 Input Function 的表現。以下圖的 Loss Function 為例就是把實際的值減掉預測的值的平方和。

### 3. 找到最好的 Function
要做的事情就是把所有 w(weight)、b(bias) 都試一遍,L(Loss Function) 最小的就是最好的 Function。以下圖的 L 來看,其實有 Closed-Form Solution,只是也可以用 Gradient Descent。只要 Loss Function 可微分就可以用 Gradient Descent。

微分值和 η(learning rate) 會決定參數調整的幅度。
$w^1\ = w^0\ -\ η\dfrac{dL}{dw}$
在有些時候參數調整會掉入 Local Minimum,但是我們希望的是 Global Minimum,不過在 Linear Regression 不影響。因為 L 是 Convex,就是說沒有 Local Optimal。

就算有多個參數也一樣,只要對 L 個別做偏微分然後調整值就好。而這個調整值就是 Gradient,下例假設有兩個參數 w、b。
$▽L\ =\left(
\begin{array}{ccc}
\dfrac{∂L}{∂w}\\
\dfrac{∂L}{∂b}\\
\end{array}
\right)$

## Model Selection
在步驟 1 時,只有考慮一次項的 Function,但是其實可以選擇更複雜的 Model。
如下圖,如果使用更高次方的 Model,可以在 Training Data 表現得更好,但是不一定能在 Testing Data 也比較好,這就是 Overfitting。

所以有時候不一定是 Model 不夠好,而是考慮的條件不對。多考慮一些條件才能把 Error 降下去。
## Regularization
在步驟 2 定義了 Loss Function 為實際值減掉預測值得平方和,而 Regularization 則是再加上 w 的平方乘以 λ。也就是說 w 越小越不容易受到 Regularization 的影響,當 w 小時 Function 會比較平滑。而我們喜歡平滑的 Function,因為它比較不受到輸入的影響,也因此給我們比較好的結果。
$L=\sum_{n}^{}(y^n(b+\sum_{}^{}w_ix_i))^2+λ\sum_{}^{}(w_i)^2$

最後的結果除了會針對輸入的 Error 做修正,也會考慮到 w 的大小,所以在 Training Data 不一定表現得比較好,但是在 Testing Data 卻有可能更好。所以選擇 λ 的大小也是重要的因素。
