第一個機器學習演算法:線性迴歸與梯度下降
阿新 • • 發佈:2020-03-21
# 第一個機器學習演算法:線性迴歸與梯度下降
## 符號解釋
* $x^{(i)}$,$y^{(i)}$:某個訓練樣本
* $m$:樣本總數量
* $h_{\theta}$:假設函式
## Linear regression(線性迴歸)
### 如何獲得一個線性迴歸模型?
* 將**訓練資料**放入**學習演算法**,演算法通過計算得到一個**假設函式**。
* 將$x$ (需要預測的資料),通過$h_\theta$ (假設函式)後,得到$y$ (估計值)。
### 線性迴歸的假設函式(hypothesis)的表現形式
$$
h_\theta(x)=\theta_0+\theta_1x
$$
很顯然這是一個一次函式,使用一次函式是為了方便學習。為了簡便,我們通常簡寫成:
$$
h(x)=\theta_0+\theta_1x
$$
### $\theta_0$與$\theta_1$這兩個引數代表的意義
學過一次函式的都知道代表的是什麼。$\theta_0$在這裡代表的是截距,$\theta_1$代表斜率。在這裡我們將會不斷調整截距和斜率,儘量得到一個合適的假設函式。我們需要儘量減少真實資料和假設函式的輸出之間的平方差。
### 平方差函式
* 方差
* 表示式$\frac{1}{m}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2$
* 還記得距離公式嗎?$x^2+y^2=d^2$,因為我們是根據訓練資料得出的假設函式,所以x的值其實是相同的。
* 方差越小,說明假設函式的資料與訓練資料越貼合,越貼近,假設函式就越準確。
* 平方差函式(**代價函式**)
$$
J(\theta_0,\theta_1)=\frac{1}{2m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2
$$
而我們的目標是:
$$
\mathop{minisize}\limits_{\theta_0\theta_1}\frac{1}{2m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2
$$
就是希望找到一對$\theta_0\theta_1$使得方差函式是最小的。
## Gradient descent 梯度下降
在上面我們明確了我們的目標:
$$
\mathop{minisize}\limits_{\theta_0\theta_1}\frac{1}{2m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2
$$
我們需要一種高效的方法,去尋找方差最小時的解。
### 梯度下降的形象描述
想像一下你在一座大山上,在梯度下降演算法中我們要做的就是旋轉360度,看看我們的周圍,並問自己我要在某個方向上用小碎步儘快下山。如果我們站在山坡上的這一點,你看一下週圍你會發現最佳的下山方向,現在你在山上的新起點上 ,你再看看周圍,然後再一次想想 ,我應該從什麼方向邁著小碎步下山? 然後你按照自己的判斷又邁出一步 ,往那個方向走了一步,然後重複上面的步驟 ,從這個新的點,你環顧四周,並決定從什麼方向將會最快下山 ,然後又邁進了一小步,又是一小步,並依此類推,直到你接近區域性最低點的位置。
### 梯度下降的數學表達
梯度下降是一種不斷且同時更新的。我們採用一次函式來學習,因此只需要更新兩個值:
$$
\theta_j=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)
$$
其中$\alpha$是成長速率,就是每一次更新的步長。
其中要注意的是,$\theta$是先計算出來再賦值。也就是說,所有$\theta$的更新不會因為別的$\theta$先更新了而被影響。
### $\alpha$的大小對梯度下降的影響
* $\alpha$太小,會導致更新迭代速率慢,要很久才能找區域性最優解。
* $\alpha$太大,會導致無法靠近代價函式的底部,會導致演算法是往上走而不是往下走。
因此,$\alpha$要控制好大小,但是直觀點看是寧願偏小也不要過大。
### 為什麼梯度下降找到的是區域性最優解而不是全域性最優解
* 代價函式不一定是隻有一個谷底的,可能有幾個谷底。
* 如果只有一個谷底,那麼梯度下降找到的一定是全域性最優解。
* 而不止一個谷底的時候,我們觀察一下表達式:
$$
\theta_j=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)
$$
當到達某個谷谷底,但該谷底不是最優的。那麼此使後面的微積分項代表的是函式的斜率,此時一定為0。那就說明,只要達到谷底,函式就會停止迭代,不會繼續去尋找真正的全域性最優解。
* 因此我們可以得出一個結論:一開始選的起始點會影響最後解的結果,迭代出來的不一定是全域性最優解。
## 兩者結合,得到第一個簡單的機器學習演算法
這裡是使用一次函式做例子,如果不是一次函式那推廣即可。
### 推導
$$
J(\theta_0,\theta_1)=\frac{1}{2m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2 \tag{1}
$$
$$
\theta_j=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)\tag{2}
$$
將(1)代入(2):
$$
\theta_j=\theta_j-\alpha\frac{\partial}{\partial\theta_j}\frac{1}{2m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2 \tag{3}
$$
將1和0分別代入$\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)$,可得
$$
j=0:\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1)=\frac{1}{m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})\tag{4}
$$
$$
j=1:\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1)=\frac{1}{m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})·x^{(i)}\tag{5}
$$
將(4),(5)代入(2),得:
$$
\theta_0=\theta_0-\alpha\frac{1}{m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})
$$
$$
\theta_1=\theta_1-\alpha\frac{1}{m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})·x^{(i)}
$$
至此,我們就得到了兩個引數的迭代