李宏毅機器學習入門學習筆記(一)Regression - Case Study

課程簡介

本節課主要是使用【Pokemon精靈攻擊力預測】的例子來講述迴歸算法的應用

迴歸定義和應用例子

迴歸定義

Regression 就是找到一個函數 functionfunction ,通過輸入特徵 xx,輸出一個數值 ScalarScalar

應用舉例

  • 股市預測(Stock market forecast)
    • 輸入:過去10年股票的變動、新聞諮詢、公司併購諮詢等
    • 輸出:預測股市明天的平均值
  • 自動駕駛(Self-driving Car)
    • 輸入:無人車上的各個sensor的數據,例如路況、測出的車距等
    • 輸出:方向盤的角度
  • 商品推薦(Recommendation)
    • 輸入:商品A的特性,商品B的特性
    • 輸出:購買商品B的可能性
  • Pokemon精靈攻擊力預測(Combat Power of a pokemon):
    • 輸入:進化前的CP值、物種(Bulbasaur)、血量(HP)、重量(Weight)、高度(Height)
    • 輸出:進化後的CP值

模型建立的3個基本步驟

  • step1:模型假設,選擇模型框架(線性模型)
  • step2:模型評估,如何判斷衆多模型的好壞(損失函數)
  • step3:模型優化,如何篩選最優的模型(梯度下降)

Pokemon精靈攻擊力預測建模詳細步驟

Step 1:模型假設 - 線性模型

一元線性模型(單個特徵)

以一個特徵 xcpx_{cp} 爲例,線性模型假設 y=b+wxcpy = b + w·x_{cp} ,所以 wwbb 可以猜測很多模型:
f1:y=10.0+9.0xcpf2:y=9.8+9.2xcpf3:y=0.81.2xcp f_1: y = 10.0 + 9.0·x_{cp} \\ f_2: y = 9.8 + 9.2·x_{cp} \\ f_3: y = - 0.8 - 1.2·x_{cp} \\ ···

雖然可以做出很多假設,但在這個例子中,顯然 f3:y=0.81.2xcpf_3: y = - 0.8 - 1.2·x_{cp}假設是不合理的,不能進化後CP值是個負值吧~~

多元線性模型(多個特徵)

在實際應用中,輸入特徵肯定不止 xcpx_{cp} 這一個。例如,進化前的CP值、物種(Bulbasaur)、血量(HP)、重量(Weight)、高度(Height)等,特徵會有很多。

圖1:

所以我們假設 線性模型 Linear modely=b+wixiy = b + \sum w_ix_i

  • xix_i:就是各種特徵(fetrure) xcp,xhp,xw,xh,x_{cp},x_{hp},x_w,x_h,···
  • wiw_i:各個特徵的權重 wcp,whp,ww,wh,w_{cp},w_{hp},w_w,w_h,··
  • bb:偏移量

注意:接下來的內容需要看清楚是【單個特徵】還是【多個特徵】的示例

Step 2:模型評估 - 損失函數(Goodness of function)

【單個特徵】: xcpx_{cp}

收集和查看訓練數據

這裏定義 x1x^1 是進化前的CP值,y^1\hat{y}^1 進化後的CP值,^\hat{} 所代表的是真實值

圖2:

將10組原始數據在二維圖中展示,圖中的每一個點 (xcpn,y^n)(x_{cp}^n,\hat{y}^n) 對應着 進化前的CP值進化後的CP值

圖3:

如何判斷衆多模型的好壞

有了這些真實的數據,那我們怎麼衡量模型的好壞呢?從數學的角度來講,我們使用距離。求【進化後的CP值】與【模型預測的CP值】差,來判定模型的好壞。也就是使用 損失函數(Loss function) 來衡量模型的好壞,統計10組原始數據 (y^nf(xcpn))2\left ( \hat{y}^n - f(x_{cp}^n) \right )^2 的和,和越小模型越好。如下圖所示:

圖4:圖片名稱

如果覺得看着這個圖會暈,忽略圖4,直接看公式推導的過程:

L(f)=n=110(y^nf(xcpn))2f(x)=y,y=b+wxcp=n=110(y^n(b+wxcp))2 \begin{aligned} L(f) & = \sum_{n=1}^{10}\left ( \hat{y}^n - f(x_{cp}^n) \right )^2,將【f(x) = y】, 【y= b + w·x_{cp}】代入 \\ & = \sum_{n=1}^{10}\left ( \hat{y}^n - (b + w·x_{cp}) \right )^2\\ \end{aligned}

最終定義 損失函數 Loss functionL(w,b)=n=110(y^n(b+wxcp))2L(w,b)= \sum_{n=1}^{10}\left ( \hat{y}^n - (b + w·x_{cp}) \right )^2


我們將 ww, bb 在二維座標圖中展示,如圖5:

圖5:
  • 圖中每一個點代表着一個模型對應的 wwbb
  • 顏色越深代表模型更優

可以與後面的圖11(等高線)進行對比

Step 3:最佳模型 - 梯度下降(Grdient Descent)

【單個特徵】: xcpx_{cp}

如何篩選最優的模型(參數w,b)

已知損失函數是 L(w,b)=n=110(y^n(b+wxcp))2L(w,b)= \sum_{n=1}^{10}\left ( \hat{y}^n - (b + w·x_{cp}) \right )^2 ,需要找到一個令結果最小的 ff^*,在實際的場景中,我們遇到的參數肯定不止 ww, bb

圖6:

