人工智能技術(shù)是當前炙手可熱的話題,而基于神經(jīng)網(wǎng)絡(luò)的深度學習技術(shù)更是熱點中的熱點。去年谷歌的Alpha Go 以4:1大比分的優(yōu)勢戰(zhàn)勝韓國的李世石九段冕象,展現(xiàn)了深度學習的強大威力荠诬,后續(xù)強化版的Alpha Master和無師自通的Alpha Zero更是在表現(xiàn)上完全碾壓前者。不論你怎么看焙蹭,以深度學習為代表的人工智能技術(shù)正在塑造未來晒杈。
下圖為英偉達(NVIDIA)公司近年來的股價情況, 該公司的主要產(chǎn)品是“圖形處理器”(GPU)孔厉,而GPU被證明能大大加快神經(jīng)網(wǎng)絡(luò)的訓練速度拯钻,是深度學習必不可少的計算組件。英偉達公司近年來股價的飛漲足以證明當前深度學習的井噴之勢撰豺。
好粪般,話不多說,下面簡要介紹神經(jīng)網(wǎng)絡(luò)的基本原理污桦、發(fā)展脈絡(luò)和優(yōu)勢亩歹。
一、神經(jīng)網(wǎng)絡(luò)是什么
神經(jīng)網(wǎng)絡(luò)是一種人類由于受到生物神經(jīng)細胞結(jié)構(gòu)啟發(fā)而研究出的一種算法體系凡橱,是機器學習算法大類中的一種小作。首先讓我們來看人腦神經(jīng)元細胞:
一個神經(jīng)元通常具有多個樹突 ,主要用來接受傳入信息梭纹,而軸突只有一條躲惰,軸突尾端有許多軸突末梢,可以給其他多個神經(jīng)元傳遞信息变抽。軸突末梢跟其他神經(jīng)元的樹突產(chǎn)生連接础拨,從而傳遞信號氮块。
下圖是一個經(jīng)典的神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN):
乍一看跟傳統(tǒng)互聯(lián)網(wǎng)的拓撲圖有點類似,這也是稱其為網(wǎng)絡(luò)的原因诡宗,不同的是節(jié)點之間通過有向線段連接滔蝉,并且節(jié)點被分成三層。我們稱圖中的圓圈為神經(jīng)元塔沃,左邊三個神經(jīng)元組成的一列為輸入層蝠引,中間神經(jīng)元列為隱藏層,右邊神經(jīng)元列為輸出層,神經(jīng)元之間的箭頭為權(quán)重蛀柴。
神經(jīng)元是計算單元螃概,相當于神經(jīng)元細胞的細胞核,利用輸入的數(shù)據(jù)進行計算鸽疾,然后輸出吊洼,一般由一個線性計算部分和一個非線性計算部分組成;輸入層和輸出層實現(xiàn)數(shù)據(jù)的輸入輸出制肮,相當于細胞的樹突和軸突末梢冒窍;隱藏層指既不是輸入也不是輸出的神經(jīng)元層,一個神經(jīng)網(wǎng)絡(luò)可以有很多個隱藏層豺鼻。
神經(jīng)網(wǎng)絡(luò)的關(guān)鍵不是圓圈代表的神經(jīng)元综液,而是每條連接線對應的權(quán)重。每條連接線對應一個權(quán)重儒飒,也就是一個參數(shù)谬莹。權(quán)重具體的值需要通過神經(jīng)網(wǎng)絡(luò)的訓練才能獲得。我們實際生活中的學習體現(xiàn)在大腦中就是一系列神經(jīng)網(wǎng)絡(luò)回路的建立與強化桩了,多次重復的學習能讓回路變得更加粗壯届良,使得信號的傳遞速度加快,最后對外表現(xiàn)為“深刻”的記憶圣猎。人工神經(jīng)網(wǎng)絡(luò)的訓練也借鑒于此士葫,如果某種映射關(guān)系出現(xiàn)很多次,那么在訓練過程中就相應調(diào)高其權(quán)重送悔。
二慢显、人工神經(jīng)網(wǎng)絡(luò)發(fā)展簡史
1)神經(jīng)元
1943年,心理學家McCulloch和數(shù)學家Pitts參考了生物神經(jīng)元的結(jié)構(gòu)欠啤,發(fā)表了抽象的神經(jīng)元模型MP:
符號化后的模型如下:
Sum函數(shù)計算各權(quán)重與輸入乘積的線性組合荚藻,是神經(jīng)元中的線性計算部分,而sgn是取符號函數(shù)洁段,當輸入大于0時应狱,輸出1,反之輸出0祠丝,是神經(jīng)元中的非線性部分疾呻。向量化后的公式為z=sgn(w^T a)(w^T=(w_1,w_2,w_3)除嘹,a=〖(a_1,a_2,a_3)〗^T)。
但是岸蜗,MP模型中尉咕,權(quán)重的值都是預先設(shè)置的,因此不能學習璃岳。該模型雖然簡單年缎,并且作用有限,但已經(jīng)建立了神經(jīng)網(wǎng)絡(luò)大廈的地基
2) 單層神經(jīng)網(wǎng)絡(luò)
1958年铃慷,計算科學家Rosenblatt提出了由兩層神經(jīng)元組成(一個輸入層单芜,一個輸出層)的神經(jīng)網(wǎng)絡(luò)。他給它起了一個名字–“感知器”(Perceptron)
感知器是當時首個可以學習的人工神經(jīng)網(wǎng)絡(luò)犁柜。Rosenblatt現(xiàn)場演示了其學習識別簡單圖像的過程缓溅,在當時引起了轟動,掀起了第一波神經(jīng)網(wǎng)絡(luò)的研究熱潮赁温。
但感知器只能做簡單的線性分類任務。1969年淤齐,人工智能領(lǐng)域的巨擘Minsky指出這點股囊,并同時指出感知器對XOR(異或,即兩個輸入相同時輸出0更啄,不同時輸出1)這樣的簡單邏輯都無法解決稚疹。所以,明斯基認為神經(jīng)網(wǎng)絡(luò)是沒有價值的祭务。
隨后内狗,神經(jīng)網(wǎng)絡(luò)的研究進入低谷,又稱 AI Winter义锥。
3) 兩層神經(jīng)網(wǎng)絡(luò)
Minsky說過單層神經(jīng)網(wǎng)絡(luò)無法解決異或問題柳沙,但是當增加一個計算層以后,兩層神經(jīng)網(wǎng)絡(luò)不僅可以解決異或問題拌倍,而且具有非常好的非線性分類效果赂鲤。
下圖為兩層神經(jīng)網(wǎng)絡(luò)(輸入層一般不算在內(nèi)):
上圖中,輸出層的輸入是上一層的輸出柱恤。
向量化后的公式為:
注意:
每個神經(jīng)元節(jié)點默認都有偏置變量b数初,加上偏置變量后的計算公式為:
同時,兩層神經(jīng)網(wǎng)絡(luò)不再使用sgn函數(shù)作為激勵函數(shù)梗顺,而采用平滑的sigmoid函數(shù):
σ(z)=1/(1+e^(-z) )
其圖像如下:
理論證明:兩層及以上的神經(jīng)網(wǎng)絡(luò)可以無限逼近真實的對應函數(shù)泡孩,從而模擬數(shù)據(jù)之間的真實關(guān)系,這是神經(jīng)網(wǎng)絡(luò)強大預測能力的根本寺谤。但兩層神經(jīng)網(wǎng)絡(luò)的計算量太大仑鸥,當時的計算機的計算能力完全跟不上吮播,直到1986年,Rumelhar和Hinton等人提出了反向傳播(Backpropagation锈候,BP)算法薄料,解決了兩層神經(jīng)網(wǎng)絡(luò)所需要的復雜計算量問題,帶動了業(yè)界使用兩層神經(jīng)網(wǎng)絡(luò)研究的熱潮泵琳。
但好景不長摄职,算法的改進僅使得神經(jīng)網(wǎng)絡(luò)風光了幾年,然而計算能力不夠获列,局部最優(yōu)解谷市,調(diào)參等一系列問題一直困擾研究人員。90年代中期击孩,由Vapnik等人發(fā)明的SVM(Support Vector Machines迫悠,支持向量機)算法誕生,很快就在若干個方面體現(xiàn)出了對比神經(jīng)網(wǎng)絡(luò)的優(yōu)勢:無需調(diào)參巩梢;高效创泄;全局最優(yōu)解。
由于以上原因括蝠,SVM迅速打敗了神經(jīng)網(wǎng)絡(luò)算法成為主流鞠抑。神經(jīng)網(wǎng)絡(luò)的研究再一次進入低谷,AI Winter again忌警。
4) 多層神經(jīng)網(wǎng)絡(luò)
多層神經(jīng)網(wǎng)絡(luò)一般指兩層或兩層以上的神經(jīng)網(wǎng)絡(luò)(不包括輸入層)搁拙,更多情況下指兩層以上的神經(jīng)網(wǎng)絡(luò)。
2006年法绵,Hinton提出使用 預訓練 ”(pre-training)和“微調(diào)”(fine-tuning)技術(shù)能優(yōu)化神經(jīng)網(wǎng)絡(luò)訓練箕速,大幅度減少訓練多層神經(jīng)網(wǎng)絡(luò)的時間
并且,他給多層神經(jīng)網(wǎng)絡(luò)相關(guān)的學習方法賦予了一個新名詞–“ 深度學習 ”朋譬,以此為起點盐茎,“深度學習”紀元開始了:)
“深度學習”一方面指神經(jīng)網(wǎng)絡(luò)的比較“深”,也就是層數(shù)較多徙赢;另一方面也可以指神經(jīng)網(wǎng)絡(luò)能學到很多深層次的東西庭呜。研究發(fā)現(xiàn),在權(quán)重參數(shù)不變的情況下犀忱,增加神經(jīng)網(wǎng)絡(luò)的層數(shù)募谎,能增強神經(jīng)網(wǎng)絡(luò)的表達能力。
但深度學習究竟有多強大呢阴汇?沒人知道数冬。2012年,Hinton與他的學生在ImageNet競賽中,用多層的卷積神經(jīng)網(wǎng)絡(luò)成功地對包含一千類別的一百萬張圖片進行了訓練拐纱,取得了分類錯誤率15%的好成績铜异,這個成績比第二名高了近11個百分點,充分證明了多層神經(jīng)網(wǎng)絡(luò)識別效果的優(yōu)越性秸架。
同時揍庄,科研人員發(fā)現(xiàn)GPU的大規(guī)模并行矩陣運算模式完美地契合神經(jīng)網(wǎng)絡(luò)訓練的需要,在同等情況下东抹,GPU的速度要比CPU快50-200倍蚂子,這使得神經(jīng)網(wǎng)絡(luò)的訓練時間大大減少,最終再一次掀起了神經(jīng)網(wǎng)絡(luò)研究的熱潮缭黔,并且一直持續(xù)到現(xiàn)在食茎。
2016年基于深度學習的Alpha Go在圍棋比賽中以4:1的大比分優(yōu)勢戰(zhàn)勝了李世石,深度學習的威力再一次震驚了世界馏谨。
5) 回顧
神經(jīng)網(wǎng)絡(luò)的發(fā)展歷史曲折蕩漾别渔,既有被捧上神壇的高潮,也有無人問津的低谷惧互,中間經(jīng)歷了數(shù)次大起大落哎媚,我們姑且稱之為“三起三落”吧,其背后則是算法的改進和計算能力的持續(xù)發(fā)展喊儡。
下圖展示了神經(jīng)網(wǎng)絡(luò)自發(fā)明以來的發(fā)展情況及一些重大時間節(jié)點拨与。
當然,對于神經(jīng)網(wǎng)絡(luò)我們也要保持清醒的頭腦管宵。由上圖,每次神經(jīng)網(wǎng)絡(luò)研究的興盛期持續(xù)10年左右攀甚,從最近2012年算起箩朴,或許10年后的2022年,神經(jīng)網(wǎng)絡(luò)的發(fā)展將再次遇到瓶頸秋度。
三炸庞、神經(jīng)網(wǎng)絡(luò)學習方法
神經(jīng)網(wǎng)絡(luò)作為機器學習的一種,其模型訓練的目的荚斯,就是使得參數(shù)盡可能的與真實的模型逼近埠居。理論證明,兩層及以上的神經(jīng)網(wǎng)絡(luò)可以無限逼近真實的映射函數(shù)事期。因此滥壕,給定足夠的訓練數(shù)據(jù)和訓練時間,總能通過神經(jīng)網(wǎng)絡(luò)找到無限逼近真實關(guān)系的模型兽泣。
具體做法:首先給所有權(quán)重參數(shù)賦上隨機值绎橘,然后使用這些隨機生成的參數(shù)值,來預測訓練數(shù)據(jù)中的樣本唠倦。假設(shè)樣本的預測目標為yp 称鳞,真實目標為y涮较,定義值loss,計算公式如下:
loss = (yp -y) ^2
這個值稱之為 損失 (loss)冈止,我們的目標就是使對所有訓練數(shù)據(jù)的損失和盡可能的小狂票,這就轉(zhuǎn)化為求loss函數(shù)極值的問題。
一個常用方法是高等數(shù)學中的求導熙暴,但由于參數(shù)不止一個闺属,求導后計算導數(shù)等于0的運算量很大,所以常用梯度下降算法來解決這樣的優(yōu)化問題怨咪。梯度是一個向量屋剑,由函數(shù)的各自變量的偏導數(shù)組成。
比如對二元函數(shù) f =(x,y)诗眨,則梯度?f=(?f/?x,?f/?y)唉匾。梯度的方向是函數(shù)值上升最快的方向。梯度下降算法每次計算參數(shù)在當前的梯度匠楚,然后讓參數(shù)向著梯度的反方向前進一段距離巍膘,不斷重復,直到梯度接近零時截止芋簿。一般這個時候峡懈,所有的參數(shù)恰好達到使損失函數(shù)達到一個最低值的狀態(tài)。下圖為梯度下降的大致運行過程:
在神經(jīng)網(wǎng)絡(luò)模型中与斤,由于結(jié)構(gòu)復雜肪康,每次計算梯度的代價很大。因此還需要使用 反向傳播 (Back Propagation)算法撩穿。反向傳播算法利用了神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)進行計算磷支,不一次計算所有參數(shù)的梯度,而是從后往前食寡。首先計算輸出層的梯度雾狈,然后是第二個參數(shù)矩陣的梯度,接著是中間層的梯度抵皱,再然后是第一個參數(shù)矩陣的梯度善榛,最后是輸入層的梯度。計算結(jié)束以后呻畸,所要的兩個參數(shù)矩陣的梯度就都有了移盆。當然,梯度下降只是其中一個優(yōu)化算法伤为,其他的還有牛頓法味滞、RMSprop等。
確定loss函數(shù)的最小值后,我們就確定了整個神經(jīng)網(wǎng)絡(luò)的權(quán)重剑鞍,完成神經(jīng)網(wǎng)絡(luò)的訓練昨凡。
四、深度學習的優(yōu)勢
1) 多層神經(jīng)網(wǎng)絡(luò)的特點
在神經(jīng)網(wǎng)絡(luò)中一樣的參數(shù)數(shù)量蚁署,可以用更深的層次去表達便脊。
由上圖,不算上偏置參數(shù)的話光戈,共有三層神經(jīng)元哪痰,33個權(quán)重參數(shù)。
由下圖,保持權(quán)重參數(shù)不變,但增加了兩層神經(jīng)元缀遍。
在多層神經(jīng)網(wǎng)絡(luò)中,每一層的輸入是前一層的輸出肋演,相當于在前一層的基礎(chǔ)上學習,更深層次的神經(jīng)網(wǎng)絡(luò)意味著更深入的表示特征烂琴,以及更強的函數(shù)模擬能力爹殊。更深入的表示特征可以這樣理解,隨著網(wǎng)絡(luò)的層數(shù)增加奸绷,每一層對于前一層次的抽象表示更深入梗夸。
如上圖,第一個隱藏層學習到“邊緣”的特征号醉,第二個隱藏層學習到“邊緣”組成的“形狀”的特征反症,第三個隱藏層學習到由“形狀”組成的“圖案”的特征,最后的隱藏層學習到由“圖案”組成的“目標”的特征畔派。通過抽取更抽象的特征來對事物進行區(qū)分铅碍,從而獲得更好的區(qū)分與分類能力。
2) 處理線性不可分
前面提到父虑, 明斯基認為Rosenblatt提出的感知器模型不能處理最簡單的“異或”(XOR)非線性問題该酗,所以神經(jīng)網(wǎng)絡(luò)的研究沒有前途授药,但當增加一層神經(jīng)元后士嚎,異或問題得到了很好地解決,原因何在悔叽?原來從輸入層到隱藏層莱衩,數(shù)據(jù)發(fā)生了空間變換,坐標系發(fā)生了改變娇澎,因為矩陣運算本質(zhì)上就是一種空間變換笨蚁。
如下圖,紅色和藍色的分界線是最終的分類結(jié)果,可以看到括细,該分界線是一條非常平滑的曲線伪很。
但是,改變坐標系后奋单,分界線卻表現(xiàn)為直線锉试,如下圖:
同時,非線性激勵函數(shù)的引入使得神經(jīng)網(wǎng)絡(luò)對非線性問題的表達能力大大加強览濒。
3) 不用提取特征
對于傳統(tǒng)的樸素貝葉斯呆盖、決策樹、支持向量機SVM等分類器贷笛,提取特征是一個非常重要的前置工作应又。在正式訓練之前,需要花費大量的時間在數(shù)據(jù)的清洗上乏苦,這樣分類器才能清楚地知道數(shù)據(jù)的維度株扛,要不然基于概率和空間距離的線性分類器是沒辦法進行工作的。然而在神經(jīng)網(wǎng)絡(luò)中邑贴,由于巨量的線性分類器的堆疊(并行和串行)以及卷積神經(jīng)網(wǎng)絡(luò)的使用席里,它對噪聲的忍耐能力、對多通道數(shù)據(jù)上投射出來的不同特征偏向的敏感程度會自動重視或忽略拢驾,這樣我們在處理的時候奖磁,就不需要使用太多的技巧用于數(shù)據(jù)的清洗了。有趣的是繁疤,業(yè)內(nèi)大佬常感嘆咖为,“你可能知道SVM等機器學習的所有細節(jié),但是效果并不好稠腊,而神經(jīng)網(wǎng)絡(luò)更像是一個黑盒躁染,很難知道它究竟在做什么,但工作效果卻很好”架忌。
人類對機器學習的環(huán)節(jié)干預越少吞彤,就意味著距離人工智能的方向越近。神經(jīng)網(wǎng)絡(luò)的這個特性非常有吸引力叹放。
五饰恕、一些資料
1) 谷歌的TensorFlow開發(fā)了一個非常有意思的神經(jīng)網(wǎng)絡(luò)入門教程 ,用戶可以非常方便地在網(wǎng)頁上更改神經(jīng)網(wǎng)絡(luò)的參數(shù)井仰,并且能看到實時的學習效率和結(jié)果埋嵌,非常適合初學者掌握神經(jīng)網(wǎng)絡(luò)的基本概念及神經(jīng)網(wǎng)絡(luò)的原理。網(wǎng)頁截圖如下:
2) 深度學習領(lǐng)域大佬吳恩達不久前發(fā)布的《神經(jīng)網(wǎng)絡(luò)和深度學習 》MOOC俱恶,現(xiàn)在可以在網(wǎng)易云課堂上免費觀看了雹嗦,并且還有中文字幕范舀。
3) 《神經(jīng)網(wǎng)絡(luò)于深度學習》(Michael Nielsen著)、《白話深度學習與TensorFlow》也是不錯的入門書籍了罪。