# HY機器學習#1:Introduction https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/regression%20(v16).pdf ## 機器學習:找function * Regression:給出一個預測值  預測隔天PM2.5濃度 * Classification:分類、給出多選一的決定  下圍棋、垃圾郵件分類 * Structure:創造產生有結構的文件  自動畫圖、生成文章 ## 機器學習基本步驟 1. 寫出帶有未知參數的方程式(Model)  例如y=b+wx1 (猜測,需要doamin knowledge)  b為bias w為參數、權重weight  需要靠資料學習找到b w 2. 定義Loss:跟參數b w有關的函數  此函數L(b,w)可從資料得知  令en為第n天預測結果(代入y=b+wx1)以及實際資料的"差"  "差"可以是相減絕對值MAE,也可以是相減平方開根號MSE  (若y是機率分佈,可用Cross-entropy)  L(b,w)即為N天en和的平均,值越小表示Model的品質越好  b w可以各種窮舉,可做出x軸為b y軸為w 點顏色代表L值  進而做出等高線圖(顏色一樣代表等高) 3. 最佳化Optimization:找出讓L最小的w b  Gradient Descent法  假設先看w  隨機選出初始w0,計算L對w之微分並得到w=w0之導數(斜率)  斜率為正:w值變少才能讓L變少,反之則w值增加  根據斜率調整w的值 (值跳動的幅度看斜率的絕對值大小,也跟自己設定的學習速度eta有關)  w1=w0-eta*微分值  如此繼續下去,可以看設定要找幾次或是直到導數非常接近0  此法可以找到Local Min,可能無法找到Global Min  (這還不是此法最大的問題)  不只一個參數:隨機挑選b0 w0  偏微分之b0 w0值、同理更新b w  hyperparameter: 自己設定的參數   **以上只是從已經有的資料得出的結果(不管怎樣都會得到一組參數,符合已知資料的參數),可否預測之後就是個問題** **可從資料去修改Model的形式:讓L更小通常需要多且正確的參數,也可以從線性改成其他形式** ## 模型修改 Model Bias -> Sigmoid 線性Model可能不夠,無法正確描述此模型 (Pieswise Curve:由線段構成的可能轉折的曲線) 修改:常數+一連串的hard sigmoid function(類似斜坡的函數) 平滑的曲線亦可用Pieswise Curve近似 Sigmoid Function:S函數,通常會有三個參數影響此函數形狀 (高度、斜坡坡度、左右位移) s(x)=c+sigmoid(b+wx) ![](https://i.imgur.com/ImVR49U.png) ![](https://i.imgur.com/wOfIdZi.png) y=b+wx1 改成 y=b+Sum[ci*sigmoid(bi+wix1)] 多個參數: y=b+Sum(wixi) 改成 y=b+Sum[ci*sigmoid(bi+Sum(wijxj)] (i為斜坡個數 j為特徵參數個數) 線代寫法:y=b+c(T)*f(B+Wx) c為常數(轉置) f代表通過sigmoid又加起來的函數 B W是sigmiod裡面的參數 y為輸出的值 一樣可以跟實際資料得到Loss Function (此時參數可能非常非常多) 其他步驟同上 g(Gradient): L對各參數對偏微分,再帶入參數值形成的向量 減去eta*g更新參數 若有N筆實際資料,可以分成數個Batch,每次用不同的Batch求出Loss function去更新參數(完整用完全部Batch稱為一次epoch) 斜坡函數除了用Sigmoid表示,亦可用Rectified Linear Unit(ReLU)=c+max(0, b+wx)(水平+斜線往某方向無盡頭的函數) (兩個ReLU可以造出Sigmoid) ## 深度學習Deep Learning Multi Hidden Layer :c(T)*f(B+Wx) 亦可變成新的x 帶入新的c(T)*f(B+Wx) 深vs長:前者可能會有Over Fitting的問題,雖然訓練資料的Loss很少,但測試效果差 ###### tags: `機器學習` `李宏毅`