單變量線性迴歸

1 模型表示

讓我們通過一個例子來開始:這個例子是預測住房價格的,我們要使用一個數據集,數據集包含俄勒岡州波特蘭市的住房價格。在這裏,我要根據不同房屋尺寸所售出的價格,畫出我的數據集。比方說,如果你朋友的房子是1250平方尺大小,你要告訴他們這房子能賣多少錢。那麼,你可以做的一件事就是構建一個模型,也許是條直線,從這個數據模型上來看,也許你可以告訴你的朋友,他能以大約220000(美元)左右的價格賣掉這個房子。這就是監督學習算法的一個例子。
在這裏插入圖片描述

它被稱作監督學習是因爲對於每個數據來說,我們給出了“正確的答案”,即告訴我們:根據我們的數據來說,房子實際的價格是多少,而且,更具體來說,這是一個迴歸問題。迴歸一詞指的是,我們根據之前的數據預測出一個準確的輸出值,對於這個例子就是價格,同時,還有另一種最常見的監督學習方式,叫做分類問題,當我們想要預測離散的輸出值,例如,我們正在尋找癌症腫瘤,並想要確定腫瘤是良性的還是惡性的,這就是0/1離散輸出的問題。更進一步來說,在監督學習中我們有一個數據集,這個數據集被稱訓練集。
以之前的房屋交易問題爲例,假使我們迴歸問題的訓練集(Training Set)如下表所示:

在這裏插入圖片描述

我們將要用來描述這個迴歸問題的標記如下:
在這裏插入圖片描述
代表學習算法的解決方案或函數也稱爲假設(hypothesis)
在這裏插入圖片描述
這就是一個監督學習算法的工作方式,我們可以看到這裏有我們的訓練集裏房屋價格 我們把它餵給我們的學習算法,學習算法輸出一個函數,通常表示爲小寫 h 表示。h 代表hypothesis(假設),表示一個函數,輸入是房屋尺寸大小, 根據輸入的x 值來得出y 值,y 值對應房子的價格, 因此h是一個從x 到 y 的函數映射。

選擇最初的使用規則代表hypothesis,因而,要解決房價預測問題,我們實際上是要將訓練集“喂”給我們的學習算法,進而學習得到一個假設h,然後將我們要預測的房屋的尺寸作爲輸入變量輸入給h,預測出該房屋的交易價格作爲輸出變量輸出爲結果。那麼,對於我們的房價預測問題,我們該如何表達h ?

一種可能的表達方式爲:hθh_{\theta }(x)=θ0\theta _{0}+θ1\theta _{1}x,因爲只含有一個特徵/輸入變量,因此這樣的問題叫作單變量線性迴歸問題。

2 代價函數

在這裏插入圖片描述
在線性迴歸中我們有一個像這樣的訓練集,代表了訓練樣本的數量,比如 。而我們的假設函數,也就是用來進行預測的函數,是這樣的線性函數形式:hθh_{\theta }(x)=θ0\theta _{0}+θ1\theta _{1}x。

接下來要做的便是爲我們的模型選擇合適的參數(parameters)θ0\theta _{0}θ1\theta _{1},選擇的參數決定了我們得到的直線相對於我們的訓練集的準確程度,模型所預測的值與訓練集中實際值之間的差距(下圖中藍線所指)就是建模誤差(modeling error)。
在這裏插入圖片描述
我們的目標便是選擇出可以使得建模誤差的平方和能夠最小的模型參數。 即使得代價函數最小。
在這裏插入圖片描述
我們繪製一個等高線圖,三個座標分別爲θ0\theta _{0}θ1\theta _{1} 和J(θ0\theta _{0}+θ1\theta _{1}):

在這裏插入圖片描述
則可以看出在三維空間中存在一個使得J(θ0\theta _{0}+θ1\theta _{1})最小的點。

代價函數也被稱作平方誤差函數,有時也被稱爲平方誤差代價函數。我們之所以要求出誤差的平方和,是因爲誤差平方代價函數,對於大多數問題,特別是迴歸問題,都是一個合理的選擇。還有其他的代價函數也能很好地發揮作用,但是平方誤差代價函數可能是解決迴歸問題最常用的手段了。

也許這個函數J(θ0\theta _{0}+θ1\theta _{1})有點抽象,可能你仍然不知道它的內涵,接下來我們要更進一步解釋代價函數J的工作原理,並嘗試更直觀地解釋它在計算什麼,以及我們使用它的目的。

3 代價函數的直觀理解I

參考視頻: 2 - 3 - Cost Function - Intuition I (11 min).mkv

讓我們通過一些例子來獲取一些直觀的感受,看看代價函數到底是在幹什麼。
在這裏插入圖片描述
在這裏插入圖片描述

