機器學習的最直白講解,就看這篇

假如你想深入機器學習和它背後的數學,你將會很快意識到一切都可歸結為一個優化問題。就連訓練神經網絡都是一個參數優化的問題。因此要想理解機器學習算法,你需要首先理解數學優化的基本概念,以及它為什麼這麼有用。

機器學習的最直白講解,就看這篇

這篇文章,你將會看到一步一步的演示如何求解一個簡單的機器學習問題。在這個過程中,你將會看到為什麼以及它怎樣歸結為一個機器學習問題,參數如何被優化以及如何計算最優值。

機器學習求解步驟

Step 1: 問題定義

如下所示一個簡單的數據集,一共包括11個已知點,點的座標為:(x1, x2):

機器學習的最直白講解,就看這篇


x1,x2的含義可以任意假定,比如x1 表示計算機的使用年限,x2表示訓練神經網絡所需要的時間。

如果你的電腦使用年限為下圖中的x, 顯然你不知道訓練神經網絡所需要的準確時間x2

機器學習的最直白講解,就看這篇


Step 2: 僅憑猜測

我們隨便找一個電腦使用年限與x 最接近的點,如下圖所示,來預測x對應的x2值,產生的誤差為err.

機器學習的最直白講解,就看這篇


但是,如果我們運氣不好,下圖所示,已知的11個點中,沒有與預測點的使用年限x值相近的,此時誤差就會很大。

機器學習的最直白講解,就看這篇


因此,我們需要一個更好的算法來求解。

Step 3: 讓猜測更準確:機器學習方法

a. 數據擬合

現在我們進入機器學習領域。在觀察紅色數據點後,你會很容易看出一種線性趨勢,你的電腦使用越長(x1 越大),訓練時間就會越長(x2 越大)。一個更好的算法將會依據數據,識別出這個趨勢,做出更好的預測,誤差自然會更小。

機器學習的最直白講解,就看這篇


函數應該近似擬合我們的數據

b. 擬合線

我們怎樣發現這條線?利用高中知識:

我們只需要找到更好的a和b:

機器學習的最直白講解,就看這篇


對於此處的數據,最優值分別為 a=0.8 and b=20 . 但是,我們應該怎麼發現這些最優值 a and b

c. 發現最優a和b,最小化均方誤差

就像我們前面說的,我們想要發現 ab ,以便使得 y=ax+b 這條線儘可能好的擬合我們的數據。用數學的術語來表述,在我們數據集中的點與這條線的誤差(或稱距離)應該是最小的,如下圖所示,這些黃色的虛線儘可能地短。

機器學習的最直白講解,就看這篇


綠色箭頭指向的點,其誤差(或稱距離)距離等於:

如果此點的座標為 (x1, x2) = (100, 120) , 還記得最優參數 a=0.8 and b=20 ,所以此點的誤差:

Error = f(x) — yi

Error = f(100) — 120

Error = a*100+b — 120

Error = 0.8*100+20–120

Error = -12

圖中我們也可看出這個點比擬合線高12個單元。為了評估擬合線整體的表現,需要計算所有點的誤差。怎麼做?首先計算每個點的誤差的平方。有兩個原因:

  • 通過平方誤差,我們會得到一個絕對值,(-12)^2 = 144,
  • 平方放大了誤差,如果某些點離擬合線比較遠,結果誤差將會變得非常大

用公式表達為:

機器學習的最直白講解,就看這篇


更一般的寫法:

這個公式稱為均方誤差的和(sum of square error),它在統計學和機器學習中非常常見。

d. 優化函數

優化函數為什麼這麼有用?初始問題的定義:我們想要發現a和b以便

y=ax+b 更好的擬合數據集。也可以表述為,我們想要發現 ab 以便均方誤差最小,即:

機器學習的最直白講解,就看這篇


假如找到函數 f(a, b) 的最小值,我們將會發現a和b的最優值:

機器學習的最直白講解,就看這篇


