關於深度學習,可能是最容易讀進去的科普
(一)
一
2016 年一月底,人工智慧的研究領域,發生了兩件大事。
先是一月二十四號,MIT 的教授,人工智慧研究的先驅者,Marvin Minsky 去世,享年89 歲。
三天之後,谷歌在自然雜誌上正式公開發表論文,宣佈其以深度學習技術為基礎的電腦程式 AlphaGo, 在 2015年 十月,連續五局擊敗歐洲冠軍、職業二段樊輝。
這是第一次機器擊敗職業圍棋選手。距離 97年IBM 電腦擊敗國際象棋世界冠軍,一晃近二十年了。
極具諷刺意義的是,Minsky 教授,一直不看好深度學習的概念。他曾在 1969年 出版了 Perceptron (感知器) 一書,指出了神經網路技術 (就是深度學習的前身) 的侷限性。這本書直接導致了神經網路研究的將近二十年的長期低潮。
神經網路研究的歷史,是怎樣的?
深度學習有多深?學了究竟有幾分?
二
人工智慧研究的方向之一,是以所謂 "專家系統" 為代表的,用大量 "如果-就" (If - Then) 規則定義的,自上而下的思路。
人工神經網路 ( Artifical Neural Network),標誌著另外一種自下而上的思路。
神經網路沒有一個嚴格的正式定義。它的基本特點,是試圖模仿大腦的神經元之間傳遞,處理資訊的模式。
一個計算模型,要劃分為神經網路,通常需要大量彼此連線的節點 (也稱 '神經元'),並且具備兩個特性:
- 每個神經元,通過某種特定的輸出函式 (也叫激勵函式 activation function),計算處理來自其它相鄰神經元的加權輸入值
- 神經元之間的資訊傳遞的強度,用所謂加權值來定義,演算法會不斷自我學習,調整這個加權值
在此基礎上,神經網路的計算模型,依靠大量的資料來訓練,還需要:
- 成本函式 (cost function):用來定量評估根據特定輸入值, 計算出來的輸出結果,離正確值有多遠,結果有多靠譜
- 學習的演算法 ( learning algorithm ):這是根據成本函式的結果, 自學, 糾錯, 最快地找到神經元之間最優化的加權值
用小明、小紅和隔壁老王們都可以聽懂的語言來解釋,神經網路演算法的核心就是:計算、連線、評估、糾錯、瘋狂培訓。
隨著神經網路研究的不斷變遷,其計算特點和傳統的生物神經元的連線模型漸漸脫鉤。
但是它保留的精髓是:非線性、分散式、平行計算、自適應、自組織。
三
神經網路作為一個計算模型的理論,1943年 最初由科學家 Warren McCulloch 和 Walter Pitts 提出。
康內爾大學教授 Frank Rosenblatt 1957年 提出的"感知器" (Perceptron),是第一個用演算法來精確定義神經網路,第一個具有自組織自學習能力的數學模型,是日後許多新的神經網路模型的始祖。
Rosenblatt 樂觀地預測,感知器最終可以 “學習、做決定、翻譯語言”。感知器的技術,六十年代一度走紅,美國海軍曾出資支援這個技術的研究,期望它 “以後可以自己走、說話、看、讀、自我複製、甚至擁有自我意識”。
Rosenblatt 和 Minsky 實際上是間隔一級的高中校友。但是六十年代,兩個人在感知器的問題上展開了長時間的激辯。Rosenblatt 認為感應器將無所不能,Minsky 則認為它應用有限。
1969 年,Marvin Minsky 和 Seymour Papert 出版了新書:“感知器:計算幾何簡介”。書中論證了感知器模型的兩個關鍵問題:
第一,單層的神經網路無法解決不可線性分割的問題,典型例子如異或門,XOR Circuit ( 通俗地說,異或門就是:兩個輸入如果是異性戀,輸出為一。兩個輸入如果是同性戀,輸出為零 )
第二,更致命的問題是,當時的電腦完全沒有能力完成神經網路模型所需要的超大的計算量。
此後的十幾年,以神經網路為基礎的人工智慧研究進入低潮,相關專案長期無法得到政府經費支援,這段時間被稱為業界的核冬天。
Rosenblatt 自己則沒有見證日後神經網路研究的復興。1971年 他 43 歲生日時,不幸在海上開船時因為事故而喪生。
(二)
一
1970年,當神經網路研究的第一個寒冬降臨時。在英國的愛丁堡大學,一位二十三歲的年輕人,Geoffrey Hinton,剛剛獲得心理學的學士學位。
Hinton 六十年代還是中學生時,就對腦科學著迷。當時一個同學給他介紹關於大腦記憶的理論是:
大腦對於事物和概念的記憶,不是儲存在某個單一的地點,而是像全息照片一樣,分散式地,存在於一個巨大的神經元的網路裡。
分散式表徵 (Distributed Representation),是神經網路研究的一個核心思想。
它的意思是,當你表達一個概念的時候,不是用單個神經元一對一地儲存定義;概念和神經元是多對多的關係:一個概念可以用多個神經元共同定義表達,同時一個神經元也可以參與多個不同概念的表達。
舉個最簡單的例子。一輛 "大白卡車",如果分散式地表達,一個神經元代表大小,一個神經元代表顏色,第三個神經元代表車的類別。三個神經元同時啟用時,就可以準確描述我們要表達的物體。
分散式表徵和傳統的區域性表徵 (localized representation) 相比,儲存效率高很多。線性增加的神經元數目,可以表達指數級增加的大量不同概念。
分散式表徵的另一個優點是,即使區域性出現硬體故障,資訊的表達不會受到根本性的破壞。
這個理念讓 Hinton 頓悟,使他四十多年來,一直在神經網路研究的領域裡堅持下來沒有退縮。
本科畢業後,Hinton 選擇繼續在愛丁堡大學讀研,把人工智慧作為自己的博士研究方向。
周圍的一些朋友對此頗為不解。"你瘋了嗎? 為什麼浪費時間在這些東西上? 這 (神經網路) 早就被證明是扯淡的東西了。"
Hinton 1978 年在愛丁堡獲得博士學位後,來到美國繼續他的研究工作。
二
神經網路當年被 Minsky 詬病的問題之一是巨大的計算量。
簡單說,傳統的感知器用所謂 "梯度下降"的演算法糾錯時,耗費的計算量和神經元數目的平方成正比。當神經元數目增多,龐大的計算量是當時的硬體無法勝任的。
1986年 七月,Hinton 和 David Rumelhart 合作在自然雜誌上發表論文, "Learning Representations by Back-propagating errors",第一次系統簡潔地闡述反向傳播演算法在神經網路模型上的應用。
反向傳播演算法,把糾錯的運算量下降到只和神經元數目本身成正比。
反向傳播演算法,通過在神經網路裡增加一個所謂隱層 (hidden layer),同時也解決了感知器無法解決異或門 (XOR gate) 的難題。
使用了反向傳播演算法的神經網路,在做諸如形狀識別之類的簡單工作時,效率比感知器大大提高。
八十年代末計算機的執行速度,也比二十年前高了幾個數量級。
神經網路的研究開始復甦。
三
Yann Lecun (我給他取箇中文名叫 "嚴樂春"吧) 1960年 出生於巴黎。1987年 在法國獲得博士學位後,他曾追隨 Hinton 教授到多倫多大學做了一年博士後的工作,隨後搬到新澤西州的貝爾實驗室繼續研究工作。
在貝爾實驗室,嚴樂春 1989年 發表了論文, "反向傳播演算法在手寫郵政編碼上的應用"。他用美國郵政系統提供的近萬個手寫數字的樣本來培訓神經網路系統,培訓好的系統在獨立的測試樣本中, 錯誤率只有 5%。
嚴樂春進一步運用一種叫做"卷積神經網路" (Convoluted Neural Networks) 的技術,開發出商業軟體用於讀取銀行支票上的手寫數字,,這個支票識別系統在九十年代末佔據了美國接近 20%的市場。
此時就在貝爾實驗室,嚴樂春臨近辦公室的一個同事的工作,又把神經網路的研究帶入第二個寒冬。
四
Vladmir Vapnik,1936年 出生於前蘇聯,90年 移民到美國,在貝爾實驗室做研究。
早在 1963年,Vapnik 就提出了 支援向量機 (Support Vector Machine) 的演算法。支援向量機,是一種精巧的分類演算法。
除了基本的線性分類外,在資料樣本線性不可分的時候,SVM 使用所謂 "核機制" (kernel trick) 的非線性對映演算法,將線性不可分的樣本轉化到高維特徵空間 (high-dimensional feature space),使其線性可分。
SVM,作為一種分類演算法,九十年代初開始,在影象和語音識別上找到了廣泛的用途。
在貝爾實驗室的走廊上,嚴樂春和 Vapnik 常常就 (深度) 神經網路和 SVM 兩種技術的優缺點,展開熱烈的討論。
Vapnik 的觀點是:SVM,非常精巧地在 "容量調節" (Capacity Control) 上 選擇一個合適的平衡點,而這是神經網路不擅長的。
什麼是 "容量調節"? 舉個簡單的例子:如果演算法容量太大,就像一個記憶力極為精準的植物學家,當她看到一顆新的樹的時候,由於這棵樹的葉子和她以前看到的樹的葉子數目不一樣,所以她判斷這不是樹;如果演算法容量太小,就像一個懶惰的植物學家,只要看到綠色的東西都把它叫做樹。
嚴樂春的觀點是:用有限的計算能力,解決高度複雜的問題,比"容量調節"更重要。支援向量機,雖然演算法精巧,但本質就是一個雙層神經網路系統。它的最大的侷限性,在於其"核機制"的選擇。當影象識別技術需要忽略一些噪音訊號時,卷積神經網路的技術,計算效率就比 SVM 高的多。
在手寫郵政編碼的識別問題上,SVM 的技術不斷進步,1998年 就把錯誤率降到低於 0.8%,2002年 最低達到了 0.56%,這遠遠超越同期傳統神經網路演算法的表現。
神經網路的計算,在實踐中還有另外兩個主要問題:
第一,演算法經常停止於區域性最優解,而不是全球最優解。這好比"只見樹木,不見森林"。
第二,演算法的培訓,時間過長時,會出現過度擬合 (overfit),把噪音當做有效訊號。
(三)
一
1992 年筆者在紐約州的羅切斯特大學選修計算機課的時候,學到這樣一句話,印象極為深刻。
When in doubt, use brute force.
"如果遇到困惑 (的問題), 就使用蠻力. "
此話出自當年 UNIX 系統的發明人之一 Ken Thompson。他的本意是,程式設計中,簡單粗暴的計算方法,雖然可能計算量大,但是便於實現和維護,長期看,還是優於一些精巧但是複雜的計算手段。
這句話常令我遐想起,1943年 七月蘇聯和德國在庫爾斯克的坦克大決戰。蘇軍八千多輛傻大黑粗的 T-34 坦克,以損失三倍於對手的慘重代價,最終挫敗德軍三千多輛質量精良的虎式坦克叢集。
有哲人對蠻力有另外一個詮釋:“ Quantity is Quality ”。
數量就是質量。向數量要質量。
九十年代,一個簡單的神經網路資料培訓的計算往往至少要花幾天、甚至幾周的時間。
這對於演算法的改進調整和應用開發,都是一個巨大的瓶頸。
神經網路的研究,呼喚著蠻力,呼喚著來自計算速度、網路速度、記憶體容量、資料規模各個方面的、更強大的、指數增長的蠻力。
二
這個蠻力的基礎,其實在 1993年 就埋下了種子。
黃仁勳,1963年 出生於臺灣。1993年 從斯坦福大學碩士畢業後不久,創立了 Nvidia。
Nvidia 起家時,做的是影象處理的晶片,主要面對電腦遊戲市場。1999 年Nvidia 推銷自己的 Geforce 256 晶片時,發明了 GPU (Graphics Processing Unit, 影象處理器) 這個名詞。
GPU 的主要任務,是要在最短時間內顯示上百萬、千萬甚至更多的畫素。這在電腦遊戲中是最核心的需求。這個計算工作的核心特點,是要同時並行處理海量的資料。
GPU 在晶片層面的設計時,專門優化系統,用於處理大規模平行計算。
傳統的 CPU (中央處理器) 晶片架構,關注點不在並行處理,一次只能同時做一兩個加減法運算。 而 GPU 在最底層的算術邏輯單元 (ALU, Arithmetic Logic Unit),是基於所謂的 Single Instruction Multiple Data ( 單指令多資料流) 的架構,擅長對於大批量資料並行處理。
打個最簡單的比方,如果有 1, 2, 3, .. 32 個數字,你需要對它們進行計算處理。傳統的 CPU,32 個數字要一個個按順序依次計算。
但是 GPU 在最低層的 ALU,允許同時對 32 個數字做批量處理。
一個 GPU,往往包含幾百個 ALU, 平行計算能力極高。所以儘管 GPU 核心的時鐘速度往往比 CPU 的還要慢,但對大規模並行處理的計算工作,速度比 CPU 快許多。
而神經網路的計算工作,本質上就是大量的矩陣計算的操作,因此特別適合於使用 GPU。
三
這個速度有多快呢?Nvidia 480 GPU, 2010年 的時候,一秒鐘可以顯示十六億個三角形,一秒鐘計算速度達 1.3 TFLOPS (萬億次浮點計算)。
而 2015年 出品的 Nvidia Titan X GPU, 一秒鐘可以達到 6.1 TFLOPS , 接近 2010年 的五倍。其二手貨的市價不到一千美元。
作為參照,人類的超級計算機,真正第一次突破一個 TFLOPS 的計算速度,實際上也就是 1996年 底,但其價格是幾百萬美元量級的。
2007年 Nvidia 推出名叫 CUDA 的平行計算軟體開發介面,使開發者可以更方便的使用其 GPU 開發應用軟體。多家大學的研究者撰文表示,對於特定工作,NVIDIA GPU 帶來的相對於 Intel 的 CPU 的計算速度提高,達到 100-300 倍。
Intel 技術人員 2010年 專門發表文章駁斥,大意是 Nvidia 實際上只比 intel 快 14 倍,而不是傳說中的 100 倍。
Nvidia 的 Andy Keane 評論: “老夫在晶片行業混了 26年 了,從沒見過一個競爭對手,在重要的行業會議上站起來宣佈,你的技術 *** 只是 *** 比他們快 14 倍”。
一個蠻力,一個來自 GPU 的計算蠻力,要在深度學習的應用中爆發了。
(四)
一
九十年代末,神經網路研究遇到的困境,除了慢,還是慢。
拋開計算速度的因素,傳統神經網路的反向傳播演算法,捉蟲時極為困難,一個根本的問題叫做所謂 vanishing gradient problem (梯度消失問題)。
這個問題在 1991年,被德國學者 Sepp Hochreiter 第一次清晰提出和闡明原因。
簡單的說, 就是成本函式 (cost function) 從輸出層反向傳播時, 每經過一層,梯度衰減速度極快, 學習速度變得極慢,神經網路很容易停滯於區域性最優解而無法自拔。
這就像原始部落的小混混,山中無老虎時,在本地稱王稱霸很舒服。 但任何關於"外面的世界很精彩"的資訊,在落後的層層傳播機制中被噪音混淆淹沒了。
小混混一輩子很開心, 沒有意識到外面的世界有多大, 也從未想出去多看看。
二
支援向量機 (SVM) 技術在影象和語音識別方面的成功,使得神經網路的研究重新陷入低潮。
SVM 理論上更加嚴謹完備,結果重複性好, 上手簡單, 得到主流學術界的追捧。
學術界的共識是: 多層神經網路的計算模型,實踐效果不好,完全沒有前途。 這是個死衚衕。
這個情況到本世紀初,變得如此糟糕, 以至於任何論文送到學術期刊時,研究者都不敢用 “神經網路” 幾個字,免得被粗暴拒絕。
2003年,Geoffrey Hinton, 還在多倫多大學,在神經網路的領域苦苦堅守。
一個五十六歲的窮教授, 搞了三十多年沒有前途的研究,要四處絞盡腦汁,化緣申請研究經費。他不是盧瑟 (loser) , 誰還是盧瑟?
2003年 在溫哥華大都會酒店,以 Hinton 為首的十五名來自各地的不同專業的科學家,和加拿大先進研究院 (Canadan Institue oF Advanced Research, 簡稱 CIFAR) 的基金管理負責人,Melvin Silverman 交談。
Silverman 問大家,為什麼 CIFAR 要支援他們的研究專案。
計算神經科學研究者,Sebastian Sung (現為普林斯頓大學教授),回答道,“喔,因為我們有點古怪。如果 CIFAR 要跳出自己的舒適區,尋找一個高風險,極具探索性的團體,就應當資助我們了!”
最終 CIFAR 同意從 2004年 開始資助這個團體十年,總額一千萬加元。CIFAR 成為當時,世界上唯一支援神經網路研究的機構。
不誇張地說,如果沒有 2004年 CIFAR 的資金支援,人類在人工智慧的研究上可能還會在黑暗中多摸索幾年。
Hinton 拿到資金支援不久,做的第一件事,就是先換個牌坊。
兩千多年前的劉三, 改了名換了姓,叫什麼 "漢高祖"。鑑於"神經網路"口碑不好,也被 Hinton 改了名,換了姓,叫 "深度學習" (Deep Learning) 了。
Hinton 的同事,此後時不時會聽到他突然在辦公室大叫,"我知道人腦是如何工作的了!"。
三
2006年,Hinton 和合作者發表論文,"A fast algorithm for deep belief nets" (深信度網路的一種快速演算法)。
在這篇論文裡,Hinton 在演算法上的核心,是借用了統計力學裡的"玻爾茲曼分佈"的概念 (一個微粒在某個狀態的機率,和那個狀態的能量的指數成反比,和它的溫度的倒數之指數成反比),使用所謂的"限制玻爾茲曼機" (RBM) 來學習。
RBM 引入了統計力學常用的概率工具。而在七十年代,概率和不確定性恰恰是主流的人工智慧的研究者極為痛恨的。
RBM 相當於一個兩層網路,同一層神經元之間不可連線 (所以叫 "限制"),可以對神經網路實現 “沒有監督的訓練”(unsupervised training)。深信度網路就是幾層 RBM 疊加在一起。
略掉技術細節,RBM 可以從輸入資料中進行預先訓練,自己尋找發現重要的特徵,對神經網路連線的權重進行有效的初始化。這屬於一種叫做特徵提取器 (feature extractor)的神經網路,也稱自動編碼器 (autoencoder)。
經過 RBM 預先訓練初始化後的神經網路,再用反向傳播演算法微調,效果就好多了。
Hinton 後來指出,深度學習的突破,除了計算蠻力的大幅度提高以外聰明有效地對網路連結權重的初始化也是一個重要原因。
Hinton 的論文裡,經過六萬個 MNIST 資料庫的影象培訓後,對於一萬個測試影象的識別錯誤率最低降到了只有 1.25%。
雖然這還不足以讓主流學術界改變觀點,但深度學習的發展已經見到一絲曙光。
(五)
一、
主流學術界的研究者,大多注重於在演算法上的漸進式提高, 而輕視計算速度和用於訓練的資料規模的重要性。
孔丘老師早在兩千多年前,就高瞻遠矚的為深度學習指明瞭方向:“學而不思則罔, 思而不學則殆”。
用深度學習的語言來說,就是,“光有大資料,算得不快,則還是迷惘;光算得快,而沒有大量的資料來訓練,則還是疲倦無所得”。
2007年 之前, 用 GPU 程式設計,缺乏一個簡單的軟體介面。 程式設計繁瑣,捉蟲困難。這在 07年 Nvidia 推出 CUDA 的 GPU 軟體介面後才真正改善。
2009年 六月, 斯坦福大學的 Rajat Raina 和吳恩達合作發表論文,“用 GPU 大規模無監督深度學習”(“Large-scale Deep Unsupervised Learning using Graphic Processors)。
論文模型裡的引數總數 (就是各層不同神經元之間連結的總數),達到一億,與之相比,Hinton 2006年 的論文裡用到的引數數目,只有一百七十萬。
論文結果顯示,使用 GPU 執行速度和用傳統雙核 CPU 相比, 最快時要快近七十倍。在一個四層,一億個引數的深信度網路上,使用 GPU 把程式執行時間從幾周降到一天。
二、
2010年 瑞士學者 Dan Ciresan 和合作者發表論文,“又深又大又簡單的神經網路在手寫數字識別上表現出色”。(“Deep Big Simple Neural Nets Excel on Handwritten Digit Recognition”)
這篇論文裡, 使用的還是是八十年代的反向傳播計算方法,但是計算搬移到 Nivida GTX280 GPU 上實現。在反向傳播計算時,速度比傳統 CPU 快了 40 倍。
另一個關鍵點是:
把訓練神經網路的影象,刻意通過旋轉, 放大縮小和彈性形變等方式進行改變。這樣用於訓練的影象數目大大增加。使用 GPU 後,改變六萬張訓練影象的計算速度從 93 秒降到了 9 秒鐘, 快了十倍。不斷用計算變形實現的影象, 等價於一個數量無限的訓練資料庫。
論文結果顯示,一個六層,擁有一千兩百萬個引數的神經網路模型,經過兩個小時的訓練後,在測試影象上的錯誤率就降到 1%。 經過 114 個小時訓練後,模型的測試錯誤率更是降到了 0.35%。
三、
2012 年還在斯坦福大學做研究生的黎越國同學 (Quoc Viet Le) 領銜, 和他的導師吳恩達,以及眾多谷歌的科學家聯合發表論文,“用大規模無監督學習建造高層次特徵”(Building High-level Features Using Large Scale Unsupervised Learning)。
黎越國的文章中, 使用了九層神經網路,網路的引數數量高達十億,是 Ciresan 2010年 論文中的模型的一百倍,是 2009年Raina 論文模型的十倍。
作為參照,按照丹麥學者 Bente Pakkenberg 2003年 的估算,人的腦皮層 (Neocortex) 內就有接近一百五十萬億個神經元突觸(Synapse,是連線神經元傳遞訊號的結構), 是黎同學的模型引數數量的十萬倍。
用於訓練這個神經網路的影象, 都是從谷歌的錄影網站 youtube 上截圖獲得。 一千萬個原始錄影,每個錄影只擷取一張圖片, 每張圖片有四萬個畫素, 與之相比,先前大部分論文使用的訓練影象,原始影象的數目大多在十萬以下,圖片的畫素大多不到一千。
黎越國的計算模型分散式地在一千臺機器 (每臺機器有 16 個 CPU 核心) 上執行,花了三天三夜才完成培訓。
經過培訓的神經網路,在一個名叫 ImageNet 的共享影象資料庫裡,面對兩萬兩千個不同類別,一千四百萬個影象中, 分類識別的正確率達到了 15.8%。 而在此之前最好的公開發表的模型,正確率只有 9.3%。
深度學習的研究進步在加速,但要說服更多的主流的人工智慧研究者加入,需要的是更多的, 可直接對比的,大幅領先的,無可辯駁的計算結果。
(六)
一、
計算速度和資料規模的大幅度提高,也引匯出更多演算法上的改進。
在網路構架上,一些演算法更多地借鑑人腦認知的成功經驗: 多提高效率, 少做無用功。多閉目養神,少亂說亂動。 多關注主要矛盾,少關心細枝末節。
2003年 紐約大學神經科學中心的 Peter Lennie 在論文中指出,人腦的神經元,一般最多 1-4%的比例, 可以同時處於啟用狀態。比例更高時,大腦則無法提供相應的能量需求。
神經網路的模型中,通過所謂激勵函式(activation function), 根據上一層神經元輸入值來計算輸出值。
最典型的傳統激勵函式,sigmoid function,輸出值在 0 和 1 之間,也就意味著神經元平均下來,每時每刻都在使用一半的力量。
這種高強度能量需求,對於普通生物體而言,是無法持續的。
一個有意思的比方是鱷魚。真實生活中的鱷魚,和動物世界的紀錄片中縱身一躍,凶猛捕食的形象大相徑庭。
鱷魚 90%的時間是一動不動的,(一個近距離觀察者常會把它誤認為是石雕)剩下 5%的時間用於求偶交配,5%的時間用於覓食。
鱷魚的低能耗綠色生活方式,使它成為兩棲動物界的壽星。雖然野生鱷魚的平均壽命缺乏嚴格科學的統計,但是被捕獲後人工飼養的鱷魚中,有不少個體,記錄在案的壽命超過了七十歲。
二、
2011 年,加拿大的蒙特利爾大學學者 Xavier Glorot 和 Yoshua Bengio 發表論文,“Deep Sparse Rectifier Neural Networks”。(深而稀疏的修正神經網路).
論文的演算法中使用一種稱為 “修正線性單元”(REctified Linear Unit,又稱 RELU)的激勵函式。用數學公式表達:rectifier (x) = max (0, x ).
對於 RELU 而言,如果輸入為負值,輸出為零。否則輸入和輸出相等。
換而言之,對於特定的輸入,統計上有一半神經元是沒有反應,保持沉默的。
使用 RELU 的含有三個隱層的神經網路模型,被用來測試於四個不同的經典的影象識別問題。和使用別的激勵函式的模型相比,RELU 不僅識別錯誤率普遍更低,而且其有效性,對於神經網路是否進行 “預先訓練” 過並不敏感。
RELU 的優勢還有下面三點:
-
傳統的激勵函式,計算時要用指數或者三角函式,計算量要比簡單的 RELU 至少高兩個數量級.
-
RELU 的導數是常數, 非零即一, 不存在傳統激勵函式在反向傳播計算中的"梯度消失問題".
-
由於統計上,約一半的神經元在計算過程中輸出為零,使用 RELU 的模型計算效率更高,而且自然而然的形成了所謂 "稀疏表徵" (sparse representation), 用少量的神經元可以高效, 靈活,穩健地表達抽象複雜的概念.
(七)
一、
神經網路計算,另一個常為人詬病的問題,是過度擬合(overfitting)。
一個擁有大量自由引數的模型,很容易通過除錯,和訓練資料吻合。但這並不意味著,這就是個好模型。
美國數學家馮紐曼(John Von Neumann)曾說, “給我四個引數,我的模型可以擬合一個大象。給我五個引數, 我可以讓它扭動它的鼻子。”
神經網路模型的自由引數,現在往往超過一億。如果說四個引數可以擬合一個大象的話,對於全世界總數不到一百萬的大象來說,實在是遊刃有餘。
一個模型好壞的試金石,不在於和現有資料的擬合度, 而在於它是否可以在全新的情況和資料面前,做出正確的判斷和預測。
金融界的人常會看到各種交易模型,許多模型面對歷史資料的測試時,表現非常好,勝率極高。但是如果投資者天真地以為找到了致富的捷徑,把模型用於實際交易時,結果往往差強人意。
另外一個典型的過度擬合的例子,可以在小孩教育上看到。許多家長把孩子從小就送到奧數、鋼琴、小提琴等各類才藝和競賽的培訓班,唯恐孩子學得不夠,以後上不了好大學,找不到好工作。
這實際上就是根據社會現有的經濟結構做出的一種過度擬合的訓練。
當時代迅速發展,以前吃香的技能,職業突然被淘汰,孩子必須面對社會變化和學校教育體系的巨大落差而無法迅速隨機應變時,悲劇將很難避免。
二、
解決這個問題的演算法上的革新,啟迪又是來自生物界,來自有性繁殖和無性繁殖的對比。
愛爾蘭著名哲學家和詩人,奧斯卡*王爾德 (Oscar Wilde) 先生曾有名言,"世界上所有東西都是關於性。 除了性本身" (Everything in the world is about sex,Except sex)。
直覺上,有性繁殖是為了生物進化,適應環境。但是如果一個已經非常健康的個體,為什麼還要通過有性繁殖,拋棄掉自己一半的優秀基因去和另外一個個體合作製造下一代呢?
無性生殖的優點是節能省時,無須浪費時間求偶交配。但致命的弱點是,基因沒有任何變化,遺傳病很容易被傳播到下一代,進而降低生存的概率。
加州大學伯克利分校學者 Adi Livnat 在 2007年 的論文, "關於性在進化中的角色的混合能力理論 "(A mixability theory of the role of sex in evolution ) 中通過模擬計算得出下述結論:
性在生物進化中的目的,不是製造適合某個單一環境的,最優秀的個體基因,而是為了製造最容易和其它多種基因合作的基因,這樣在多變的外界環境下,總有一款可以生存延續下來。
優秀個體在有性繁殖中,雖然損失了一半的基因,短期內看上去不是好事。但是長期看,生物組織整體的存活能力,更加穩健強大。
有性繁殖,在金融投資上的一個類比是: 把財富分散到不同種類的資產上,定期重新調整再平衡。 這樣做的缺點是,某個表現特別好的資產可能會被過早的賣掉。 但優點在於,讓投資組合不過分依賴於某個單一資產,在金融風暴中得以生存下來。
歌舞昇平的年代,人們總是互相攀比投資回報、沒有覺得生存、保本是個問題。當金融黑天鵝降臨時,才幡然醒悟,資本和生命的保全,而不是尋歡作樂,才是真正最重要的。
三、
2012年 七月, Hinton 教授發表論文, "通過阻止特徵檢測器的共同作用來改進神經網路" (Improving neural networks by preventing co-adaptation of feature detectors)。
論文中為了解決過度擬合的問題,採用了一種新的稱為"丟棄" (Dropout)的演算法。
丟棄演算法的具體實施,是在每次培訓中,給每個神經元一定的機率(比如 50%),假裝它不存在,計算中忽略不計。
從一個角度看,丟棄演算法,每次訓練時使用的是不同架構的神經網路(因為每次都有部分神經元裝死),最後訓練出來的東西,相當於不同架構的神經網路模型的平均值。
從生物的有性繁殖角度看,丟棄演算法,試圖訓練不同的小部分神經元,通過多種可能的交配組合,獲得接近理想值的答案。
使用丟棄演算法的神經網路,被強迫用不同的、獨立的、神經元的子集來接受學習訓練。 這樣網路更強健,避免了過度擬合的死衚衕,不會因為外在輸入的很小變化,導致輸出質量的很大差異。
論文結果顯示,使用丟棄演算法後,在諸如 MINST、 TIMID、 CIFAR-10 等多個經典語音和影象識別的問題中, 神經網路在測試資料中的錯誤率。 相對於經典的深度學習演算法,都獲得了可觀的進步 (錯誤率下降了 10% 到 30% 不等)。
四、
2012年 的夏天, 距離 Hinton 教授 1970年 開始攻讀博士學位, 距離 Rosenblatt 1971年 溺水身亡, 一晃四十多年過去了。
深度學習的技術,此時有了
- GPU 快捷的計算速度,
- 海量的訓練資料,
- 更多新的聰明的演算法。
條件已經成熟, 該用實驗結果,證明自己相對別的技術,無可辯駁的優越性了。
轉自
https://www.cnblogs.com/tsiangleo/p/5450466.html