4 代價函數的直觀理解II

接下來更深入地學習代價函數的作用,假設你已經認識等高線圖,如果你對等高線圖不太熟悉的話,這段視頻中的某些內容你可能會聽不懂,但不要緊,如果你跳過這段視頻的話,也沒什麼關係,不聽這節課對後續課程理解影響不大。
在這裏插入圖片描述

代價函數的樣子,等高線圖,則可以看出在三維空間中存在一個使得最小的點。
在這裏插入圖片描述
通過這些圖形,希望你能更好地理解這些代價函數所表達的值是什麼樣的,它們對應的假設是什麼樣的,以及什麼樣的假設對應的點,更接近於代價函數的最小值。

當然,我們真正需要的是一種有效的算法,能夠自動地找出這些使代價函數取最小值的參數和來。

5 梯度下降

梯度下降是一個用來求函數最小值的算法,我們將使用梯度下降算法來求出代價函數J(θ0\theta _{0}+θ1\theta _{1}) 的最小值。

梯度下降背後的思想是:開始時我們隨機選擇一個參數的組合,計算代價函數,然後我們尋找下一個能讓代價函數值下降最多的參數組合。我們持續這麼做直到到到一個局部最小值(local minimum),因爲我們並沒有嘗試完所有的參數組合,所以不能確定我們得到的局部最小值是否便是全局最小值(global minimum),選擇不同的初始參數組合,可能會找到不同的局部最小值。
在這裏插入圖片描述
想象一下你正站立在山的這一點上,站立在你想象的公園這座紅色山上,在梯度下降算法中,我們要做的就是旋轉360度,看看我們的周圍,並問自己要在某個方向上,用小碎步儘快下山。這些小碎步需要朝什麼方向?如果我們站在山坡上的這一點,你看一下週圍,你會發現最佳的下山方向,你再看看周圍,然後再一次想想,我應該從什麼方向邁着小碎步下山?然後你按照自己的判斷又邁出一步,重複上面的步驟,從這個新的點,你環顧四周,並決定從什麼方向將會最快下山,然後又邁進了一小步,並依此類推,直到你接近局部最低點的位置。

批量梯度下降(batch gradient descent)算法的公式爲:
在這裏插入圖片描述

其中α\alpha 是學習率(learning rate),它決定了我們沿着能讓代價函數下降程度最大的方向向下邁出的步子有多大,在批量梯度下降中,我們每一次都同時讓所有的參數減去學習速率乘以代價函數的導數。
在這裏插入圖片描述

在梯度下降算法中,還有一個更微妙的問題,梯度下降中,我們要更新θ0\theta _{0}θ1\theta _{1}) ,當j=0和j=1時,會產生更新,所以你將更新J(θ0\theta _{0})和J(θ1\theta _{1}) 。實現梯度下降算法的微妙之處是,在這個表達式中,如果你要更新這個等式,你需要同時更新和,我的意思是在這個等式中,我們要這樣更新θ0\theta _{0}:=θ0\theta _{0},並更新θ1\theta _{1}:=θ1\theta _{1}

實現方法是:你應該計算公式右邊的部分,通過那一部分計算出θ0\theta _{0}θ1\theta _{1}的值,然後同時更新和。

讓我進一步闡述這個過程:
在這裏插入圖片描述

在梯度下降算法中,這是正確實現同時更新的方法。這裏不打算解釋爲什麼你需要同時更新,同時更新是梯度下降中的一種常用方法。我們之後會講到,同步更新是更自然的實現方法。當人們談到梯度下降時,他們的意思就是同步更新。

2.6 梯度下降的直觀理解

上面我們給出了一個數學上關於梯度下降的定義,接下來我們更深入研究一下,更直觀地感受一下這個算法是做什麼的,以及梯度下降算法的更新過程有什麼意義。梯度下降算法如下:
在這裏插入圖片描述
描述:對θ\theta賦值,使得J(θ\theta)按梯度下降最快方向進行,一直迭代下去,最終得到局部最小值。其中α\alpha是學習率(learning rate),它決定了我們沿着能讓代價函數下降程度最大的方向向下邁出的步子有多大。
在這裏插入圖片描述

對於這個問題,求導的目的,基本上可以說取這個紅點的切線,就是這樣一條紅色的直線,剛好與函數相切於這一點,讓我們看看這條紅色直線的斜率,就是這條剛好與函數曲線相切的這條直線,這條直線的斜率正好是這個三角形的高度除以這個水平長度,現在,這條線有一個正斜率,也就是說它有正導數,因此,我得到的新的θ1\theta _{1},更新後θ1\theta _{1}等於減去一個正數乘以θ1\theta _{1}

這就是我梯度下降法的更新規則:在這裏插入圖片描述
讓我們來看看如果太小或太大會出現什麼情況:

