- 簡書無法顯示MathJax數學公式,請到這里閱讀: 我的機器學習筆記(二) - 單變量線性回歸
- 課程地址:Linear Regression with One Variable
- 課程Wiki:Linear Regression with One Variable
- 課件:PPT PDF
- 擴展閱讀:Complete Course Notes
-
模型展示
-
訓練集
-
什么是訓練集(Training Set)?有訓練樣例(training example)組成的集合就是訓練集。如下圖所示,右邊的兩列數據就是本例子中的訓練集, 其中\((x, y)\)是一個訓練樣例,\((x^{(i)}, y^{(i)})\)是第\(i\)個訓練樣例。
-
假設函數
通過訓練集和學習算法我們就可以得到假設函數(Hypothesis Function),假設函數記為h。在房屋的例子中,我們的假設函數就相當于一個由房屋面積到房屋價格的近似函數,通過這個假設就可以得出相應面積房屋的估價了。如下圖所示:
那么我們該如何表示假設函數呢?在本例中,只有一個變量x(房屋的面積),我們可以將假設函數h以如下的形式表示:<font size='4'>$${h_\theta(x)=\theta_0+\theta_1x}$$</font>為了方便$h_\theta(x)$也可以記作$h(x)$。這個就叫做單變量的線性回歸(Linear Regression with One Variable)。(Linear regression with one variable = Univariate linear regression,univariate是one variable的裝逼寫法。) 如下圖所示。
-
代價函數
在剛才的假設函數中有兩個未知的參數$\theta_0$和$\theta_1$,當選擇不同的$\theta_0$和$\theta_1$時,我們模型的效果肯定是不一樣的。如下圖所示,列舉了三種情況下的假設函數。
那么我們該如何選擇這兩個參數呢?我們的想法是選擇$\theta_0$和$\theta_1$,使得對于訓練樣例$(x,y)$,$h_\theta(x)$最接近$y$。即,使每個樣例的估計值與真實值之間的差的平方的均值最小。用公式表達為:
<font size='4'>$${\mathop{minimize}\limits_{\theta_0,\theta_1} \frac{1}{2m}\sum_{i=0}m\left(h_\theta(x{(i)})-y{(i)}\right)2}$$</font>
將上面的公式minimize右邊部分記為$J(\theta_0,\theta_1)$:
<font size='4'>$${J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=0}m\left(h_\theta(x{(i)})-y{(i)}\right)2}$$</font>
這樣就得到了我們的代價函數(Cost Function)$J(\theta_0,\theta_1)$,我們的目標就是<font size='4'>$$\mathop{minimize}\limits_{\theta_0,\theta_1}J(\theta_0,\theta_1)$$</font>
-
代價函數II
現在為了更方便地探究$h_\theta(x)$與$J(\theta_0,\theta_1)$的關系,我們先令$\theta_0$等于0。這樣我們就得到了簡化后的假設函數,相應地也可以得到簡化的代價函數。如圖所示:
簡化之后,我們再令$\theta_1=1$,就得到$h_\theta(x)=x$如下圖左所示。圖中三個紅叉表示訓練樣例,通過代價函數的定義我們計算得出$J(1)=0$,對應下圖右中的$(1,0)$坐標。
重復上面的步驟,再令$\theta_1=0.5$,得到$h_\theta(x)$如下圖左所示。通過計算得出$J(0.5)=0.58$,對應下圖右中的$(0.5,0.58)$坐標。
對于不同的$\theta_1$,可以得到不同的假設函數$h_\theta(x)$,于是就有了不同的$J(\theta_1)$的值。將這些點連接起來就可以得到$J(\theta_1)$的曲線,如下圖所示:
-
代價函數III
在上一節中,我們令$\theta_0$等于0,得到$J(\theta_1)$的曲線。如果$\theta_0$不等于0,例如$\theta_0=50$, $\theta_0=0.06$,此時就有兩個變量,很容易想到$J(\theta_1)$應該是一個曲面。
這個圖是教授用matlab繪制的,由于3D圖形不太方便我們研究,我們就使用二維的等高線(上圖右上角教授寫的contour plots/figures),這樣看上去比較清楚一些。如下圖右,越往里表示$J(\theta_0,\theta_1)$的值越小(對應3D圖中越靠近最低點的位置)。下圖左表示當$\theta_0=800$, $\theta_1=0.15$的時候對應的$h_\theta(x)$,通過$\theta_0$, $\theta_1$的值可以找到下圖右中$J(\theta_0,\theta_1)$的值。
類似地:
我們不斷嘗試直到找到一個最佳的$h_\theta(x)$,使得$J(\theta_0,\theta_1)$最小。當然我們不可能隨機猜測或者手工嘗試不同參數的值。我們能想到的應該就是通過設計程序,找到最佳的$h_\theta(x)$,也就是最合適的$\theta_0$和$\theta_1$。
-
梯度下降I
我們先直觀的感受一下什么是梯度下降(Gradient Descent)。想要找到最合適的$\theta_0$和$\theta_1$,我們可以先以某一$\theta_0$和$\theta_1$開始,然后不斷改變$\theta_0$和$\theta_1$的值使得$J(\theta_0,\theta_1)$值不斷減小,直到找到一個最小值。
如下圖所示,從某一點開始,每次沿著一定的梯度下降直到到達一個極小值為止。
當從不同的點開始時(即不同的$\theta_0$和$\theta_1$),可能到達不同的最小值(極小值),如下圖:
現在我們大概知道什么是梯度下降了,就好比下山一樣,不同的山路有不同的坡度,有的山路走得快有的走得慢。一直往地處走有可能走到不同的最低點。那么我們每次該如何應該如何改變$\theta_0$和$\theta_1$的值呢?如下圖所示,這里提到了梯度下降算法(Gradient Descent Algorithm),其中$:=$表示賦值,$\alpha$叫做學習率,$\frac{\partial}{\partial\theta_j}J(\theta_0, \theta_1)$叫做梯度。這里一定要注意的是,算法每次是同時(simultaneous)改變$\theta_0$和$\theta_1$的值,如圖下圖所示。
-
梯度下降II
現令$\theta_0$等于0,假設一開始選取的$\theta_1$在最低點的右側,此時的梯度是一個正數。根據上面的算法更新$\theta_1$的時候,它的值會減小,即靠近最低點。
類似地假設一開始選取的$\theta_1$在最低點的左側,此時的梯度是一個負數,根據上面的算法更新$\theta_1$的時候,它的值會增大,也會靠近最低點。
如果一開始選取的$\theta_1$恰好在最適位置,那么更新$\theta_1$時,它的值不會發生變化。
學習率$\alpha$會影響梯度下降的程度。如果$\alpha$太小,根據算法,$\theta$的值每次會變化的很小,那么梯度下降就會非常慢;相反地,如果$\alpha$過大,$\theta$的值每次會變化會很大,有可能直接越過最低點,可能導致永遠沒法到達最低點。
隨著越來越接近最低點斜率(絕對值)會逐漸減小,每次下降程度就會越來越小。所以并不需要減小$\alpha$的值來減小下降程度。
-
梯度下降III
現在我們所要做的就是將梯度下降算法應用到線性回歸模型中去,而其中最關鍵的就是計算其中的偏導數項,如下圖所示。
我們將$h_\theta(x{(i)})=\theta_0+\theta_1x{(i)}$帶入到$J(\theta_0,\theta_1)$中,并且分別對$\theta_0$和$\theta_1$求導得:
由此可得到我們的第一個機器學習算法,梯度下降算法:
在我們之前講到梯度下降的時候,我們用到的是這個圖:
起始點不同,會得到不同的局部最優解。但事實上,用于線性回歸的代價函數總是一個凸函數(Convex Function)。這樣的函數沒有局部最優解,只有一個全局最優解。所以我們在使用梯度下降的時候,總會得到一個全局最優解。
下面我們來看一下梯度下降的運行過程:
迭代多次后,我們得到了最優解。現在我們可以用最優解對應的假設函數來對房價進行預測了。例如一個1,250平方英尺的房子大概能賣到250k$,如下圖所示:
最后我們在介紹幾個相關的概念。剛才我們用到的梯度下降也叫作批梯度下降(Batch Gradient Descent)。這里的‘批’的意思是說,我們每次更新$\theta$的時候,都是用了所有的訓練樣例(training example)。當然也有一些其他的梯度下降,在后面的課程中會介紹到。
在后面的課程中我們還會學習到另一種不需要像梯度下降一樣多次迭代也能求出最優解的方法,那就是正規方程(Normal Equation)。但是在數據量很大的情況下,梯度下降比較適用。