以下圖,房價預測。訓練集給出了房屋面積和價格,下面介紹一些術語:算法
x:輸入變量或輸入特徵(input variable/features)。機器學習
y:輸出變量或目標變量(output variable/target variable)。函數
(x, y):一個訓練樣本學習
(x(i), y(i)):第i個訓練樣本spa
m:樣本數目3d
如圖,機器學習算法經過學習訓練集得出假設函數h(Hypothesis),而後接受輸入x,輸出y。假設函數h稱爲模型。blog
經過觀察,咱們使用的房價預測數據近似一條直線,因此咱們將假設函數設爲 h(x) = θ0 + θ1x,咱們的目標是儘量得使直線與訓練集數據擬合。現階段咱們經過觀察來假設函數模型,之後咱們能夠直接假設一個較爲複雜的函數,而後經過正則化避免過擬合問題,這部分以後會講。get
綜上,咱們獲得假設函數:h(x) = θ0 + θ1x。這樣問題就轉變爲求解θ0和θ1,使得曲線(或直線)h(x) 擬合訓練數據。input
從咱們的目標出發,咱們的目標是使曲線h(x) 擬合訓練數據。從這點咱們能夠看出應該讓訓練數據儘量的經過h(x)或離h(x)接近,故咱們讓y和h(x)的距離儘量小,能夠用減法運算來表示距離d,因爲d有可能小於0,會使得代價函數J(θ0, θ1)反而變小,而實際上h(x)與y仍是有距離的,故使用d2來表示。其中(x, y)爲某同樣本。同步
d2 = [h(x) - y]2
這樣,咱們將全部的樣本所求出的預測值h(x)與y相減獲得d,而後對全部的d求和就獲得預測值與全部樣本的距離的和,記爲J(θ0, θ1),以下:
該公式稱爲h(x)的代價函數(Cost Function),又稱平方偏差函數(Squared Error Function)。上述公式是距離的平方再求和,這和相減的效果是同樣的,樣本數量爲m,前面乘以1/m求平均值,分母的2主要是爲了便於以後求導約掉。爲使h(x)與y儘量的接近,函數J(θ0, θ1)應儘量小,故目標轉變爲求出使得函數J(θ0, θ1)儘量小的θ0和θ1。即
爲簡化問題,咱們將θ0置爲0,這樣,h(x) = θ1x,J也變爲J(θ1)
觀察下圖,當θ1的值變化時,J(θ1)也跟着變化,能夠觀察到,當θ1= 0時h(x)與訓練數據擬合的最好時,J(θ1)達到最小值。
從上面咱們能夠觀察到函數J(θ1)爲凸函數,而且對於線性迴歸問題,該函數只存在全局最小值,不存在局部最小值。這樣,咱們能夠利用導數來求解極小值,同時也是最小值。
對於J(θ0, θ1)和J(θ1)同理,在繪製θ0與J(θ0, θ1)的關係時只需將θ1視爲不變便可,而且求導時變爲分別求J(θ0, θ1)對θ0和θ1的偏導數。
綜上,咱們明白了爲使h(x)與訓練數據擬合,必須求出使得J(θ0, θ1)最小的θ0和θ1,還知道了J(θ0, θ1)是凸函數,能夠經過求導來求出最小值和對應的θ0和θ1。
上一節咱們講了可使用導數的方式來求解θ0和θ1,本節的梯度降低算法利用的即是這種思想,其算法以下:
上述公式中α爲學習率,該參數能夠控制θ的變化速率。值得注意的是,在更新多個θ時要同步更新,不能先更新任意一個。
上述公式初看可能難以理解,咱們依舊使用簡化的假設函數h(x) = θ1x和J(θ1)來解釋。
以下圖,當θ1位於極小值的右方時,J(θ1)單調增長,故大於0,這代表函數θ1正位於最小值的右方,要達到最小值應該要減少θ1,應該減去一個正數。故下面的公式會使得θ1接近最小值:
同理,當θ1位於極小值的左方時,J(θ1)單調減小故小於0,這代表函數θ1正位於最小值的左方要達到最小值應該要增長θ1,應該加上一個正數,即減去一個負數。故下面的公式會使得θ1接近最小值:
對於J(θ1),咱們求解θ1的公式是
能夠看到,若學習率α很小,那麼θ1會很緩慢地減少;若學習率α很大,那麼θ1變化會很大,甚至於越過了J(θ1)最小值對應的θ1,其在圖像上表現爲反覆橫跳,最終甚至沒法收斂到最小值。以下圖所示:
再思考,在上述求解θ1的公式中,咱們是否須要在運行過程當中按期修改α的值?
答案是不用。因爲公式中的導數越接近極小值(同時是最小值)時會愈來愈小,對應到圖像上表現爲愈來愈平緩,因此
會愈來愈小,故θ1的變化愈來愈慢,直至收斂到使J(θ1)取得最小值。
綜合上述全部知識,咱們獲得以下總結:
咱們首先假設了假設函數h(x) = θ0 + θ1x,而後爲了求解θ0 和 θ1,咱們從使得h(x) 擬合訓練數據的想法出發,想到要使h(x) 與訓練數據擬合,必須使得預測值h(x)與y的距離儘量接近,故獲得函數J(θ0 , θ1),問題轉變爲了求出使得最小化J(θ0 , θ1)對應的θ0 和 θ1,再從函數J(θ0 , θ1)爲凸函數的特色出發,想到其在不一樣位置的導數正負不一樣,獲得梯度降低算法。這樣即可以使用梯度降低算法求得θ0 和 θ1,從而獲得h(x)。如今問題只剩下一個,那就是求解,結合J(θ0 , θ1)的表達式求導,能夠獲得
這樣,咱們便求解了單變量線性迴歸問題,獲得了擬合了數據的假設函數h(x)。
上述的梯度降低算法稱爲批量梯度降低(Batch Gradient Descent),所謂批量指的是在每一次梯度降低的過程當中都使用了所有樣本。