我們學習一樣本領之前得知道它是用來做什么,先假設一個問題待解決,自己花點時間仔細想一想如何解決這個問題,也許你的思路更加先進優(yōu)秀!
先思考,再看答案!
1、先假設一個要解決的問題
有一組數據集,包含房子大小、房價,要求根據這組數據集,輸入房子大小,輸出房價。

分析
將數據集可視化如上圖,房價基本上和房子大小成正比,希望畫一條直線來擬合正比關系。
2、使用一條直線擬合樣本數據集
房子大小為橫坐標,房價為縱坐標,房價與大小的關系為:
上述函數稱為:假設函數(hypothesis)

那么此問題就變成了尋找參數θ0和θ1的最優(yōu)解。
如何尋找這兩個參數呢,如何確認找到的參數是最優(yōu)解呢?
3、如何衡量擬合程度
我們希望尋找一個方法來衡量假設函數是否符合樣本,將假設函數在樣本上畫出:

y=房價,x=房子大小
那么在某一確定的房子大小x,樣本房價y和假設函數的距離為:

我們希望距離越大則受到的懲罰越大,加入平方:

所有樣本數據,給定房子大小x,y與假設函數的距離為:

實際上數學上稱為均方誤差MSE(Mean Square Error),是回歸損失函數中最常用的誤差,它是預測值f(x)與目標值y之間差值平方和的均值,其公式如下所示:

我們直接將MSE作為衡量擬合程度的函數

在機器學習中被成為: 損失函數(cost function 或 loss function)
有了損失函數來衡量假設函數的擬合程度,那么問題來了,如何找到參數θ0和θ1的最優(yōu)解呢?
有一種方法:把實數范圍內的θ0和θ1都試一遍,然后比較哪一組θ0和θ1的損失函數最小。額。。。那么,還有什么好方法嗎?
為啥損失函數中求和后要除以2m,不是m嗎?其實求最小值加入任何常數運算都不影響結果,2m方便后面梯度下降計算
4、如何找到θ0和θ1
實際上,如果我們遍歷取值范圍內所有的θ0和θ1,將θ0和θ1作為x、y,將損失函數J(θ0, θ1)作為豎直軸z,作圖得:

那么聰明的你一定可以想到,損失函數關于θ0和θ1求偏導,就可以從任意一點找到通往最小極值點的方向。再定義一個步長α,這樣就可以從任意一點一步一步走到最小極值點。

其中θ0和θ1需要同時求偏導,然后乘以步長α再同時更新θ0和θ1,這是因為如果先更新了θ0那么θ1的偏導會計算錯誤,反之亦然。

現在已經找到了求關于損失函數中參數θ0和θ1的最優(yōu)解方法,這就是:
梯度下降算法(Gradient descent algorithm)
5、總結
為了根據房子大小預測房價,我們根據已有數據集樣本信息,給出假設函數:

為了確定假設函數中的參數:

我們引用均方誤差MSE作為損失函數:

為了求解最小損失函數:

我們采用梯度下降算法:


至此所有問題解決,我們可以寫程序來實現所有功能。
6、思考
Q:假設函數為什么是直線,而不是曲線?
A:假設函數有很多種,上面舉例是線性回歸問題。假設函數的選取取決于要解決的問題,另外一個重要參考標準是梯度下降求偏導的計算量要小。
Q:還有其他的損失函數嗎?
A:損失函數的選取取決于假設函數,如果假設函數是環(huán)裝這時損失函數求點對點的距離顯然就不合適。實際考慮到性能生產中的lost function一般都很簡單,能簡化則簡化,能近似則近似。
Q:如果假設函數比較復雜,導致損失函數非碗狀而是有多個極值點,那么梯度下降失效了嗎?

A:沒有失效,多找一些點多求幾次極值點,比較后找到最小極值點。選擇的點越多則找到最小極值點的概率越大,不過這將顯著提升計算量。我們希望損失函數是凸函數(只有一個極值點),以便減少計算量。線性回歸的損失函數是凸函數,只有一個極值點。
Q:4)如果梯度下降的步長過大,下降過程中錯過極值點如何處理?
A:這個步長成為學習率,學習率較大則計算量小,但是有在極值點左右搖擺無法收斂的問題。方案一:動態(tài)學習率,約收斂學習率越??;方案二:使用不同尺度的學習率由大到小多次計算,直至收斂。
Q:5)上面描述了兩個參數的解題方法,此方法是否對多個參數通用?
A:通用。