652
技術社區[雲棲]
單變量線性回歸原理解析
Linear Regression with one Variable(單變量線性回歸)
Model and Cost Function(模型和損失函數)
給出一個房價預測的例子,x軸是房子的大小,y軸是房子的價格,圖中標注了一些房子作為數據集,而這些點被稱為標注數據(labeled data),利用這樣的數據來預測的方法稱為:監督學習。監督學習分為兩類:分類與回歸,此時,作為預測房價的這個例子是監督學習中的回歸例子。
$m$代表是數據集的個數,$x's$是輸入變量或者特征,$y's$是輸出變量或者目標變量。
整個預測的過程可以歸結為如下圖:
通過訓練數據,將數據輸入到算法裏麵,我們能得到一個關於這個模型的一個假設$h$,然後利用這個假設$h$我們將其他輸入變量輸入到該假設中就會得到我們想要的預測結果$y$。那麼對於單變量的線性回歸我們用如下公式來表示:
$$h_θ(x) = θ_0 + θ_1x$$
線性模型其意思是模型是呈現線性變化的,為什麼對於該房價的例子我們要采用單變量的,其原因是該模型的未知參數僅有一個$x$來決定。
對於假設函數其包含兩個參數,$θ_0$和$θ_1$,那麼如何來確定這兩個參數來使得得出的假設函數直線更好的擬合數據集或者換句話說如何才能判斷假設函數所產生的誤差最小?
所以,給出如下定義:
$$minimize{1\over2m}\sum^{m}_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2$$
$$h_\theta(x^{(i)}) = \theta_0 + \theta_1x^{(i)}$$
第一個公式是最小化預測值與真實值差的平方的值,也叫作均方誤差值,是衡量誤差的一種方式。第二個公式是我們的假設函數。有時我們更喜歡寫成如下形式:
$$J(\theta_0,\theta_1) = {1\over2m}\sum^{m}_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2$$
$$minimizeJ(\theta_0,\theta_1)$$
其中的$J(\theta_0,\theta_1)$叫做代價函數(cost function),我們的目的就是最小化代價函數,使得假設函數更加接近真實數據集。為了能更好的解釋代價函數我們舉個例子並畫出能說明其含義的圖來:
左邊的圖在坐標係中分別畫了三個的點$(1,1)$,$(2,2)$,$(3,3)$,假設這就是我們的數據集,那麼現在我們就要對這個數據集進行假設函數的猜測,當然,學過數學的人一眼就能看出在$\theta_0=0$,$\theta_1=1$時,也就是假設函數$h_\theta(x) = x$時是最吻合數據集的,但是假如該數據集不會這樣簡單,不能一眼看出它的擬合線來該怎麼辦呢?注意到,當假設函數越能擬合數據集時,它的代價函數就越接近$0$,所以這就是采用代價函數來選擇參數$\theta_0$,$\theta_1$從而產生出更好的假設函數來擬合數據集的原因。
剛剛上麵的例子圖片采用的二維的圖像,因為圖片中隻包含了兩個參數,$\theta_1$和$J(\theta_1)$,如果是三個參數的圖片則會映射到三維的圖像上麵上:
在這個三維圖片中,圖中的圖片上的點距離“水平地麵”的高度就是它的代價值$J(\theta_0,\theta_1)$,或許我們還可以用另外一種圖片來表示這個三維圖:剖麵圖或者輪廓圖。
從上到下,左邊依次是不同的假設函數直線,右邊依次是不同的輪廓圖,這三個假設直線一個比一個更接近數據集,所以對應的輪廓圖中的代價函數的點會更接近中心區域。所以運用此種圖片可以更加直觀的來判別假設函數的好壞。
Gradient Desent(梯度下降)
就像圖片中畫出的那樣,梯度下降就是以最合適的方向來進行遞減。假如自己站在一個山峰的某以高度,現在想以最快的速度去山底,所以就會問自己以我現在所在的位置我的四周360度的方向上哪一個方向上可以令我下降最快,然後不斷進行迭代和執行,這樣終會在某一時刻會到達山底。
但是又如上圖所示,不可避免的當我所站的位置不一樣,會下降到不同的山底,而這樣的山底其實隻是在我當前的視野中的山底並不是真正的山底,所以,此種方法會受限於$\color{red}{初始位置}$的選擇。換句話說就是會陷入$\color{red}{局部最優}$
下麵讓我們來公式化梯度下降算法:
其中$\alpha$叫做學習率(learning rate),${\partial\over\partial\theta_j}$叫做梯度,$\color{red}{兩者相乘叫做步長}$。
那麼公式化完了梯度下降的公式,讓我們再來看看這個公式所包含的意義和原理:
上圖中有兩個小坐標圖,先來看第一個小坐標圖,注意到在圖的右邊有個紅點,此時在它當前的位置上的導數是個$\color{red}{正數}$,所以對於$\theta_1 := \theta_1 - \alpha{\partial\over\partial\theta_1}$中的$\alpha{\partial\over\partial}$即為$\partial$倍的某一個正數,所以對於更新後的$\theta_1$相當於$\color{red}{減小}$了,所以更新後的$\theta_1$會逐漸靠近圖中的穀底。
而第二個小坐標圖,注意到在圖的左邊有個紅點,此時在它當前的位置上的導數是個$\color{red}{負數}$,所以對於$\theta_1 := \theta_1 - \alpha{\partial\over\partial\theta_1}$中的$\alpha{\partial\over\partial}$即為$\partial$倍的某一個負數,所以對於更新後的$\theta_1$相當於$\color{red}{增加}$了,所以更新後的$\theta_1$也會逐漸靠近圖中的穀底。以上就是梯度下降算法的自更新原理。
對於參數$\alpha$也有選取上的一些注意事項,如果選取的太小則會導致到達最終點的時間過慢,太大的話會導致在最終點附近發生來回震蕩(overshoot):
- 可以看出當前所在的點已經陷入局部最優了,所以此時的$\theta$不會改變並且會停止迭代。
還有一點是需要注意的,$\color{red}{當迭代越來越靠近最優點時,其步長會越來越小}$。因為當趨於最優點時其導數會趨於$0$,所以導致步長越來越小,故隻要確定了合適的學習率$\alpha$就不必擔心步長的大小問題了:
小節測試
- 選項三,$\alpha$選擇過小是有壞處的,會導致函數收斂速度過慢。
- 選項四,存在局部最優點的函數在進行梯度下降時會因為初始點的選擇($\theta_0$,$\theta_1$)的不同導致最終收斂結束後的結果不同。
- 選項三,$J(\theta_0,\theta_1)=0$並不能說明迭代至了局部最優點了,隻能說明假設函數與數據集完全擬合了。
最後更新:2017-06-27 11:33:17