6段Python代码刻画深度学习历史:从最小二乘法到深度神经网络
深度學(xué)習(xí)的一切都起源于這個(gè)數(shù)學(xué)片段(我把它用Python 寫了出來):
?
這一方法是 1805 年巴黎數(shù)學(xué)家阿德利昂·瑪利·埃·勒讓德首次提出的(1805,Legendre),勒讓德建立了許多重要的定理,尤其是在數(shù)論和橢圓積分(Elliptic Integrals)方面,提出了對(duì)素?cái)?shù)定理(Prime Number Theorem)和二次互反律(Quadratic Reciprocity)的猜測(cè)并發(fā)表了初等幾何教科書。他對(duì)預(yù)測(cè)彗星的未來位置特別癡迷。他找到了根據(jù)彗星此前的幾個(gè)位置計(jì)算其軌跡的方法。
他嘗試了幾種方法,終于找到了一個(gè)讓他滿意的方法。勒讓德先猜測(cè)彗星的未來位置,然后平方其誤差,重新做出猜測(cè),以減少平方誤差的和。這是線性回歸的種子。
?
上述代碼中,m 是系數(shù),b是預(yù)測(cè)中的常數(shù),坐標(biāo)是彗星的位置。我們的目標(biāo)是找到m和b的組合,使其誤差盡可能小。
?
?
這就是深度學(xué)習(xí)的核心理念:輸入,然后設(shè)定期望的輸出,找到二者的相關(guān)性。
勒讓德手工降低誤差率的方法很耗時(shí)。荷蘭諾貝爾獎(jiǎng)得主Peter Debye 在一個(gè)世紀(jì)后(1909年,Debye)正式確定了解決方案。
讓我們想象一下,勒讓德有一個(gè)參數(shù)需要擔(dān)心——我們稱之為X。Y軸表示每個(gè)X的誤差值。勒讓德尋找的是最低誤差時(shí)X的位置。在這種圖形化表示中,我們可以看到誤差Y最小化時(shí),X = 1.1。
?
?
彼得·德比(Peter Debye)注意到最低點(diǎn)左邊的斜率是負(fù)的,而另一邊則是正的。因此,如果知道任何給定X值的斜率值,就可以將Y 導(dǎo)向最小值。
這引出了梯度下降的方法。幾乎每一個(gè)深度學(xué)習(xí)模型中都在使用這個(gè)原則。
?
寫成Python:
?
這里要注意的是learning_rate。通過沿斜率相反方向接近最小值。此外,越接近最小值,斜率越小。每一步都會(huì)減少,因?yàn)樾甭氏蛄阙吔?/span>
num_iterations 是達(dá)到最小值前的預(yù)計(jì)迭代次數(shù)。
通過組合最小二乘法和梯度下降法,就可以得到線性回歸。 20世紀(jì)50年代和60年代,一批實(shí)驗(yàn)經(jīng)濟(jì)學(xué)家在早期的計(jì)算機(jī)上實(shí)現(xiàn)了這個(gè)想法。這個(gè)邏輯是在卡片計(jì)算機(jī)上實(shí)現(xiàn)的,那是真正的手工軟件程序。當(dāng)時(shí)需要幾天的時(shí)間準(zhǔn)備這些打孔卡,最多24小時(shí)才能通過計(jì)算機(jī)進(jìn)行一次回歸分析。
現(xiàn)在用不著打孔卡了,用Python 寫出來是這樣的:
?
將誤差函數(shù)與梯度下降合并可能會(huì)有一點(diǎn)不好理解??梢赃\(yùn)行代碼試一試。
?
查查弗蘭克·羅森布拉特(Frank Rosenblatt)這個(gè)人——他白天解剖大鼠的大腦,并在夜間尋找外星生命的跡象。1958 年,他造了一個(gè)模仿神經(jīng)元的機(jī)器(1958,Rosenblatt ),登上了“紐約時(shí)報(bào)”的頭版《新海軍裝備學(xué)習(xí)》。
如果你給Rosenblatt的機(jī)器看50組圖像,每組中的一張標(biāo)有“向左”,另一張標(biāo)著“向右”,這臺(tái)機(jī)器能夠在沒有預(yù)編程的情況下對(duì)它們進(jìn)行區(qū)分。公眾被機(jī)器真正能學(xué)習(xí)的這種可能性吸引了。
對(duì)于每個(gè)訓(xùn)練周期,您從左側(cè)輸入數(shù)據(jù)。初始隨機(jī)權(quán)重添加到所有輸入數(shù)據(jù)上。權(quán)重之和被計(jì)算出來。如果和為負(fù),則被寫為0,否則寫為1。
如果預(yù)測(cè)是正確的,那么該循環(huán)中的權(quán)重就不做任何調(diào)整。如果有錯(cuò)誤的,就將誤差乘以學(xué)習(xí)率。這會(huì)相應(yīng)地調(diào)整權(quán)重。
?
把感知器寫成Python:
?
經(jīng)過頭一年的炒作,Marvin Minsky 和Seymour Papert 否定了這個(gè)想法(1969, Minsky& Papert)。當(dāng)時(shí),, Minsky 和 Papert 都在麻省理工學(xué)院的AI實(shí)驗(yàn)室工作。他們寫了一本書,證明感知器只能解決線性問題。他們還駁斥了關(guān)于多層感知器的想法。不幸的是,弗蘭克·羅森布拉特兩年后遭遇了海難。
在, Minsky 和 Papert 專著出版一年之后,芬蘭的一名大學(xué)生發(fā)現(xiàn)了解決多層感知器的非線性問題的理論(Linnainmaa,1970)。由于感知器遭受的批評(píng),AI相關(guān)投資枯竭了十多年。這被稱為AI 的第一個(gè)寒冬。
Minsky 和 Papert 的批評(píng)是XOR Problem。邏輯與OR邏輯相同,但有一個(gè)例外 - 當(dāng)你有兩個(gè)true語句(1&1)時(shí),返回False(0)。
?在 OR 邏輯中,可能將 true combination 從 false 中分離出來。但如你所見,你無法將 XOR 和一個(gè)線性函數(shù)分離。
到1986年,幾項(xiàng)實(shí)驗(yàn)證明了,神經(jīng)網(wǎng)絡(luò)可以解決復(fù)雜的非線性問題(Rumelhart等,1986)。當(dāng)時(shí)的計(jì)算機(jī)比理論提出時(shí)快了一萬倍。這時(shí),Rumelhart提出了他們具有傳奇色彩的論文:
?
我們描述了神經(jīng)元式單元網(wǎng)絡(luò)的新的學(xué)習(xí)過程,反向傳播。該過程反復(fù)地調(diào)整網(wǎng)絡(luò)中的連接權(quán)重,以便最小化網(wǎng)絡(luò)的實(shí)際輸出向量與期望的輸出向量之間的差異。作為權(quán)重調(diào)整的結(jié)果,不屬于輸入或輸出的內(nèi)部“隱藏”單元代表了任務(wù)域的重要特征,并且任務(wù)中的規(guī)則由這些單元的交互捕獲。創(chuàng)造有用的新函數(shù)的能力將反向傳播與早期更簡單的方法區(qū)分開來,例如感知器收斂過程“Nature 323,533-536(1986年10月9日)。
?
這一方法解決了XOR問題,解凍了第一個(gè)AI 寒冬。
?
請(qǐng)注意,X_XOR數(shù)據(jù)中添加的參數(shù)[1]是偏置神經(jīng)元,它們與線性函數(shù)中的常量具有相同的行為。
?
反向傳播、矩陣乘法和梯度下降組合可能很難包圍你的頭腦。這個(gè)過程的可視化通常是對(duì)發(fā)生事情的簡化。請(qǐng)專注于理解背后的邏輯。
深層神經(jīng)網(wǎng)絡(luò)是輸入層和輸出層之間具有很多層的神經(jīng)網(wǎng)絡(luò)。這個(gè)概念是由Rina Dechter(Dechter,1986)引入的,但在2012年獲得了主流關(guān)注。不久之后就出現(xiàn)了IBM Watson 的Jeopardy 大勝和谷歌識(shí)貓的成功。
?
深度神經(jīng)網(wǎng)絡(luò)的核心結(jié)構(gòu)保持不變,但現(xiàn)在應(yīng)用于幾個(gè)不同的問題。正則化也有很多改進(jìn)。最初,這是一組數(shù)學(xué)函數(shù),來簡化嘈雜的數(shù)據(jù)(Tikhonov,A.N,1963)。它們現(xiàn)在用于神經(jīng)網(wǎng)絡(luò),以提高其泛化能力。
創(chuàng)新的很大一部分是原因計(jì)算能力的飛躍。它改進(jìn)了研究者的創(chuàng)新周期——80年代中期的超級(jí)計(jì)算機(jī)需要計(jì)算一年的東西,今天GPU 技術(shù)半秒就能算好。
?
計(jì)算方面的成本降低以及深度學(xué)習(xí)庫的發(fā)展現(xiàn)在已經(jīng)眾所周知。我們來看一個(gè)普通的深度學(xué)習(xí)的例子,從底層開始:
GPU > Nvidia Tesla K80。硬件常用于圖形處理。與CPU相比,深度學(xué)習(xí)平均速度要快50-200倍。
CUDA > GPU的低級(jí)編程語言
CuDNN > Nvidia?優(yōu)化 CUDA的庫
Tensorflow > Google?在?CuDNN?之上的深度學(xué)習(xí)框架
TFlearn > Tensorflow的前端框架
我們來看看MNIST圖像分類,深度學(xué)習(xí)的入門任務(wù)。
?
用 TFlearn 執(zhí)行:
?
如您在TFlearn示例中所看到的,深度學(xué)習(xí)的主要邏輯仍然類似于Rosenblatt的感知器。不使用二進(jìn)制Heaviside step function,今天的網(wǎng)絡(luò)大多使用Relu activition。在卷積神經(jīng)網(wǎng)絡(luò)的最后一層,損失等于categorical_crossentropy。這是勒讓德最小二乘法的演變,是多類別的邏輯回歸。優(yōu)化器adam起源于 Debye 梯度下降的工作。 Tikhonov的正則化概念以停用層和正則化函數(shù)的形式得到廣泛實(shí)施。
?
原文地址:http://blog.floydhub.com/coding-the-history-of-deep-learning/
來源:新智元
戳閱讀原文,即刻報(bào)名領(lǐng)取書籍
總結(jié)
以上是生活随笔為你收集整理的6段Python代码刻画深度学习历史:从最小二乘法到深度神经网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员的项目周期(表情包版)
- 下一篇: 是学习Java还是Python?一张图告