摘要:我們就有了組訓(xùn)練數(shù)據(jù)我們將其進(jìn)化前的值和進(jìn)化后的值畫在一個二維坐標(biāo)圖上橫軸為進(jìn)化前的值,那每個藍(lán)色的點(diǎn)都代表一只寶可夢現(xiàn)在我們有了和,但是我們還需要一個函數(shù)來將它們連接起來,這個函數(shù)就是接下來要講的第三步中間藍(lán)色的塊就是誤差函數(shù)。
前言
如果遇到排版問題,請點(diǎn)擊 閱讀原文
這個課程是來自于 YouTube 上 NTU 李宏毅老師的視頻課程,老師的課講得非常有趣,通過引入 Pokémon 來生動的講解機(jī)器學(xué)習(xí)中一些技術(shù)的應(yīng)用,只要你有一定的高數(shù)、線代以及概率基礎(chǔ),看這個課程無壓力。
我在學(xué)習(xí)的同時將其搬運(yùn)并做簡單的英文翻譯,并加上自己的理解與更通俗的解釋。加深自己印象的同時希望能對國內(nèi)不能使用 YouTube 的讀者們提供一個方便。
回歸運(yùn)算其實(shí)就是用一個函數(shù)去擬合當(dāng)前給出的數(shù)據(jù),如下圖:
圖中藍(lán)色點(diǎn)代表數(shù)據(jù),我們假設(shè)這組數(shù)據(jù)是 Linear Regression 線性回歸的,那我們就需要用一條直線去擬合它們,也就是那條紅色的線。
Regression 的使用范圍也是很廣的:
股票預(yù)測:
$$ egin{eqnarray} f ( 以往多年股票的走勢情況 ) = 明天的點(diǎn)數(shù) end{eqnarray} $$
當(dāng)然真正的股市也不可能這么簡單,你能預(yù)測你就發(fā)了?
自動駕駛
$$ egin{eqnarray} f ( 傳感器得到的數(shù)據(jù) ) = 方向盤與油門的控制 end{eqnarray} $$
推薦系統(tǒng)
像淘寶、京東等的購物網(wǎng)站,會推送一些商品給你,這些商品肯定要是你喜歡的或者需要的,你才可能去購買。一個好的推薦系統(tǒng)可能會讓這些網(wǎng)站的利潤成倍提高。
$$ egin{eqnarray} f ( 用戶 A,商品 B ) = 用戶 A 購買商品 B 的可能性 end{eqnarray} $$
如果這個可能性很大的話,購物網(wǎng)站就會更傾向于向用戶 A 推薦此商品
但今天,我們要做的是一件更加實(shí)際的事情。
用數(shù)據(jù)估測寶可夢的攻擊力(CP值)比如,下面是一只妙蛙種子,你給他吃一些糖果或者星辰,它就會進(jìn)化成妙蛙草,進(jìn)化以后,它的 CP 值就變了。
如果我們有能力預(yù)測它進(jìn)化后 CP 值的變化的話,我們就能夠事先決定是否進(jìn)化這只寶可夢。如果它 CP 值比較低的話,有可能你就把它拿去做糖果了? 就不進(jìn)化它了,這就可以節(jié)省一些糖果用來進(jìn)化更強(qiáng)的寶可夢。
那我們現(xiàn)在要做的就是,找到這么一個 function,我們輸入這只寶可夢的相關(guān)數(shù)據(jù),他就能返回給我們,進(jìn)化過后,可能的 CP 值是多少。
$$ egin{eqnarray} f ( 寶可夢的信息 ) = 進(jìn)化后的 CP 值 end{eqnarray} $$
這里,我們用 $x$ 代表這只寶可夢,則:
$ x_{cp} $ 代表其進(jìn)化前的 CP 值,為 14
$ x_s $ 代表它所屬的物種,為 妙蛙種子
$ x_{hp} $ 代表它進(jìn)化前的生命值,為 10
$ x_w $ 代表它進(jìn)化前的重量,為 11.62 kg
$ x_{hp} $ 代表它進(jìn)化前的生命值,為 0.88 m
$y$ 則代表進(jìn)化后的 CP 值
這里 $x$ 的下標(biāo)表示:這些都是 $x$ 這個個體的某個屬性(比如 $小明\_{體重}$、$小明\_{身高}$)。
那我們怎么來解這個問題呢,我們知道,ML 其實(shí)就是尋找一個 Model(模型),將我們的數(shù)據(jù)代進(jìn)去,經(jīng)過復(fù)雜的運(yùn)算后就能得到我們想要的結(jié)果。
所以我們首先需要找到這個 Model。
第一步:Model一個 Model 其實(shí)就是一個 Function set(一組方法)。那我們要尋找的這個 Model,它應(yīng)該長什么樣子呢?
我們當(dāng)然還是期望它能簡單點(diǎn),所以呢,我們就假設(shè)它是這么一個方程組:
$$ y = b + w cdot x_{cp} $$
就是一個常數(shù) $b$ 和一個數(shù) $w$,它們組合起來,$x$ 與 $y$ 就構(gòu)成一種線性關(guān)系。當(dāng)然,我們現(xiàn)在的 $b$ 和 $w$ 都是不確定的,它可以是任何的數(shù)字,不過我們能從直覺上排除一些組合,比如 $w$ 和 $b$ 都為負(fù)數(shù):
$$ f_1: y = -1 - 2 cdot x $$
這樣子 $y$ 就成了負(fù)數(shù),我們知道,一個寶可夢的 CP 值是不可能為負(fù)數(shù)的,所以我們能夠直接排除這類組合。
前面提到,我們假設(shè)的這個方程是一個線性的函數(shù),所以我們這個 Model 就是一個 Linear Model(線性模型):
$$ Linear Model: y = b + sum w_i x_i x_i:輸入 x 的某個屬性(如 CP) b:bias(誤差) w:weight(權(quán)重) $$
有了 Model 我們就需要考慮下一個問題:
第二步:Training Data我們需要訓(xùn)練數(shù)據(jù),因?yàn)?ML 就像人一樣,本來就是通過一定量的基礎(chǔ)練習(xí),才能夠?qū)W到這類數(shù)據(jù)的共通點(diǎn)。像下面這個圖,左側(cè)是杰尼龜,右側(cè)則是杰尼龜進(jìn)化后,變成的卡咪龜:
那現(xiàn)在,整個 Model 的 輸入就是這只杰尼龜,我們用 $x^1$ 來表示,那這只 卡咪龜 我們就用 $widehat{y}^1$ 來表示。這里 $x$ 和 $widehat{y}$ 的上標(biāo)表示:這是一個完整的個體,1 只是它的編號(比如 $學(xué)生^1$ 、$學(xué)生^2$),至于 hat(就是 $widehat{y}$ 頭上的那個尖尖符號),它代表這是一個準(zhǔn)確的值(因?yàn)檫@是真實(shí)的數(shù)據(jù),為了和后面預(yù)測出來的數(shù)據(jù) $y$ 做區(qū)分)。
只有一只肯定不夠呀,我們需要很多的數(shù)據(jù),就要抓足夠多的寶可夢,比如這只 伊布,它進(jìn)化過后就是 雷精靈:
那我們同樣就能夠得到$x^2$ 和 $widehat{y}^2$,就像這樣:
嗯,我們搜集了十只寶可夢?????????? ,數(shù)據(jù)可以從這里找到。
我們就有了 10 組 Training Data(訓(xùn)練數(shù)據(jù)):
$$ (x^1,widehat{y}^1) (x^2,widehat{y}^2) vdots (x^{10},widehat{y}^10) $$
我們將其進(jìn)化前的 CP 值和進(jìn)化后的 CP 值畫在一個二維坐標(biāo)圖上(橫軸為進(jìn)化前的 CP 值),那每個藍(lán)色的點(diǎn)都代表一只寶可夢:
現(xiàn)在我們有了 Model 和 Training Data,但是我們還需要一個函數(shù)來將它們連接起來,這個函數(shù)就是接下來要講的:
第三步:Loss Function中間藍(lán)色的塊就是 Loss Function(誤差函數(shù))。為什么需要這個函數(shù)呢,因?yàn)槲覀儸F(xiàn)在需要根據(jù)這 10 只已知寶可夢數(shù)據(jù),代入 Model 推測出它們進(jìn)化后的 CP 值,然后再與實(shí)際的 CP 值進(jìn)行比較,來慢慢調(diào)整 Model 中的 weight 和 bias。所以,我們需要有一個函數(shù)來評判這次推測的誤差度,這就是 Loss Function:
$$ egin{cases} L(f) = L(w,b) = sum\_{n=1}^{10} (widehat{y}^n - y^n)^2 y^n = b + wcdot x\_{cp}^n end{cases} Downarrow L(f) = sum\_{n=1}^{10} (widehat{y}^n - (b + wcdot x\_{cp}^n))^2 $$
上面的方程其實(shí)就是將 $widehat{y}$ 準(zhǔn)確值減去$y$估測值,然后將其平方,再將 10 只寶可夢都這樣計算并加起來。
我們要做的就是從我們的 Model 中挑選出一個 function $f$,它能夠讓 Loss Function $L(f)$ 的計算結(jié)果最小,這個 function 我們就將它命名為 $f^*$:
$$ f^* = arg min_f L(f) $$
或者從另一個角度考慮,我們的 function 其實(shí)就只由 weight $w$ 和 bias $b$ 來確定的,那上面的公式還可以寫成如下:
$$ w^*, b^* = arg min\_{w,b} L(w,b) $$
我們需要做的就是 窮舉所有的 ? 和 ?,直到找到最佳的那一對,讓 Loss Function $L$ 最小。
第四步:Gradient Descent上面說的窮舉真不是一個好辦法(基本沒法實(shí)現(xiàn)),那我們能不能找一個更好、更有效率的辦法解決這個問題呢?有!
用線性代數(shù)的辦法:求解非齊次線性方程組(由于這里的方程并不是同解,所以這個辦法還是會有些折騰)
用高等數(shù)學(xué)的辦法:L 可微分,求梯度即可
如下曲線,我們隨機(jī)選擇一個起點(diǎn) $w^0$,然后在這個點(diǎn)上對 $L$ 求 $w$ 的微分 $frac{dL}{dw}|\_{w=w^0}$:
如果你還搞不太懂微分是啥,那就假想這個曲線是一個山坡,你站在 $w^0$ 上,向左邁一步($w$ 減?。┗蛘呦蛴疫~一步 ($w$ 增大),然后看往哪邊走 $L$ 會變小就往那個方向走一步,得到一個新的位置 $w^1$,然后這樣不斷重復(fù),就有機(jī)會走到最低點(diǎn)。
$$ w^1 gets w^0 - eta frac{dL}{dw}|\_{w=w^0} $$
那新問題出現(xiàn)了,我們步子該邁多大呢?Gradient Descent 中,這個步子的大小為:
$$ - {color{red}eta} frac{dL}{dw}|\_{w=w^0} $$
其中,$frac{dL}{dw}|\_{w=w^0}$ 為 $w^0$ 處的梯度,${color{red}eta}$ 是一個常數(shù)項(xiàng),我們把它叫做 Learning Rate(學(xué)習(xí)速率),它是一個事先定好的數(shù)值,越大,每踏出一步的距離就越大,這意味著學(xué)習(xí)得就越快。負(fù)號則是因?yàn)?,我們所求的梯度如果是?fù)值說明我們往這個方向前進(jìn),$L$ 就會變小,我們就需要增大 $w$,所以,梯度的符號和我們前進(jìn)的方向是相反的關(guān)系。
到了 $w^1$ 后重新計算梯度,很明顯這里的梯度比 $w^0$ 小了很多,所以邁的下一步也會隨之變小。經(jīng)過很多次的調(diào)整行走后,我們終于走到了 $w^T$,在這個地方,微分趨近于 0,算法就認(rèn)為這里是最好的點(diǎn)了(讓 $L$ 最小的點(diǎn))。
但很明顯我們能看到,這只是一個 Local Minimum(局部最小),全局最小的點(diǎn)并不在這里,當(dāng)然 Linear Model 不太會存在這種走到 Local Minimum 的情況,至于為什么,后面會給予說明。
我們總的過程用公式表達(dá)就是這樣的:
$$ 隨機(jī)選擇一個初始的 w^0 和 b^0 Downarrow 分別對 w^0 和 b^0 做微分并計算下一個點(diǎn) w^1 和 b^1: egin{cases} w^1 gets w^0 - {color{red}eta} frac{dL}{dw}|\_{w=w^0,b=b^0} b^1 gets b^0 - {color{red}eta} frac{dL}{db}|\_{w=w^0,b=b^0} end{cases} Downarrow 分別對 w^1 和 b^1 做微分并計算下一個點(diǎn) w^2 和 b^2: egin{cases} w^2 gets w^1 - {color{red}eta} frac{dL}{dw}|\_{w=w^1,b=b^1} b^2 gets b^1 - {color{red}eta} frac{dL}{db}|\_{w=w^1,b=b^1} end{cases} vdots 最終得到一組讓 L 最小的 w^T 和 b^T $$
Gradient Descent 到底是什么呢?其實(shí)就是將 $L$ 分別對 $w$ 和 $b$ 做偏微分,最后組成一個向量:
$$ abla L = egin{bmatrix} frac{partial L}{partial w} frac{partial L}{partial b} end{bmatrix} _{gradient} $$
當(dāng)然如果你還是有點(diǎn)點(diǎn)糊涂的話,下面這張圖就能更好地向你說明,Gradient Descent 的原理:
Gradient Descent 其實(shí)就相當(dāng)于每次計算所處位置圓弧的法線方向,這個方向是數(shù)值變化最明顯的方向,所以照著這個方向能最快的走到最低點(diǎn)。
但是,遇到這種圖怎么辦?
不用擔(dān)心(至少現(xiàn)在),因?yàn)?Linear Model 的圖形其實(shí)不會像上面的圖那樣,而是像上面第二張圖那樣的,一圈一圈很規(guī)整的凹面圖形,幾乎不存在 Local Minimum 的問題。
最后,我們看一下 $frac {partial L} {partial w} $ 和 $frac {partial L} {partial b} $ 都怎么計算的(如果你不會的話,可要惡補(bǔ)一下高等數(shù)學(xué)了)
$$ L(f) = sum\_{n=1}^{10} (widehat{y}^n - (b + wcdot x\_{cp}^n))^2 Downarrow egin{cases} frac {partial L} {partial w} = sum\_{n=1}^{10} 2cdot (widehat{y}^n - (b + wcdot x\_{cp}^n))(-x\_{cp}^n) frac {partial L} {partial b} = sum\_{n=1}^{10} 2cdot (widehat{y}^n - (b + wcdot x\_{cp}^n)){-1} end{cases} $$
本文總結(jié)我們講了 Regression(線性回歸) 的一些作用與高大上的一些應(yīng)用場景,不過這些都是很復(fù)雜的應(yīng)用;
然后我們就提出了一個用 Regression 來解決寶可夢升級 CP 值預(yù)測的系統(tǒng);
通過將寶可夢的屬性代數(shù)化:$x$ 代表某個寶可夢個體、$x_{cp}$ 代表它的 CP 值、$x_h$ 代表它的高度等等,讓我們能夠通過代數(shù)的方法解決這個預(yù)測 CP 的問題;
在最開始,我們需要建立一個 Model(模型),Model 其實(shí)就是一堆 Function(計算方法)的集合,我們將一些數(shù)據(jù)輸入進(jìn)去,他就能輸出我們想要的結(jié)果:比如我們輸入一只寶可夢的數(shù)據(jù),他就能輸出這只寶可夢進(jìn)化后的 CP 值;
在第二步,我們需要 Training Data(訓(xùn)練數(shù)據(jù))。我們需要有大量的訓(xùn)練數(shù)據(jù),才能夠教會我們的模型正確預(yù)測可能的 CP 值變化;
有了 Model 和 Training Data,我們還需要有 Loss Function(誤差函數(shù))來評價我們當(dāng)前模型的好壞,其實(shí)它的實(shí)現(xiàn)很簡單,就是一個普通的函數(shù),然后將 Model 預(yù)測的 CP 值,和實(shí)際已知進(jìn)化后的 CP 值做比較,他們差距越大,Loss Funciton 輸出的 $L$ 也就越大,越小說明預(yù)測得越準(zhǔn)確;
最后我們講了如何訓(xùn)練這個 Model,用 Gradient Descent(梯度下降)算法來調(diào)節(jié)模型,梯度下降算法其實(shí)就是通過高等數(shù)學(xué)中的微分運(yùn)算,找到一個能讓 $L$ 變得更小的方向(并且這個方向是能讓 $L$減小得最快的),根據(jù)這個方向來決定是增大參數(shù)的大小還是減小參數(shù)的大小,總之,我們能夠通過不斷地訓(xùn)練調(diào)節(jié),得到一個能比較合理的、誤差盡可能小的模型。
今天就先寫到這里,小步快跑,下次更新見...
ML01 - Regression 案例學(xué)習(xí) (下)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19690.html
摘要:同理三次方程會比二次方程擬合更好誤差更小五次方程會比四次方程擬合得更好誤差更小。舉個例子來說,如果我們想訓(xùn)練機(jī)器人識別人類,我們就把小明拿給它學(xué)習(xí)。所以我們應(yīng)當(dāng)合理地選取,在減少擬合不夠情況的同時避免過度擬合。 續(xù)上 緊接著上面一篇文章 ML01 - Regression 案例學(xué)習(xí) (上) 講到的 Gradient Descent,我們現(xiàn)在有了 Model、Training Data、...
摘要:值得一提的是每篇文章都是我用心整理的,編者一貫堅持使用通俗形象的語言給我的讀者朋友們講解機(jī)器學(xué)習(xí)深度學(xué)習(xí)的各個知識點(diǎn)。今天,紅色石頭特此將以前所有的原創(chuàng)文章整理出來,組成一個比較合理完整的機(jī)器學(xué)習(xí)深度學(xué)習(xí)的學(xué)習(xí)路線圖,希望能夠幫助到大家。 一年多來,公眾號【AI有道】已經(jīng)發(fā)布了 140+ 的原創(chuàng)文章了。內(nèi)容涉及林軒田機(jī)器學(xué)習(xí)課程筆記、吳恩達(dá) deeplearning.ai 課程筆記、機(jī)...
閱讀 1548·2023-04-26 00:20
閱讀 1139·2023-04-25 21:49
閱讀 819·2021-09-22 15:52
閱讀 594·2021-09-07 10:16
閱讀 986·2021-08-18 10:22
閱讀 2681·2019-08-30 14:07
閱讀 2252·2019-08-30 14:00
閱讀 2670·2019-08-30 13:00