# 下學期第一堂社課 : <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、網路