---
# System prepended metadata

title: '下學期第一堂社課 : 機器學習(2)––Linear Regression'
tags: [筆記&講義]

---

# 下學期第一堂社課 : <br>機器學習(2)––Linear Regression

---

# Cost Function

![IMG_0740](https://hackmd.io/_uploads/H1rrk_Jop.jpg =85%x)

為了要優化$h_\theta(x)$，我們定義了另一條式子:
$$J(\theta)=\frac{1}{2}\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2$$
>$m:$ training examle數量(訓練資料筆數)

這條式子叫**cost function**，
$h_\theta(x^{(i)})$是我們將特徵值$x$輸入後得出的預測值，
所以$h_\theta(x^{(i)})-y^{(i)}$就是殘差(預測值與實際值的差值)。
最後掛上平方及乘上$\frac{1}{2}$，
至於乘上$\frac{1}{2}$的原因我們之後會有統計上的解釋。

:::success
有沒有發現，這其實就是我們所熟悉的**最小平方法**公式。
:::

---

# LMS Algorithm

## 公式
我們現在的目標是要最小化$J(\theta)$，
實現**最小均方(Least Mean Square, LMS)**。

首先，我們會先**隨機初始化$\theta$**，
接著重複調整$\theta使得h_\theta(x^{(i)})$盡可能接近$y$，
這樣$J(\theta)$就會越來越小。

具體來說，
有一個演算法叫做**梯度下降(Gradient descent)**，
梯度下降調整$\theta$的公式如下:
$$\theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta)$$
>$\partial:$ 偏微分符號
>$\alpha:$ 學習率(learning rate)
>$:=\;:$ 令...為...，就是程式裡的宣告變數的意思，注意不是等號$(=)$

:::info
這邊的$\theta_j$是全部一起調整的$(j=1,2,...,d)$。
:::

## 直觀意義與梯度

![image](https://hackmd.io/_uploads/r1SkasCha.png)

>X、Y : 可以想成是$\theta_1、\theta_2$
>Z : cost function的值
:::info
圖中那塊圖形就是在各個$\theta_1、\theta_2$所繪製出的cost function
:::

我們可以看到中間那條紅線就是在最小化cost的過程，
我們先隨機初始化$\theta$，
接著一路往整個cost function的最低處優化。

所以為了在下降過程有最高的效率，
我們會選最陡的路徑來下降
也就是選擇最陡的**梯度**

![image](https://hackmd.io/_uploads/HkicSpR3T.png =60%x)

## 數學意義與梯度

![Kljnc4](https://hackmd.io/_uploads/H1AmpaR26.png =70%x)
為了講述數學意義，
要先知道什麼是導數。

:::info
導數就是一條方程式中某個點的的切線斜率
偏導數就是在一多變量方程中，
固定其中一個變量所做的切線斜率。
:::

那如果要求在圖形上任意方向的導數(稱為方向導數)，
那此導數就必須是偏導數(坐標軸方向的方向導數)的線性組合。

而梯度就是有最大(小)值的方向導數


![Kl27an](https://hackmd.io/_uploads/rJsda1kT6.png =90%x)

所以梯度方向就會垂直等高線方向，
因為方向導數最大(最陡)

:::success
參考 : https://www.cnblogs.com/shine-lee/p/11715033.html
:::

## 參數更新與學習率

#### 公式 :
$$\theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta)$$
$\alpha$是個浮點數，
會影響到每次更新$\theta$時的速度，
**$\alpha$越大，更新幅度越大。**
:::warning
過大的$\alpha會使得J(\theta)$無法至最優解(就像跑步速度快就無法在精準位置停下)
$\alpha$過小則會讓學習速度緩慢，效率低下。
:::

![IMG_0772](https://hackmd.io/_uploads/SJp3IaC3a.jpg =60%x)

上面這張圖為例子，
學習率影響的是兩個值之間的距離，
所以在接近收斂時如果學習率過大，
則**無法最接近收斂值**。


為了搞懂右邊那坨東西是怎麼運作的，
我們先做一些運算:
(在這裡training example數量=1，以讓$J(\theta)$運算方便)
$$\begin{aligned}\frac{\partial}{\partial\theta_j}J(\theta)
&=\frac{\partial}{\partial\theta_j}\frac{1}{2}(h_\theta(x)-y)^2\\
&=2\cdot\frac{1}{2}(h_\theta(x)-y)\cdot\frac{\partial}{\partial\theta_j}(h_\theta(x)-y)\\
&=(h_\theta(x)-y)\cdot\frac{\partial}{\partial\theta_j}(\sum^d_{i=0}\theta_ix_i-y)\\
&=(h_\theta(x)-y)x_j
\end{aligned}$$
所以更新$\theta$的式子最後會是:
$$\theta_j:=\theta_j+\alpha(y^{(i)}-h_\theta(x^{(i)}))x_j^{(i)}$$
這條式子被稱作**LMS update rule**，
又被稱為**Widrow-Hoff learning rule**。
從直觀上來看，
**預測值與實際相值差越多，
$\theta$就會有較大幅度的改動。**

最後可以這樣表示$\theta$經過所有更新後的收斂狀態 :
$$\theta:=\theta+\alpha\sum^n_{i=1}(y^{(i)}-h_\theta(x^{(i)}))x^{(i)}$$

---

部分圖片來源: Stanford CS229、網路