如果α\alpha太小了,即我的學習速率太小,結果就是隻能這樣像小寶寶一樣一點點地挪動,去努力接近最低點,這樣就需要很多步才能到達最低點,所以如果α\alpha太小的話,可能會很慢,因爲它會一點點挪動,它會需要很多步才能到達全局最低點。

如果α\alpha太大,那麼梯度下降法可能會越過最低點,甚至可能無法收斂,下一次迭代又移動了一大步,越過一次,又越過一次,一次次越過最低點,直到你發現實際上離最低點越來越遠,所以,如果α\alpha太大,它會導致無法收斂,甚至發散。

現在,我還有一個問題,當我第一次學習這個地方時,我花了很長一段時間才理解這個問題,如果我們預先把放在一個局部的最低點,你認爲下一步梯度下降法會怎樣工作?

假設你將初始化在局部最低點,在這兒,它已經在一個局部的最優處或局部最低點。結果是局部最優點的導數將等於零,因爲它是那條切線的斜率。這意味着你已經在局部最優點,它使得不再改變,也就是新的等於原來的,因此,如果你的參數已經處於局部最低點,那麼梯度下降法更新其實什麼都沒做,它不會改變參數的值。這也解釋了爲什麼即使學習速率保持不變時,梯度下降也可以收斂到局部最低點。

我們來看一個例子,這是代價函數J(θ\theta) 。

在這裏插入圖片描述

我想找到它的最小值,首先初始化我的梯度下降算法,在那個品紅色的點初始化,如果我更新一步梯度下降,也許它會帶我到這個點,因爲這個點的導數是相當陡的。現在,在這個綠色的點,如果我再更新一步,你會發現我的導數,也即斜率,是沒那麼陡的。隨着我接近最低點,我的導數越來越接近零,所以,梯度下降一步後,新的導數會變小一點點。然後我想再梯度下降一步,在這個綠點,我自然會用一個稍微跟剛纔在那個品紅點時比,再小一點的一步,到了新的紅色點,更接近全局最低點了,因此這點的導數會比在綠點時更小。所以,我再進行一步梯度下降時,我的導數項是更小的,更新的幅度就會更小。所以隨着梯度下降法的運行,你移動的幅度會自動變得越來越小,直到最終移動幅度非常小,你會發現,已經收斂到局部極小值。

回顧一下,在梯度下降法中,當我們接近局部最低點時,梯度下降法會自動採取更小的幅度,這是因爲當我們接近局部最低點時,很顯然在局部最低時導數等於零,所以當我們接近局部最低時,導數值會自動變得越來越小,所以梯度下降將自動採取較小的幅度,這就是梯度下降的做法。所以實際上沒有必要再另外減小。

這就是梯度下降算法,你可以用它來最小化任何代價函數,不只是線性迴歸中的代價函數。

7 梯度下降的線性迴歸

在以前的視頻中我們談到關於梯度下降算法,梯度下降是很常用的算法,它不僅被用在線性迴歸上和線性迴歸模型、平方誤差代價函數。在這段視頻中,我們要將梯度下降和代價函數結合。我們將用到此算法,並將其應用於具體的擬合直線的線性迴歸算法裏。

梯度下降算法和線性迴歸算法比較如圖:
在這裏插入圖片描述

對我們之前的線性迴歸問題運用梯度下降法,關鍵在於求出代價函數的導數,即:
在這裏插入圖片描述

我們剛剛使用的算法,有時也稱爲批量梯度下降。指的是在梯度下降的每一步中,我們都用到了所有的訓練樣本,在梯度下降中,在計算微分求導項時,我們需要進行求和運算,所以,在每一個單獨的梯度下降中,我們最終都要計算這樣一個東西,這個項需要對所有個訓練樣本求和。因此,批量梯度下降法這個名字說明了我們需要考慮所有這一"批"訓練樣本,而事實上,有時也有其他類型的梯度下降法,不是這種"批量"型的,不考慮整個的訓練集,而是每次只關注訓練集中的一些小的子集。在後面的課程中,我們也將介紹這些方法。

但就目前而言,應用剛剛學到的算法,你應該已經掌握了批量梯度算法,並且能把它應用到線性迴歸中了,這就是用於線性迴歸的梯度下降法。

如果你之前學過線性代數,有些同學之前可能已經學過高等線性代數,你應該知道有一種計算代價函數最小值的數值解法,不需要梯度下降這種迭代算法。在後面的課程中,我們也會談到這個方法,它可以在不需要多步梯度下降的情況下,也能解出代價函數的最小值,這是另一種稱爲正規方程(normal equations)的方法。實際上在數據量較大的情況下,梯度下降法比正規方程要更適用一些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章