1. 程式人生 > >第一個機器學習演算法:線性迴歸與梯度下降

第一個機器學習演算法:線性迴歸與梯度下降

# 第一個機器學習演算法:線性迴歸與梯度下降 ## 符號解釋 * $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)} $$ 至此,我們就得到了兩個引數的迭代