先從最簡單的只有一個參數ww入手,定義w=arg minxL(w)w^* = arg\ \underset{x}{\operatorname{\min}} L(w)

圖7:

首先在這裏引入一個概念 學習率 :移動的步長,如圖7中 η\eta

  • 步驟1:隨機選取一個 w0w^0
  • 步驟2:計算微分,也就是當前的斜率,根據斜率來判定移動的方向
    • 大於0向右移動(增加ww
    • 小於0向左移動(減少ww
  • 步驟3:根據學習率移動
  • 重複步驟2和步驟3,直到找到最低點
圖8:

步驟1中,我們隨機選取一個 w0w^0,如圖8所示,我們有可能會找到當前的最小值,並不是全局的最小值,這裏我們保留這個疑問,後面解決。


解釋完單個模型參數ww,引入2個模型參數 wwbb , 其實過程是類似的,需要做的是偏微分,過程如圖9所示,偏微分的求解結果文章後面會有解釋,詳細的求解過程自行Google。

圖9:

整理成一個更簡潔的公式(圖10):

圖10:

梯度下降推演最優模型的過程

如果把 wwbb 在圖形中展示,如圖11:

圖11:
  • 每一條線圍成的圈就是等高線,代表損失函數的值,顏色約深的區域代表的損失函數越小
  • 紅色的箭頭代表等高線的法線方向

梯度下降算法在現實世界中面臨的挑戰

我們通過梯度下降gradient descent不斷更新損失函數的結果,這個結果會越來越小,那這種方法找到的結果是否都是正確的呢?前面提到的當前最優問題外,還有沒有其他存在的問題呢?

圖12:

其實還會有其他的問題,如圖13:

  • 問題1:當前最優(Stuck at local minima)
  • 問題2:等於0(Stuck at saddle point)
  • 問題3:趨近於0(Very slow at the plateau)
圖13:

注意:其實在線性模型裏面都是一個碗的形狀(山谷形狀),梯度下降基本上都能找到最優點,但是再其他更復雜的模型裏面,就會遇到 問題2 和 問題3 了

w和b偏微分的計算方法

圖14:

如何驗證訓練好的模型的好壞

使用訓練集和測試集的 平均誤差 來驗證模型的好壞
我們使用將10組原始數據,訓練集求得平均誤差爲31.9,如圖15:

圖15:

然後再使用10組Pokemons測試模型,測試集求得平均誤差爲35.0 如圖16:

圖16:

進一步尋找更強大表現更好的模型更復雜的模型:1元N次線性模型

在模型上,我們還可以進一部優化,選擇更復雜的模型,使用1元2次方程舉例,如圖17,發現訓練集求得平均誤差爲15.4,測試集的平均誤差爲18.4

圖17:

這裏我們又提出一個新的問題:是不是能畫出直線就是線性模型,各種複雜的曲線就是非線性模型?
其實還是線性模型,因爲把 xcp1x_{cp}^1 = (xcp)2(x_{cp})^2 看作一個特徵,那麼 y=b+w1xcp+w2xcp1y = b + w_1·x_{cp} + w_2·x_{cp}^1 其實就是線性模型。

過擬合問題出現

在模型上,我們再可以進一部優化,使用更給次方的模型,如圖18

  • 訓練集平均誤差【15.4】【15.3】【14.9】【12.8】
  • 測試集平均誤差【18.4】【18.1】【28.8】【232.1】
圖18:

在訓練集上面表現更爲優秀的模型,爲什麼在測試集上效果反而變差了?這就是模型在訓練集上過擬合的問題。


如圖19,每一個模型結果都是一個集合,5435次模型包 \supseteq 4次模型 \supseteq 3次模型
所以在4次模型裏面找到的最佳模型,肯定不會比5次模型裏面找到更差

圖19:

將錯誤率結果圖形化展示,發現3次方以上的模型,已經出現了過擬合的現象:

圖20:

輸入更多數據尋找新的規律

輸入更多Pokemons數據,相同的起始CP值,但進化後的CP差距竟然是2倍。如圖21,其實將Pokemons種類通過顏色區分,就會發現Pokemons種類是隱藏得比較深得特徵,不同Pokemons種類影響了進化後的CP值的結果。

圖21:

Step1優化:2個input的四個線性模型是合併到一個線性模型中

通過對 Pokemons種類 判斷,將 4個線性模型 合併到一個線性模型中

圖22:
圖23:
圖24:
圖25:

Step1優化:如果希望模型更強大表現更好(更多參數,更多input)

在最開始我們有很多特徵,圖形化分析特徵,將血量(HP)、重量(Weight)、高度(Height)也加入到模型中

圖26:
圖27:
圖28:
更多特徵,更多input,數據量沒有明顯增加,仍舊導致overfitting

Step2優化:加入正則化regularization

更多特徵,但是權重 ww 可能會使某些特徵權值過高,仍舊導致overfitting,所以加入正則化

圖29:
圖30:
  • ww 越小,表示 functionfunction 較平滑的, functionfunction輸出值與輸入值相差不大
  • 在很多應用場景中,並不是 ww 越小模型越平滑越好,但是經驗值告訴我們 ww 越小大部分情況下都是好的。
  • bb 的值接近於0 ,對曲線平滑是沒有影響

正規化

總結

圖31:
  • Pokemon:原始的CP值極大程度的決定了進化後的CP值,但可能還有其他的一些因素。
  • Gradient descent:梯度下降的做法;後面會講到它的理論依據和要點。
  • Overfitting和Regularization:過擬合和正則化,主要介紹了表象;後面會講到更多這方面的理論
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章