進入實際計算前,先讓我們圖形繪製下優化函數 f(a, b)

機器學習的最直白講解,就看這篇


左圖的高度代表均方誤差的大小,山峰越高,誤差越大。最小均方誤差位於綠色箭頭所指處,此處對應的a和b就是最優值。

沿著軸a,改變a的取值(對應左圖的斜率變大),相應的誤差也會變大。

機器學習的最直白講解,就看這篇


沿著軸b,改變b的取值,也就是叫線上下移動,我們同樣也會得到更大的均方誤差。

機器學習的最直白講解,就看這篇


e. 計算最優值

怎樣計算均方誤差最小值對應的a和b呢?我們知道取得全局最小點必須滿足兩個條件:

  • 一階偏導 f’(a,b) = 0
  • 二階偏導 f’’(a,b) >0

因為目標函數是2個維度的函數,我們可以簡單的計算每一個維度上的偏導數,根據必須滿足的條件1,得到如下方程:

f(a, b) Δa = 0

f(a, b) Δb = 0

已知 f(a,b) = SUM [axi+b — yi]² ,進一步化簡:

f(a,b) = SUM [yi² + b²+a²x + 2abxi — 2byi — 2bxiyi] , 綜合可得:

SUM [yi² + b²+a²xi + 2abxi — 2byi — 2axiyi] Δa = 0

SUM [yi² + b²+a²xi + 2abxi — 2byi — 2axiyi] Δb = 0

很容易計算出偏導數:

f(a,b) = SUM [2axi + 2bxi — 2xiyi] = 0

f(a,b) = SUM [2b+ 2axi — 2yi ] = 0

記住,在上面兩個方程中,有兩個SUM,和許多已知點xi 和yi. 就算只有10個點,代入後方程也會變得很長,因此手算也變得不容易,只能藉助計算機。

恭喜你!你已經知道線性迴歸是如何工作的,以及如何通過已知樣本學習到兩個參數a,b.

但是,要等一下,還有更多知識需要了解。

逼近多項式

如果我們的數據沒有展現線性走勢,而是像如下一個二次函數走勢:

機器學習的最直白講解,就看這篇


在這種情況下,很明顯線性函數擬合的將不會太好,多項式將會更好,這就意味著我們需要處理平方函數,三次方函數,甚至更高階的多項式逼近。

但是,計算這些問題的方法通用的,首先我們再次定義問題,我們想要一個平方函數 y = ax² + bx + c 以此更好的擬合我們的數據:

機器學習的最直白講解,就看這篇


就像你看到的,我們現在有三個參數要去確定: a, bc . 因為,我們的最小化問題需要稍作改變,不過均方誤差和最小的目標函數不會改變:

機器學習的最直白講解,就看這篇


需要優化的三個參數 a,bc :

機器學習的最直白講解,就看這篇


過擬合

我們仍然有一個問題需要去解釋,文章一開始提到的具有線性走勢的那個問題,難道就不能用二次函數擬合嗎?肯定可以!我們用更高階的函數 y = ax² + bx + c 去擬合不好嗎?如果單從訓練集上的表現來看,高階函數肯定會讓誤差更小的。

事實上,目標函數的階次比總的樣本點個數小於1的時候,我們的目標函數將會擬合到每一個點,均方誤差將會是 0 . 非常完美,不是嗎?

並不是那樣好,用下面兩幅圖來解釋:

機器學習的最直白講解,就看這篇


在左圖,我們用二次函數近似擬合數據,在右圖,我們用10階函數擬合,因此它能近似擬合幾乎所有14個樣本點。

但是,右圖的線條運動看起來很奇怪,它試圖去擬合所有點,但是它丟失了樣本數據的整體走勢。得到的高階函數對值得變化更加敏感,預測結果更加不可靠。

因此,我們應該首先觀察數據,決策用幾階多項式擬合效果很最好,然後選擇合適的階數去擬合。


分享到:


相關文章: