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