聊聊深度學習這檔子事(1):待定系數法


聊聊深度學習這檔子事(1):待定系數法

作者: 許野平 2016-06-16 於濟南

深度學習這幾年很火,寫算法不和深度學習沾點邊都不好意思和人家打招呼。面對新生事物,老朽我總覺得好奇,就想看看深度學習這玩藝到底有啥新鮮東西,總覺得它要解決的問題,並沒有超出傳統數學方法,為啥就突然火起來了呀?

嘗試着用傳統方法寫一些代碼,看看能否解決深度學習領域的問題。邊寫邊比較,感覺在慢慢領悟深度學習技術背后一些東西,然后斗膽寫出來,和大家一起分享。或許換個角度看深度學習,能給大家一點啟示。

我覺得深度學習這玩藝兒,不能只滿足會用一些開源工具,因為別管這些開源工具有多強大,總是會有它的局限性。與其被動跟在別人屁股后面學步,不如主動出擊,自己搞明白深度學習理論背后的秘密。在自己遇到特殊問題時,可以舉一反三,靈活運用這些技術有針對性地編寫代碼,這樣學到的知識,才是活的。作為程序員,能做到這一步才算合格。

既然是閑聊,我也不願意搞出很多復雜公式,把大家整得頭暈眼花。理解復雜問題,最好通過簡單實例,用解剖麻雀的方法,逐步理解事物的本質。因此,我將通過簡單例子,說明深度學習這種復雜理論的原理和運作機制。有了這個基礎,再去學習嚴謹的理論知識,就水到渠成了。

深度學習數學模型動輒上萬甚至數百萬個參數,訓練數據也常常數以億計。盡管如此,它們的原理仍然可以借助簡單問題講明白。本系列文章以兩個參數的模型和三組訓練數據為起點,由淺入深逐步剖析深度學習算法的原理和運行機制。

1. 初遇機器學習

幾年前,公司交給一個任務,讓編寫一個人臉識別算法。我當時不知深淺,不假思索就同意了,殊不知帶領幾個小兄弟一腳踏進一個無底深淵。折騰了沒多久,我們發現,人臉識別算法和過去寫的所有的算法面臨的問題和求解方法都不一樣。區別在哪里呢?

以前寫算法,都是根據已知條件和問題要求,首先梳理人工求解的方法。人工求解方法搞定了,再把人工過程翻譯成程序設計語言,交給計算機去干就行了。可是我們整了好幾個月,也沒找出一套識別人臉的有效法則。

一開始以為根據人臉輪廓加上五官的位置和形狀,很容易判斷兩張照片是否為同一人,結果發現,即使沒有姿態、光照、表情和遮擋干擾,這種方法比對的識別准確率也只有65%。

大家可能認為這個成績已經不錯了,可是要知道,擲硬幣的方法判斷兩張照片是否為同一人,准確率還有50%呢!所以,這個成績只是比擲硬幣略好而已。

折騰一陣子后,我們意識到像人臉識別這樣復雜的問題,指望人工總結出規律,再寫程序讓電腦執行,這條路子行不通。既然人工無法總結規律,那就得想辦法讓電腦自己總結規律,這就是另外一種算法套路了——扔給電腦一大堆數據,讓電腦分析總結其中規律,然后遇到沒見過的數據,電腦也能正確應對。

這種能讓電腦自己總結規律的算法,就屬於機器學習范疇了。這真是一個奇妙的想法,人類自己無法從數據中總結規律,但是卻可以提高一個層次,寫出可以自行總結規律的算法出來,細想起來真得很有意思!

2. 一個簡單例子

我們先來看一個簡單例子,通過這個例子可以初步了解機器學習的一般方法。

告訴你人的身高,你能估計出體重嗎?這是一個很平常的數學問題。一般來說,我們會假定身高 x 和體重 y 之間存在函數關系,比如:
y=ax+b
根據簡單的數學常識可知,只需要知道兩個人的數據,即可求出系數a,b的值。我們隨便測量兩個人,得到如下數據:

編號 身高 體重
1 178 80
2 162 55

用待定系數法求解a,b的值沒有任何困難吧?這個問題展示了機器學習方法的核心思想——機器學習本質上就是待定系數法

3. 機器學習過程的三個部分

上面這個待定系數法的問題,現在可以歸類到機器學習門下了。按照機器學習的一般規律,其工作過程分為三個步驟:建模、訓練、預測。

3.1 建模

首先我們假定因果變量之間存在某種數學關系(比如前面的 y=ax+b ),我們稱之為建立模型。

3.2 訓練

然后,利用觀察數據求解關系式中的系數(比如前面關系式中的 a,b ),這個過程稱為訓練。

3.3 預測

最后,我們可以利用得到的具體關系式對未知的數據進行判斷,這個過程稱之為預測。例如,身高 180cm 的人體重應該是多少?

4. 大數據問題

線性代數是機器學習理論必不可少的工具。前面的例子,要求解 a,b 的值,必須得解下面這個線性方程組:

