---
# System prepended metadata

title: HY機器學習#1：Introduction
tags: [李宏毅, 機器學習]

---

# 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：找出讓Ｌ最小的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: `機器學習` `李宏毅`
