李宏毅教授課程影片 == ## Regression output為數值 一些例子: ![](https://i.imgur.com/P1tp8F2.png) ### Step1:Model ![](https://i.imgur.com/WyT0rPB.jpg) $y = b+w*x_{cp}$ 這是一個linear的model $y = b + \Sigma w_ix_i$ 而w, b 為兩個參數,所以會生成infinite不同model,而等等trianing data會把不可能的w, b 過濾掉 ### Step2:Goodness of Function ![](https://i.imgur.com/ogKJf19.png) 接下來我們要判斷一個function是好是壞 我們會有一堆Model作為input 然後我們定義一Loss function L $L:\\ input:funtion\\ output:這個funtion有多不好$ $\begin{split} L(f)&=L(w,b)\\ &=判斷f之好壞\\&=\displaystyle\sum_{n=1}^{N}(實際數值-使用(b,w)所預測 之數值)^2\\ &=\displaystyle\sum_{n=1}^{N}(\hat{y}^n-(b+w\cdot x^n_{cp}))^2 \end{split}$ ![](https://i.imgur.com/RpZi0qU.png) 用圖表示的話 - 藍色:loss值小 -> 誤差小 - 紅色:loss值大 -> 誤差大 ### Step3:Best Function $找最佳之function\equiv找最小之loss$ ![](https://i.imgur.com/r158ZEm.png) 只要L是可以微分的便可以用gradient Decent 來解 ### 單一參數 ![](https://i.imgur.com/VUiemH9.jpg) 1. 隨機選一初始值$w_0$ 2. 用微分計算斜率,若 - 斜率<0, 增加w(右移) - 斜率>0, 減少w(左移) 3. 移動距離$w_1=w_0-\eta \frac{\mathrm{d}L}{\mathrm{d}w}|_{w=w^0}$取決於目前之 - 微分值$\frac{\mathrm{d}L}{\mathrm{d}w}|_{w=w^0}$,依據目前斜率來看要移動多少,很斜移多一點,很平移少一點 - 事先定好的數值learning rate $\eta$ 4. 不斷重複這操作可以找到local optimal $w^t$ ### 兩個參數 有兩個參數w, b 跟一個參數的操作是一模一樣的 $w^*, b^* = argminL(w,b)$ 操作與單一參數是一樣的 1. 隨機隨機選初始值$w^0, b^0$ 2. 計算$w^0, b^0$之偏微分 3. 算出移動到的下個點$w_1=w_0-\eta \frac{\partial L}{\partial w}|_{w=w^0}\\b_1=b_0-\eta \frac{\partial L}{\partial b}|_{b=b^0}$ 4. 不斷重複這操作,找到local optimal $w^t, b^t$ ![](https://i.imgur.com/bb7UmZg.jpg) 可以求得其微分公式如下 每次偏微分就沿著等高線的切先方向,往loss較低的地方前進。 ### 問題 因為用gragient 求得之loacl optimal 很可能因為你再不同初始位置而得到不同的local 如下圖(左)所表示 ![](https://i.imgur.com/j5sCoJM.jpg) 但是**在linaer regression之情況下**,如果loss function照上面的方法定義,L會是convex$\equiv$就上上面右圖那樣,只會有一個低點,不會有local optimal,會像上圖那樣呈現單一橢圓型,會找到同一組solution ### Result 最關心的是new data放進我們的預測後所產生之error大小 ![](https://i.imgur.com/vLHG8tX.jpg) 從上圖可以看到cp值在較大與較小的地方誤差值較大,為了改善這情可以使用二次式來將低誤差值 ![](https://i.imgur.com/ao5NRqs.png) 由上圖可以看到使用二次式可以明顯降低error值,不管在training或是testing 在不同次方之多項式可以得到不一樣的結果,高次方多項式預測不一定會比較好 ### Overfitting ![](https://i.imgur.com/Tprlhys.png) **Overfitting**:traning data之error下降,但是testing data之error上升之情形 所以我們要找出最適合之model #### Hidden Factors 用寶可夢來看的話不同物種會產生不同之模型 ## 重新設計 ### 使用不同分類 加入不同物種的分類,不同之物種使用不同之lenear function ![](https://i.imgur.com/otNIzjG.png) 上面就分開帶不同的linear function ![](https://i.imgur.com/gKA1sEx.png) 可以整理成一大個linear function,然後用$\delta$來判斷不同物種的分類。 $\delta=1, if \ x_s是某物種 \\ \delta=0, otherwise$ ![](https://i.imgur.com/f2cgCNt.png) 可以看上圖,error值比起沒有分物種的時候下降許多 training(15.4 -> 3.8), testing(18.4 -> 14.3) #### Hidden factors2 可能考慮其他引響因素,weight, height, HP等等,將這三個一起加入training 可以發現training error變得很低,但是testing error爆了 -> 產生overfitting ## 重新Regularization ![](https://i.imgur.com/IAfFvta.png) 在原本之linear function再加入 $\lambda\sum(w_i)^2$ 其中我們會希望 **$w_i$越小越好** $\equiv$ 希望function可以呈現較平滑的狀態 $\equiv$ 再輸入有雜訊的時候,平滑的funtion會受到較小的影響,會有較好的結果 $\lambda$ 值越大,代表smooth的部分影響越大 $\equiv$越平滑 ![](https://i.imgur.com/SaU2JHa.jpg) $\lambda$ 越大對training之error也越大,但是對testing之error則會改善 所以$lambda$之質要自己去調配 ## Conclusion ![](https://i.imgur.com/284n17T.jpg) 所以目前之average error = 11.1 ,如果放到實際情況,error值會更大,接卸來會需要用validation去解決 ### error來源是哪裡? error 之來源可以分成 - bias - variance ## Bias與variance ![](https://i.imgur.com/2294svC.jpg) 令$\hat f$為目標function 做一次實驗的結果為$f^*$ 然後許多次實驗之後取他的期望值$\bar f$ 得 $\bar f$與$\hat f$之距離為**Bias** $f^*$與$\bar f$之距離為**variance** ![](https://i.imgur.com/dst8Ug2.jpg) 根據上面的範例我們可以知道,越高維度的function會產生越大的variance,Bias越小。而越低維度之function 產生較小,Bias越大。 可以得到 variance很大 -> Overfitting bias很大 -> Underfitting ![](https://i.imgur.com/gjVv72F.png) 在未來如果要improve模型的話,要先分析目前是overfitting 或是underfitting ### 【Underfitting】 前面有提到,發生 Underfitting 的根本原因是由於模型太過簡單,所以根本的解決方案就是提高模型的複雜度,可以透過: 1. 增加訓練的疊代次數 2. 調整超參數 ( 修改模型架構 ) 3. 生成更多的特徵來訓練模型 4. 如果有使用正規化 ( Regularization ) 可先將其移除 5. 更換一個更複雜的模型 ### 【Overfitting】 前面有提到,發生 Overfitting 的根本原因是由於模型太過複雜,所以根本的解決方案就是降低模型的複雜度,可以透過: 1. Early Stopping 2. 增加訓練資料(很強的方法,但是實際上很困難,因為資料有限) 3. 降低特徵維度 4. 如果沒有使用正規化 ( Regularization ) 可以將其加入 5. 調整超參數 ( 修改模型架構 ) ## Validation 因為training set之後我們會用testing set去判斷他好壞,但是testing set又分public與private,public已知而private未知,往往會public 之error很低但是private error會增加 model在訓練的時候只仰賴training set,不能用testing set不然會失準,所以將data set 分為training / test / validation,用validation set 去檢驗再挑出最適合的model ### Cross Validation ![](https://i.imgur.com/Y3m15RG.jpg) 將trainig set 分為training set 與 validation set training set -> 用來train model validation set -> 用來選model 令 現在model 3表現最好,則選擇再用全部的training set train 一次model 3 (盡量選一次就好,不要太在意public set的值) ### N-fold Cross Validation 如果不相信某次分training set跟validation set的結果,可以 將training set 分N等份,用輪轉的方式分別做trainig 與validation,再取其Avg error最佳的model,再拿去testing set 測 ![](https://i.imgur.com/IcN9YTV.jpg) 上面分別用兩個trainig set 做model, 一個validation做檢測,輪流用,再看最後平均的error。 往往一直調整public 的training set會造成private分數下降的狀況 ## 參考資料 https://www.youtube.com/watch?v=fegAeph9UaA https://www.youtube.com/watch?v=D_S6y0Jm6dQ https://jason-chen-1992.weebly.com/home/-bias-variance-tradeoff https://ithelp.ithome.com.tw/articles/10240556