一文讀懂神經網路(附PPT、視訊)
來源:雲棲社群
本文共6500字,建議閱讀10分鐘。
本文從神經網路的發展歷史出發,為你介紹感知器模型、前饋神經網路及BP演算法。
[導讀] 提起神經網路,你會想到什麼?關於深度學習,你又是否思考過其中的原理呢?從上個世紀四十年代神經網路誕生開始,到今天已經歷經70多年的發展,這中間它又經歷了什麼?本文將帶領大家走進神經網路的“前世今生”一探究竟。
演講嘉賓簡介:
孫飛(丹豐),阿里巴巴搜尋事業部高階演算法工程師。中科院計算所博士,博士期間主要研究方向為文字分散式表示,在SIGIR、ACL、EMNLP以及IJCAI等會議發表論文多篇。目前主要從事推薦系統以及文字生成相關方面研發工作。
以下內容根據演講嘉賓視訊分享以及PPT整理而成。
本次的分享主要圍繞以下五個方面:
神經網路的發展歷史
感知器模型
前饋神經網路
後向傳播
深度學習入門
一.神經網路的發展歷史
在介紹神經網路的發展歷史之前,首先介紹一下神經網路的概念。神經網路主要是指一種仿造人腦設計的簡化的計算模型,這種模型中包含了大量的用於計算的神經元,這些神經元之間會通過一些帶有權重的連邊以一種層次化的方式組織在一起。每一層的神經元之間可以進行大規模的平行計算,層與層之間進行訊息的傳遞。
下圖展示了整個神經網路的發展歷程:
神經網路的發展歷史甚至要早於計算機的發展,早在上個世紀四十年代就已經出現了最早的神經網路模型。接下來本文將以神經網路的發展歷程為主線帶領大家對神經網路的基本知識作初步瞭解。
第一代的神經元模型是驗證型的,當時的設計者只是為了驗證神經元模型可以進行計算,這種神經元模型既不能訓練也沒有學習能力,可以簡單的把它看成是一個定義好的邏輯閘電路,因為它的輸入和輸出都是二進位制的,而中間層的權重都是提前定義好的。
神經網路的第二個發展時代是十九世紀五六十年代,以Rosenblatt提出的感知器模型和赫伯特學習原則等一些工作為代表。
二.感知器模型
感知器模型與之前提到的神經元模型幾乎是相同的,但是二者之間存在著一些關鍵的區別。感知器模型的啟用函式可以選擇間斷函式和sigmoid函式,且其輸入可以選擇使用實數向量,而不是神經元模型的二進位制向量。與神經元模型不同,感知器模型是一個可以學習的模型,下面介紹一下感知器模型的一個優良特性——幾何解釋。
我們可以把輸入值(x1, . . . , xn)看作是N維空間中的一個點的座標,w⊤x−w0 = 0 可以認為是N維空間中的一個超平面,顯然,當w⊤x−w0<0時,此時的點落在超平面的下方,而當w⊤x−w0>0時,此時的點落在超平面的上方。感知器模型對應的就是一個分類器的超平面,它可以將不同類別的點在N維空間中分離開。從下圖中可以發現,感知器模型是一個線性的分類器。
對於一些基本的邏輯運算,例如與、或、非,感知器模型可以非常容易地作出判斷分類。那麼是不是所有的邏輯運算都可以通過感知器進行分類呢?答案當然是否定的。比如異或運算通過一個單獨的線性感知器模型就很難作出分類,這同樣也是神經網路的發展在第一次高潮之後很快進入低谷的主要原因。這個問題最早在Minsky等人在關於感知器的著作中提出,但其實很多人對這本著作存在誤區,實際上Minsky等人在提出這個問題的同時也指出異或運算可以通過多層感知器實現,但是由於當時學術界沒有有效的學習方式去學習多層感知器模型,所以神經網路的發展迎來了第一次低谷。
關於多層感知器模型實現異或操作的直觀幾何體現如下圖所示:
三.前饋神經網路
進入十九世紀八十年代之後,由於單層的感知器神經網路的表達能力非常有限,只能做一些線性分類器的任務,神經網路的發展進入了多層感知器時代。一個典型的多層神經網路就是前饋神經網路,如下圖所示,它包括輸入層、節點數目不定的隱層和輸出層。任何一個邏輯運算都可以通過多層感知器模型表示,但這就涉及到三層之間互動的權重學習問題。將輸入層節點xk乘以輸入層到隱層之間的權重vkj,然後經過一個如sigmoid此類的啟用函式就可以得到其對應的隱層節點數值hj,同理,經過類似的運算可以由hj得出輸出節點值yi。
需要學習的權重資訊就是w和v兩個矩陣,最終得到的資訊是樣本的輸出y和真實輸出d。具體過程如下圖所示:
如果讀者有簡單的機器學習知識基礎的話,就會知道一般情況下會根據梯度下降的原則去學習一個模型。在感知器模型中採用梯度下降的原則是較為容易的,以下圖為例,首先確定模型的loss,例子中採用了平方根loss,即求出樣本的真實輸出d與模型給出的輸出y之間的差異,為了計算方便,通常情況下采用了平方關係E= 1/2 (d−y)^2 = 1/2 (d−f(x))^2 ,根據梯度下降的原則,權重的更新遵循如下規律:wj ← wi + α(d − f(x))f′(x)xi ,其中α為學習率,可以作人工調整。
四.後向傳播
對於一個多層的前饋神經網路,我們該如何學習其中所有的引數呢?首先對於最上層的引數是非常容易獲得的,可以根據之前提到的計算模型輸出和真實輸出之間的差異,根據梯度下降的原則來得出引數結果,但問題是對於隱層來說,雖然我們可以計算出其模型輸出,但是卻不知道它的期望輸出是什麼,也就沒有辦法去高效訓練一個多層神經網路。這也是困擾了當時學術界很長時間的一個問題,進而導致了上個世紀六十年代之後神經網路一直沒有得到更多發展。
後來到了十九世紀七十年代,有很多科學家獨立的提出了一個名為後向傳播的演算法。這個演算法的基本思想其實非常簡單,雖然在當時無法根據隱層的期望輸出去更新它的狀態,但是卻可以根據隱層對於Error的梯度來更新隱層到其他層之間的權重。計算梯度時,由於每個隱層節點與輸出層多個節點之間均有關聯,所以會對其上一層所有的Error作累加處理。
後向傳播的另一個優勢是計算同層節點的梯度和權重更新時可以並行進行,因為它們之間不存在關聯關係。整個BP演算法的過程可以用如下的偽碼錶示:
接下來介紹一些BP神經網路的其他性質。BP演算法其實就是一個鏈式法則,它可以非常容易地泛化到任意一個有向圖的計算上去。根據梯度函式,在大多數情況下BP神經網路給出的只是一個區域性的最優解,而不是全域性的最優解。但是從整體來看,一般情況下BP演算法能夠計算出一個比較優秀的解。下圖是BP演算法的直觀演示:
在大多數情況下,BP神經網路模型會找到範圍內的一個極小值點,但是跳出這個範圍我們可能會發現一個更優的極小值點。在實際應用中針對這樣的問題我們有很多簡單但是非常有效的解決辦法,比如可以嘗試不同的隨機初始化的方式。而實際上在深度學習領域當今比較常用的一些模型上,初始化的方式對於最終的結果是有非常大的影響的。另外一種使模型跳出區域性最優解範圍的方式是在訓練的時候加入一些隨機干擾(Random noises),或者用一些遺傳演算法去避免訓練模型停留在不理想的區域性最優解位置。
BP神經網路是機器學習的一個優秀的模型,而提到機器學習就不得不提到一個在整個機器學習過程中經常遇到的基本問題——過擬合(Overfitting)問題。過擬合的常見現象是模型在訓練集上面雖然loss一直在下降,但是實際上在test集上它的loss和error可能早已經開始上升了。避免出現過擬合問題有兩種常見的方式:
提前停止(Early Stopping):我們可以預先劃分一個驗證集(Validation),在訓練模型的同時也在驗證集之中執行這個模型,然後觀察該模型的loss,如果在驗證集中它的loss已經停止下降,這時候即使訓練集上該模型的loss仍在下降,我們依然可以提前將其停止來防止出現過擬合問題。
正則(Regularization):我們可以在神經網路中邊的權重上加一些正則。最近幾年經常用到的dropout方式——隨機丟一些點或者隨機丟一些邊,也可以看作是正則的一種方式,正則也是一種很有效的防止過擬合的應用方式。
十九世紀八十年代神經網路一度非常流行,但很不幸的是進入九十年代,神經網路的發展又陷入了第二次低谷。造成這次低谷的原因有很多,比如支援向量機(SVM)的崛起,支援向量機在九十年代是一個非常流行的模型,它在各大會議均佔有一席之地,同時也在各大應用領域都取得了非常好的成績。支援向量機有一個非常完善的統計學習理論,也有非常好的直觀解釋,並且效率也很高,結果又很理想。
所以在此消彼長的情況下,支援向量機相關的統計學習理論的崛起一定程度上壓制了神經網路的發展熱度。另一方面,從神經網路自身的角度來看,雖然理論上可以用BP去訓練任意程度的神經網路,但是在實際應用中我們會發現,隨著神經網路層數的增加,神經網路的訓練難度成幾何式增長。比如在九十年代早期,人們就已經發現在層次比較多的一個神經網路當中可能會出現梯度消失或者梯度爆炸的一個現象。
舉一個簡單的梯度消失的例子,假設神經網路的每一層都是一個sigmoid結構層,那麼BP向後傳播時它的loss每一次都會連成一個sigmoid的梯度。一系列的元素連線在一起,如果其中有一個梯度非常小的話,會導致傳播下去的梯度越來越小。實際上,在傳播一兩層之後,這個梯度已經消失了。梯度消失會導致深層次的引數幾乎靜止不動,很難得出有意義的引數結果。這也是為什麼多層神經網路非常難以訓練的一個原因所在。
學術界對於這個問題有比較多的研究,最簡單的處理方式就是修改啟用函式。早期的嘗試就是使用Rectified這種啟用函式,由於sigmoid這個函式是指數的形式,所以很容易導致梯度消失這種問題,而Rectified將sigmoid函式替換成max(0,x),從下圖我們可以發現,對於那些大於0的樣本點,它的梯度就是1,這樣就不會導致梯度消失這樣一個問題,但是當樣本點處於小於0的位置時,我們可以看到它的梯度又變成了0,所以ReLU這個函式是不完善的。後續又出現了包括Leaky ReLU和Parametric Rectifier(PReLU)在內的改良函式,當樣本點x小於0時,我們可以人為的將其乘以一個比如0.01或者α這樣的係數來阻止梯度為零。
隨著神經網路的發展,後續也出現了一些從結構上解決梯度難以傳遞問題的方法,比如元模型,LSTM模型或者現在影象分析中用到非常多的使用跨層連線的方式來使其梯度更容易傳播。
五.深度學習入門
經過上個世紀九十年代神經網路的第二次低谷,到2006年,神經網路再一次回到了大眾的視野,而這一次迴歸之後的熱度遠比之前的任何一次興起時都要高。神經網路再次興起的標誌性事件就是Hinton等人在Salahudinov等地方發表的兩篇關於多層次神經網路(現在稱作“深度學習”)的論文。
其中一篇論文解決了之前提到的神經網路學習中初始值如何設定的問題,解決途徑簡單來說就是假設輸入值是x,那麼輸出則是解碼x,通過這種方式去學習出一個較好的初始化點。而另一篇論文提出了一個快速訓練深度神經網路的方法。其實造成現在神經網路熱度現狀的原因還有很多,比如當今的計算資源相比當年來說已經非常龐大,而資料也是如此。在十九世紀八十年代時期,由於缺乏大量的資料和計算資源,當時很難訓練出一個大規模的神經網路。
神經網路早期的崛起主要歸功於三個重要的標誌性人物Hinton、Bengio和LeCun。Hinton的主要成就在於布林計算機(Restricted Boltzmann Machine)和深度自編碼機(Deep autoencoder);Bengio的主要貢獻在於元模型在深度學習上的使用取得了一系列突破,這也是深度學習最早在實際應用中取得突破的領域,基於元模型的language modeling在2003時已經可以打敗當時最好的概率模型;LeCun的主要成就代表則是關於CNN的研究。深度學習崛起最主要的表現是在各大技術峰會比如NIPS,ICML,CVPR,ACL上佔據了半壁江山,包括Google Brain,Deep Mind和FaceBook AI等在內的研究部門都把研究工作的中心放在了深度學習上面。
神經網路進入公眾視野後的第一個突破是在語音識別領域,在使用深度學習理論之前,人們都是通過使用定義好的統計庫來訓練一些模型。在2010年,微軟採用了深度學習的神經網路來進行語音識別,從圖中我們可以看到,兩個錯誤的指標均有將近三分之一的大幅度下降,效果顯著。而基於最新的ResNet技術,微軟公司已經把這個指標降到了6.9%,每一年都有一個明顯的提升。
到2012年,在圖片分類領域,CNN模型在ImageNet上取得了一個較大的突破。測試圖片分類的是一個很大的資料集,要將這些圖片分成1000類。在使用深度學習之前,當時最好的結果是錯誤率為25.8%(2011年的一個結果),在2012年Hinton和它的學生將CNN應用於這個圖片分類問題之後,這個指標下降了幾乎10%,自2012年之後,我們從圖表中可以觀察到每一年這個指標都有很大程度的突破,而這些結果的得出均使用了CNN模型。
深度學習模型能取得如此大的成功,在現代人看來主要歸功於其層次化的結構,能夠自主學習並將資料通過層次化結構抽象地表述出來。而抽象出來的特徵可以應用於其他多種任務,這也是深度學習當前十分火熱的原因之一。
下面介紹兩個非常典型且常用的深度學習神經網路:一個是卷積神經網路(CNN),另外一個是迴圈神經網路。
1.卷積神經網路
卷積神經網路有兩個基本核心概念,一個是卷積(Convolution),另一個是池化(Pooling)。講到這裡,可能有人會問,為什麼我們不簡單地直接使用前饋神經網路,而是採用了CNN模型?舉個例子,對於一個1000*1000的影象,神經網路會有100萬個隱層節點,對於前饋神經網路則需要學習10^12這樣一個龐大數量級的引數,這幾乎是無法進行學習的,因為需要海量的樣本。但實際上對於影象來說,其中很多部分具有相同的特徵,如果我們採用了CNN模型進行圖片的分類的話,由於CNN基於卷積這個數學概念,那麼每個隱層節點只會跟影象中的一個區域性進行連線並掃描其區域性特徵。假設每個隱層節點連線的區域性樣本點數為10*10的話,那麼最終引數的數量會降低到100M,而當多個隱層所連線的區域性引數可以共享時,引數的數量級更會大幅下降。
從下圖中我們可以直觀的看出前饋神經網路和CNN之間的區別。圖中的模型從左到右依次是全連線的普通的前饋神經網路,區域性連線的前饋神經網路和基於卷積的CNN模型網路。我們可以觀察到基於卷積的神經網路隱層節點之間的連線權重引數是可以共享的。
另一個操作則是池化(Pooling),在卷積生成隱層的基礎上CNN會形成一箇中間隱層——Pooling層,其中最常見的池化方式是Max Pooling,即在所獲得的隱層節點中選擇一個最大值作為輸出,由於有多個kernel進行池化,所以我們會得到多箇中間隱層節點。
那麼這樣做的好處是什麼呢?首先,通過池化操作會是引數的數量級進一步縮小;其次就是具有一定的平移不變性,如圖所示,假設圖中的九個隱層節點中的其中一個發生平移,池化操作後形成的Pooling層節點仍舊不變。
CNN的這兩個特性使得它在影象處理領域的應用非常廣泛,現在甚至已經成為了影象處理系統的標配。像下面這個視覺化的汽車的例子就很好地說明了CNN在影象分類領域上的應用。將原始的汽車圖片輸入到CNN模型之中後,從起初最原始的一些簡單且粗糙的特徵例如邊和點等,經過一些convolution和RELU的啟用層,我們可以直觀的看到,越接近最上層的輸出影象,其特徵越接近一輛汽車的輪廓。該過程最終會得到一個隱層表示並將其接入一個全連線的分類層然後得出圖片的類別,如圖中的car,truck,airplane,ship,horse等。
下圖是早期LeCun等人提出的一個用於手寫識別的神經網路,這個網路在九十年代時期已經成功運用到美國的郵件系統之中。感興趣的讀者可以登入LeCun的網站檢視其識別手寫體的動態過程。
當CNN在影象領域應用十分流行的同時,在近兩年CNN在文字領域也得到了大規模應用。例如對於文字分類這個問題,目前最好的模型是基於CNN模型提出來的。從文字分類的特點來看,對一個文字的類別加以鑑別實際上只需要對該文字中的一些關鍵詞訊號加以識別,而這種工作非常適合CNN模型來完成。
實際上如今的CNN模型已經應用到人們生活中的各個領域,比如偵查探案,自動駕駛汽車的研發,Segmenttation還有Neural Style等方面。其中Neural Style是個非常有趣的應用,比如之前App Store中有個非常火的應用Prisma,可以將使用者上傳的照片轉換成其他的風格,比如轉換成梵高的星空一樣的畫風,在這其中就大量應用了CNN的技術。
2. 迴圈神經網路
關於迴圈神經網路的基本原理如下圖所示,從圖中可以看迴圈神經網路的輸出不僅依賴於輸入x,而且依賴於當前的隱層狀態,而這個隱層狀態會根據前一個x進行更新。從展開圖中可以直觀的理解這個過程,第一次輸入的中間隱層狀態S(t-1)會影響到下一次的輸入X(t)。迴圈神經網路模型的優勢在於可以用於文字、語言或者語音等此類序列型的資料,即當前資料的狀態受到此前資料狀態的影響。對於此類資料,前饋神經網路是很難實現的。
提到RNN,那就不得不介紹一下之前提到的LSTM模型。實際上LSTM並不是一個完整的神經網路,它只是一個RNN網路中的節點經過複雜處理後的結果。LSTM中包含三個門:輸入門,遺忘門和輸出門。
這三個門均用於處理cell之中的資料內容,分別決定是否要將cell中的資料內容輸入、遺忘和輸出。
最後介紹一個目前非常流行的交叉領域的神經網路的應用——將一個圖片轉換成描述形式的文字或者該圖片的title。具體的實現過程可以簡單的解釋為首先通過一個CNN模型將圖片中的資訊提取出來形成一個向量表示,然後將該向量作為輸入傳送到一個訓練好的RNN模型之中得出該圖片的描述。
直播視訊回顧地址:https://yq.aliyun.com/video/play/1370?spm=a2c41.11124528.0.0
相關推薦
一文讀懂神經網路(附PPT、視訊)
來源:雲棲社群本文共6500字,建議閱讀10分鐘。本文從神經網路的發展歷史出發,為你介紹感知器模
一文讀懂複雜網路(應用、模型和研究歷史)
出處:https://yq.aliyun.com/articles/231424?do=login#摘要: 隨著近幾年關於複雜網路(Complex network)理論及其應用研究的不斷深入,已有大量關於複雜網路的文章發表在Science,ature,RL,NAS等國際一流的
一文弄懂神經網路中的反向傳播法——BackPropagation [Mechine Learning & Algorithm] 神經網路基礎 [Mechine Learning & Algorithm] 神經網路基礎
原文地址:https://www.cnblogs.com/charlotte77/p/5629865.html 最近在看深度學習的東西,一開始看的吳恩達的UFLDL教程,有中文版就直接看了,後來發現有些地方總是不是很明確,又去看英文版,然後又找了些資料看,才發現,中文版的譯者在翻譯的時候會對省略的公式推導過
一文弄懂神經網路中的反向傳播法——BackPropagation
最近在看深度學習的東西,一開始看的吳恩達的UFLDL教程,有中文版就直接看了,後來發現有些地方總是不是很明確,又去看英文版,然後又找了些資料看,才發現,中文版的譯者在翻譯的時候會對省略的公式推導過程進行補充,但是補充的又是錯的,難怪覺得有問題。反向傳播法其實是神經網路
一文看懂神經網路工作原理
現在談人工智慧已經繞不開“神經網路”這個詞了。人造神經網路粗線條地模擬人腦,使得計算機能夠從資料中學習。 機器學習這一強大的分支結束了 AI 的寒冬,迎來了人工智慧的新時代。簡而言之,神經網路可能是今天最具有根本顛覆性的技術。 看完這篇神經網路的指南,你也可以和別
一文讀懂 Android TouchEvent 事件分發、攔截、處理過程
什麼是事件?事件是使用者觸控手機螢幕,引起的一系列TouchEvent,包括ACTION_DOWN、ACTION_MOVE、ACTION_UP、ACTION_CANCEL等,這些action組合後變成點選事件、長按事件等。 在這篇文章中,用打Log測試的方法來了解Android TouchEvent 事件分發
【CNN】一文讀懂卷積神經網路CNN
本文為大家解讀如何簡單明瞭的解釋卷積,並且分享了學習中的一些方法案例。 首先文章的提綱為: CNN栗子鎮樓 What is CNN 什麼是卷積 什麼是池化 Why CNN 對
深度 | 生成對抗網路初學入門:一文讀懂GAN的基本原理(附資源)
選自 Sigmoidal 作者:Roman Trusov 機器之心編譯 參與:Panda 生成對抗網路是現在人工智慧領域的當紅技術之一。近日,Sigmoidal.io 的部落格發表了一篇入門級介紹文章,對 GAN 的原理進行了解釋說明。另外,在該文章的最後還附帶了一些能幫助初學者自己
一文讀懂BP神經網路
轉自一位懂生活的女神的部落格園的文章。http://www.cnblogs.com/charlotte77/p/5629865.html 最近在看深度學習的東西,一開始看的吳恩達的UFLDL教程,有中文版就直接看了,後來發現有些地方總是不是很明確,又去看英文版,然後又找了些資料看,才發現,中文版的譯者
一文讀懂生成對抗網路GANs(附學習資源)
原文標題:AnIntuitive Introduction to Generative Adve
一文讀懂卷積神經網路中的1x1卷積核
前言 在介紹卷積神經網路中的1x1卷積之前,首先回顧卷積網路的基本概念[1]。 卷積核(convolutional kernel):可以看作對某個區域性的加權求和;它是對應區域性感知,它的原理是在觀察某個物體時我們既不能觀察每個畫素也不能一次觀察整體,而是
獨家 | 一文讀懂整合學習(附學習資源)
摘要: 整合演算法(Ensemble Algorithms)綜述 嚴格意義上來說,這不算是一種機器學習演算法,而更像是一種優化手段或者策略,它通常是結合多個簡單的弱機器學習演算法,去做更可靠的決策。有人把它稱為機器學習中的“屠龍刀”,非常萬能且有效,整合模型是一種能在各種
一文讀懂網路爬蟲
前言在當前資料爆發的時代,資料分析行業勢頭強勁,越來越多的人涉足資料分析領域。進入領域最想要的就是獲取大量的資料來為自己的分析提供支援,但是如何獲取網際網路中的有效資訊?這就促進了“爬蟲”技術的飛速發展。網路爬蟲(又被稱為網頁蜘蛛,網路機器人,在FOAF社群中間,更經常的稱為網頁追逐者),是一種按照一定的規則
一文讀懂對抗生成網路的3種模型
https://www.toutiao.com/i6635851641293636109/ 2018-12-17 14:53:28 基於對抗生成網路技術的線上工具edges2cats, 可以為簡筆畫塗色 前言 在GAN系
推薦 :一文讀懂R中的探索性資料分析(附R程式碼)
作者:Pablo Casas;翻譯:蔣雨暢;校對:車前子;本文約1500字,建議閱讀7分鐘。本文
一文讀懂「Attention is All You Need」| 附程式碼實現
前言 2017 年中,有兩篇類似同時也是筆者非常欣賞的論文,分別是 FaceBook 的Convolutional Sequence to Sequence Learning和 Google 的Attention is All You Need,它們都算是 Seq2Se
乾貨丨一文讀懂深度學習(附學習資源,據說點贊2W+)
文章來源:新智元 人工智慧(AI)和機器學習(ML)都屬於目前最熱門的話題。 在日常生活中,AI這個術語我們隨處可見。你或許會從立志高遠的開發者那裡聽說她(他)們想要學習AI。你又或許會從運營者那裡聽到他們想要在他們的的服務中實施AI。但往往這些人中的絕大多數都並不明白什麼是AI。 在你閱讀
資料變金礦:一文讀懂序列模型(附用例)
作者:TAVISH SRIVASTAVA翻譯:王雨桐校對:丁楠雅本文約3000字,建議閱讀15分
一文讀懂架構整潔之道(附知識脈絡圖)
程式的世界飛速發展,今天所掌握的技能可能明年就過時了,但有一些東西是歷久彌新,永遠不變的,掌握了這些,在程式的海洋裡就不會迷路,架