技術(shù)科普:用高中數(shù)學(xué)理解 AI “深度學(xué)習(xí)”的基本原理
機器聽不懂我們?nèi)祟愓Z言,我們得用數(shù)學(xué)語言向它描述問題,這就叫“建?!?。
Google 研發(fā)了十年自動駕駛后,終于在本月上線了自動駕駛出租車服務(wù)。感謝“深度學(xué)習(xí)”技術(shù),人工智能近年來在自動駕駛、疾病診斷、機器翻譯等領(lǐng)域取得史無前例的突破,甚至還搞出了些讓人驚艷的“藝術(shù)創(chuàng)作”:
Prisma 把你的照片變成藝術(shù)作品
開源軟件 style2paints 能自動給漫畫人物上色
如果不了解其中的原理,你可能會覺得這是黑魔法。
但就像愛情,“深度學(xué)習(xí)”雖然深奧,本質(zhì)卻很簡單。無論是圖像識別還是語義分析,機器的“學(xué)習(xí)”能力都來源于同一個算法 — 梯度下降法 (Gradient Descent)。要理解這個算法,你所需要的僅僅是高中數(shù)學(xué)。在讀完這篇文章后,你看待 AI 的眼光會被永遠改變。
一個例子
我們從一個具體的例子出發(fā):如何訓(xùn)練機器學(xué)會預(yù)測書價。在現(xiàn)實中,書的價格由很多因素決定。但為了讓問題簡單點,我們只考慮書的頁數(shù)這一個因素。
在機器學(xué)習(xí)領(lǐng)域,這樣的問題被稱為“監(jiān)督學(xué)習(xí) (Supervised Learning)”。意思是,如果我們想讓機器學(xué)會一件事(比如預(yù)測書的價格),那就給它看很多例子,讓它學(xué)會舉一反三(預(yù)測一本從未見過的書多少錢)。其實跟人類的學(xué)習(xí)方法差不多,對吧?
現(xiàn)在假設(shè)我們收集了 100 本書的價格,作為給機器學(xué)習(xí)的例子。大致情況如下:
接下來我們要做兩件事:
- 告訴機器該學(xué)習(xí)什么;
- 等機器學(xué)習(xí)。
告訴機器該學(xué)什么
為了讓機器聽懂問題,我們不能說普通話,得用數(shù)學(xué)語言向它描述問題,這就是所謂的“建?!薄榱俗尳酉聛淼姆治龈庇^,我們把收集回來的例子畫在數(shù)軸上:
我們希望機器通過這些樣本,學(xué)會舉一反三,當(dāng)看到一本從未見過的書時,也能預(yù)測價格。比如說,預(yù)測一本480頁的書多少錢:
480頁的書多少錢?
觀察圖表,我們能看出頁數(shù)和書價大致上是線性關(guān)系,也就是說,我們可以畫一根貫穿樣本的直線,作為預(yù)測模型。
如果我們把頁數(shù)看作 X 軸,書價看作 Y 軸,這根直線就可以表示為:
w 決定直線的傾斜程度,b 決定這根直線和 Y 軸相交的位置。問題是,看起來有很多條線都是不錯的選擇,該選哪條?換句話說 w 和 b 該等于多少呢?
每根直線都是一個候選的模型,該選哪個?
顯然,我們希望找到一根直線,它所預(yù)測的書價,跟已知樣本的誤差最小。換句話說,我們希望下圖中的所有紅線,平均來說越短越好。
紅線的長度,就是模型(藍色虛線)預(yù)測的書價,和樣本書價(藍點)之間的誤差
紅線的長度等于預(yù)測書價和樣本書價的差。以第一個樣本為例,55 頁的書,價格 69 元,所以第一根紅線的長度等于:
因為絕對值不便于后面的數(shù)學(xué)推導(dǎo),我們加個平方,一樣能衡量紅線的長度。
因為我們的預(yù)測模型是:
所以
這個樣本是一本 55 頁,69 元的書。
算式開始變得越來越長了,但記住,這都是初中數(shù)學(xué)而已!前面提到,我們希望所有紅線平均來說越短越好,假設(shè)我們有 100 個樣本,用數(shù)學(xué)來表達就是:
至此,我們把“預(yù)測書價”這個問題翻譯成數(shù)學(xué)語言:“找出 w 和 b 的值,使得以上算式的值最小。”堅持住,第一步馬上結(jié)束了!
我們現(xiàn)在有 2 個未知數(shù):w 和 b。為了讓問題簡單一點,我們假設(shè) b 的最佳答案是 0 好了,現(xiàn)在,我們只需要關(guān)注 w 這一個未知數(shù):
把括號打開:
在機器學(xué)習(xí)領(lǐng)域,這個方程被稱為“代價 (cost) 函數(shù)”,用于衡量模型的預(yù)測值和實際情況的誤差。我們把括號全打開:
不用在意方程中的數(shù)字,都是我瞎掰的。
至此,我們把“預(yù)測書價”這個問題翻譯成數(shù)學(xué)語言:“w 等于多少時,代價函數(shù)最小?”第一步完成!到目前為止,我們只用上了初中數(shù)學(xué)。
機器是怎么學(xué)習(xí)的
代價函數(shù)是個一元二次方程,畫成圖表的話,大概會是這樣:
不用在意坐標軸上的具體數(shù)字,都是我瞎掰的。
前面講到,機器要找到一個 w 值,把代價降到最低:
機器采取的策略很簡單,先瞎猜一個答案(比如說 w 等于 20 ,下圖紅點),雖然對應(yīng)的代價很高,但沒關(guān)系,機器會用“梯度下降法”不斷改進猜測。
如果你微積分學(xué)得很好,此時可能會問:求出導(dǎo)數(shù)函數(shù)為 0 的解不就完事了嗎?在實際問題中,模型往往包含上百萬個參數(shù),它們之間也并非簡單的線性關(guān)系。針對它們求解,在算力上是不現(xiàn)實的。
現(xiàn)在,我們得用上高中數(shù)學(xué)的求導(dǎo)函數(shù)了。針對這個瞎猜的點求導(dǎo),導(dǎo)數(shù)值會告訴機器它猜得怎么樣,小了還是大了。
如果你不記得導(dǎo)數(shù)是什么,那就理解為我們要找到一根直線,它和這條曲線只在這一個點上擦肩而過,此前以后,都無交集(就像你和大部分朋友的關(guān)系一樣)。所謂的導(dǎo)數(shù)就是這根線的斜率。
我們可以看得出,在代價函數(shù)的最小值處(即曲線的底部)導(dǎo)數(shù)等于 0。如果機器猜測的點,導(dǎo)數(shù)大于 0,說明猜太大了,下次得猜小一點,反之亦然。根據(jù)導(dǎo)數(shù)給出的反饋,機器不斷優(yōu)化對 w 的猜測。因為機器一開始預(yù)測的點導(dǎo)數(shù)大于 0 ,所以接下來機器會猜測一個小一點的數(shù):
機器接著對新猜測的點求導(dǎo),導(dǎo)數(shù)不等于 0 ,說明還沒到達曲線底部。
那就接著猜!機器孜孜不倦地循環(huán)著“求導(dǎo) – 改進猜測 – 求導(dǎo) – 改進猜測”的自我優(yōu)化邏輯 —— 沒錯,這就是機器的“學(xué)習(xí)”方式。順便說一句,看看下圖你就明白它為什么叫做“梯度下降法”了。
終于,皇天不負有心機,機器猜到了最佳答案:
就這樣,頭腦簡單一根筋的機器靠著“梯度下降”這一招鮮找到了最佳的 w 值,把代價函數(shù)降到最低值,找到了最接近現(xiàn)實的完美擬合點。
總結(jié)一下,我們剛剛談?wù)摿巳拢?/p>
- 通過觀察數(shù)據(jù),我們發(fā)現(xiàn)頁數(shù)與書價是線性關(guān)系——選定模型;
- 于是我們設(shè)計出代價函數(shù),用來衡量模型的預(yù)測書價和已知樣本之間的差距——告訴計算機該學(xué)習(xí)什么;
- 機器用“梯度下降法”下,找到了把代價函數(shù)降到最低的參數(shù) w ——機器的學(xué)習(xí)方法。
機器“深度學(xué)習(xí)”的基本原理就是這么簡單?,F(xiàn)在,我想請你思考一個問題:機器通過這種方法學(xué)到的“知識”是什么?
現(xiàn)實問題中的深度學(xué)習(xí)
為了讓數(shù)學(xué)推演簡單點,我用了一個極度簡化的例子。現(xiàn)實中的問題可沒那么簡單,主要的差別在于:
現(xiàn)實問題中,數(shù)據(jù)的維度非常多。
今天在預(yù)測書價時,我們只考慮了頁數(shù)這一個維度,在機器學(xué)習(xí)領(lǐng)域,這叫做一個“特征 (feature)”。
但假設(shè)我們要訓(xùn)練機器識別貓狗。一張 200 * 200 的圖片就有 4 萬個像素,每個像素又由 RGB 三個數(shù)值來決定顏色,所以一張圖片就有 12 萬個特征。換句話說,這個數(shù)據(jù)有 12 萬個維度,這可比頁數(shù)這一個維度復(fù)雜多了。好在,無論有多少個維度,數(shù)學(xué)邏輯是不變的。
現(xiàn)實問題中,數(shù)據(jù)之間不是線性關(guān)系。
在今天的例子中,頁數(shù)和書價之間是線性關(guān)系。但你可以想象得到,貓照片的 4 萬個像素和“貓”這個概念之間,可不會是簡單的線性關(guān)系。事實上兩者之間的關(guān)系是如此復(fù)雜,只有用多層神經(jīng)網(wǎng)絡(luò)的上百萬個參數(shù)(上百萬個不同的 w:w1, w2,……w1000000)才足以表達。所謂“深度”學(xué)習(xí)指的就是這種多層網(wǎng)絡(luò)的結(jié)構(gòu)。
說到這里,我們可以回答前面的問題了:機器所學(xué)到的“知識”到底是什么?
就是這些w。
在今天的例子中,機器找到了正確的 w 值,所以當(dāng)我們輸入一本書的頁數(shù)時,它能預(yù)測書價。同樣的,如果機器找到一百萬個正確的 w 值,你給它看一張照片,它就能告訴你這是貓還是狗。
正因為現(xiàn)實問題如此復(fù)雜,為了提高機器學(xué)習(xí)的速度和效果,在實際的開發(fā)中,大家用的都是梯度下降的各種強化版本,但原理都是一樣的。
感謝你讀到這里
深度學(xué)習(xí)是個日新月異的廣袤領(lǐng)域,受限于個人水平和篇幅,這篇文章不過是管中窺豹。希望本文能稍稍掀開機器學(xué)習(xí)的神秘面紗,給你一個看待“知識”的新角度。
作者:SJL,公眾號:欠擬合。
本文由 @SJL 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
簡單易懂,還比較接近人工智能原理,很牛逼!
厲害??,解釋最基本原理,懂了最簡單的,其他可以靠自己舉一反三
講的挺好,想再多了解一些人工智能知識的推薦看《人工智能基礎(chǔ) 高中版》,講解的還是非常深入淺出的,適合入門。
膜拜大神,解釋的太通俗易懂了
可以可以 ??