{178a+b=80162a+b=55

我們僅根據兩個人的數據求出了 a,b 的值。這個從統計學角度看顯然是不合理的,因為用兩個人的數據確定整個人類的身高體重關系,數據依據不充分。

數據量太多也會有麻煩。求兩個系數,有兩組數據足夠了,多出來的數據,從解方程角度來講是多余的。可是實際應用中我們會遇到成千上萬的觀察數據,而模型的待定參數相對要少得多,這個時候如何利用龐大的數據確定參數的值呢?我想,大數據問題的本質可能就在這里吧?

在我們這個例子中,兩組訓練數據正合適,三組訓練數據就算大數據了。利用三組訓練數據求解數學模型,和利用一百萬組訓練數據求解,方法是一樣。

4.1 超定方程組

下面的方程組,方程的個數比未知數的個數多,方程組解的幾何意義是三條直線的交點。我們知道,三條直線通常不會相交於同一點,也就是說大部分情況下方程組是無解的。如果方程個數比未知數個數多,這樣的方程組稱為超定方程組

a11x1+a12x2=b1a21x1+a12x2=b2a31x1+a32x2=b3

4.2 超定方程組的精確解

如果身高和體重嚴格符合模型 y=ax+b 所定義的關系,理論上來講觀測數據再多,得到的超定方程也必然有解。例如,假如身高和體重完全精確地符合 y=x105 這個關系,我們得到的觀察數據也完全符合這個關系,例如:

編號 身高(cm) 體重(kg)
1 150 45
2 155 50
3 160 55
4 165 60
5 180 75

於是,得到方程組:

150a+b=45155a+b=50160a+b=55165a+b=60180a+b=75

任取兩個方程,容易求出, a=1,b=105 ,經驗證是超定方程組的唯一精確解。

可見,別管有多少方程,如果模型正確,觀測數據也完全無偏差,方程組必然有唯一的精確解。

4.3 超定方程組的近似解

如果模型和訓練數據之間並不精確吻合,超定方程組通常無解。例如采集的訓練數據不嚴格地落在同一條直線上:

編號 身高(cm) 體重(kg)
1 150 48
2 155 52
3 160 49
4 165 53
5 180 82

於是,得到方程組:

150a+b=48155a+b=52160a+b=49165a+b=53180a+b=82

數學模型假定樣本點落在同一條直線上,這一次的訓練數據稍有偏差。於是看到有一個很有意思的現象,方程組包括5個方程,代表 ab 平面上5條直線。求超定方程組的解,實際上就是求這 5 條直線共同的交點。由於訓練數據稍有偏差,這5條直線兩兩相交,產生10個交點,這10個交點的位置都稍微偏離了 (1,105) 這個位置。

考慮到模型本身不精確,訓練數據也會有一定偏差,我們可以用這10個交點坐標的平均值,也就是它們的重心坐標作為超定方程組的近似解,這樣雖然超定方程組沒有精確解,並不代表它就沒任何用途。相反,利用它的近似解,確定一個近似的模型也很有用。於是我們得到一個結論:超定方程組無精確解時,可以求其近似解。

4.4 近似解精度取決於什么因素?

別管有多少方程,如果模型正確,觀測數據也完全無偏差,方程組必然有唯一精確的解。模型與觀測數據完全相符的情況不多,實際上我們常遇到兩種情況:

  • 模型正確,觀測數據誤差可控制在一定范圍內,物理學公式大部分就是在這種條件下發現的。
  • 模型近似正確,觀測數據誤差可控制在一定范圍內,機器學習問題基本上如此。

這上述情況下,可以斷定,超定方程組近似解的誤差范圍能夠被控制在一定范圍內。模型越接近正確形式,觀測數據誤差越小,近似解的誤差范圍就越小。所以,解決機器學習問題,模型的選擇和訓練數據的篩選處理,是取得好的訓練結果的關鍵。如果模型本身是錯誤的,什么方法也不能保證得到好的訓練結果。

4.5 求近似解的途徑

前面的例子中,5條直線兩兩相交,產生10個交點,求其平均值,也就是10個交點的重心,作為近似解,簡單合理。但是,如果有一萬組訓練數據,問題就變成一萬條直線兩兩相交,產生大約五千萬個交點,求交點的計算量太大了,計算復雜度為 O(n2) ,計算量太大了,很難實際應用。

既然求近似解,只要結果別差得太遠就好,沒必要用求平均值的方法。思想解放了,辦法就多得是。於是,在完美和現實之間,有人發明了一種折中求解方法,拉開了機器學習的序幕,之后一幕又一幕精彩的大戲逐步登場。盡管好戲連台,但其本質沒有改變,仍然是求待定系數,區別在於:在機器學習領域,我們要用比待定系數個數多得多的訓練數據,求模型的近似解。

小結

  • 機器學習的本質是待定系數法;
  • 因為訓練數據的數量通常遠遠多於參數的數量,因此,模型參數可以借助超定方程組求解;
  • 超定方程組解的誤差范圍,取決於模型的合理性和訓練數據的適用性。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com