神經網絡是什麼?


更多科技資訊,盡在雲棲科技聯播~

摘要:對神經網絡概念還很朦朧?來看看阿里技術大牛的分享!


神經網絡和深度學習技術是當今大多數高級智能應用的基礎。在本文,來自阿里巴巴搜索部門的高級算法專家孫飛博士將簡要介紹神經網絡的演變,並討論該領域的最新發展。本文主要圍繞以下五個方面:

  • 神經網絡的演化;
  • 感知機模型;
  • 前饋神經網絡;
  • 反向傳播;
  • 深度學習基礎知識;

1.神經網絡的演變

在我們深入研究神經網絡的歷史發展之前,讓我們首先介紹神經網絡的概念。神經網絡主要是一種計算模型,它以簡化的水平模擬人類大腦的運作。這種類型的模型使用大量計算神經元,這些神經元通過加權連接層連接。每層神經元都能夠執行大規模並行計算並在它們之間傳遞信息。

下面的時間表顯示了神經網絡的演變:

神經網絡的起源甚至可以追溯到計算機本身的發展之前,第一個神經網絡出現在20世紀40年代。本文將通過一些歷史來幫助每個人更好地理解神經網絡的基礎知識。

第一代神經網絡神經元作為驗證者:這些神經元的設計者只是想確認他們可以構建用於計算的神經網絡。但,這些網絡不能用於訓練或學習,它們只是充當邏輯門電路。它們的輸入和輸出是二進制的,權重是預定義的。

神經網絡發展的第二階段發生在20世紀50年代和60年代:這涉及Roseblatt關於感知機模型的開創性工作和Herbert關於學習原理的工作。


2.感知機模型

我們上面提到的感知機模型和神經元模型相似但有一些關鍵差異。感知機模型中的激活算法可以是中斷算法或S形算法,並且其輸入可以是實數向量而不是神經元模型使用的二進制向量。與神經元模型不同,感知機模型能夠學習。接下來,我們將討論感知機模型的一些特殊特性。

我們可以將輸入值(x1...xn)視為N維空間中的座標,而wTx-w0=0是N維空間中的超平面。顯然,如果wTx-w0<0,則該點低於超平面,而如果wTx-w0> 0,則該點落在超平面之上。

感知機模型對應於分類器的超平面,並且能夠分離N維空間中的不同類型的點。看下圖,我們可以看到感知機模型是線性分類器:

感知機模型能夠輕鬆地對AND,OR和NOT等基本邏輯運算進行分類。

我們可以通過感知機模型對所有邏輯運算進行分類嗎?答案當然不是。例如,通過單個線性感知機模型很難對異或運算進行分類,這是神經網絡在第一個峰值之後很快進入開發的低點的主要原因之一。包括明斯基在內的一些大牛就感知機模型的主題討論了這個問題。然而,很多人在這個問題上誤解了作者。

實際上,像明斯基這樣的作者指出,可以通過多層感知機模型實現異或運算;然而,由於學術界缺乏有效的方法來研究當時的多層感知機模型,神經網絡的發展已經進入了第一個低點。

下圖直觀地顯示了多層感知機模型如何實現異或操作:


3.前饋神經網絡

進入20世紀80年代,由於感知機模型神經網絡的表達能力侷限於線性分類任務,神經網絡的發展開始進入多層感知機階段。而經典的多層神經網絡是前饋神經網絡。

從下圖中可以看出,它涉及輸入層,具有未定義數量的節點的隱藏層和輸出層。

我們可以通過多層感知機模型表達任何邏輯運算,但這引入了三層之間的加權學習問題。當xk從輸入層傳輸到隱藏層上的加權vkj,然後通過像sigmoid這樣的激活算法時,我們可以從隱藏層中檢索相應的值hj。同樣,我們可以使用類似的操作使用hj值從輸出層導出yi節點值。為了學習,我們需要來自w和v矩陣的加權信息,以便我們最終可以獲得估計值y和實際值d。

如果你對機器學習有基本的瞭解,你就會明白為什麼我們使用梯度下降來學習模型。將梯度下降應用於感知機模型的原理相當簡單,如下圖所示。首先,我們必須確定模型的損失。

該示例使用平方根損失並尋求縮小模擬值y與實際值d之間的差距。為了方便計算,在大多數情況下,我們使用根關係E=1/2(dy)^2 = 1/2(df(x))^2。

根據梯度下降原理,加權更新週期的比率為:wj←wi+α(d-f(x))f'(x)xi,其中α是我們可以手動調整的學習率。


4.反向傳播

我們如何學習多層前饋神經網絡中的所有參數?頂層的參數非常容易獲得,我們可以通過比較計算模型輸出的估計值和實際值之間的差異並使用梯度下降原理來獲得參數結果來實現參數。當我們嘗試從隱藏層獲取參數時,問題出現了。即使我們可以計算模型的輸出,我們也無法知道預期值是什麼,因此我們無法有效地訓練多層神經網絡。這個問題長期困擾著研究人員,它導致20世紀60年代以後神經網絡的發展不足。

後來,在70年代,科學家獨立地引入了反向傳播算法的想法。這種算法背後的基本思想實際上非常簡單,即使當時沒有辦法根據隱藏層的預期值進行更新,也可以通過從隱藏層傳遞的錯誤來更新隱藏層和其他層之間的權重。在計算梯度時,由於隱藏層中的所有節點都與輸出層上的多個節點相關,因此前一層上的所有層都被累積並一起處理。

反向傳播的另一個優點是我們可以同時對同一層上的節點執行梯度和加權,因為它們是不相關的。我們可以用偽代碼表示反向傳播的整個過程如下:

接下來,我們來談談反向傳播神經網絡的一些其他特性。反向傳播實際上是一個鏈規則,它可以很容易地推廣任何具有映射的計算。根據梯度函數,我們可以使用反向傳播神經網絡來生成局部優化解決方案,但不是全局優化解決方案。然而,從一般的角度來看,反向傳播算法產生的結果通常是令人滿意的優化解決方案。下圖是反向傳播算法的直觀表示:

在大多數情況下,反向傳播神經網絡將在範圍內找到最小的可能值;但是,如果我們離開那個範圍,我們可能會發現更好的價值。在實際應用中,有許多簡單有效的方法可以解決這類問題,例如,我們可以嘗試不同的隨機初始化方法。而且,在實踐中,在現代深度學習領域中經常使用的模型中,初始化方法對最終結果具有顯著影響。迫使模型離開優化範圍的另一種方法是在訓練期間引入隨機噪聲或使用遺傳算法來防止訓練模型停止在非理想的優化位置。

反向傳播神經網絡是一種優秀的機器學習模型,在談到機器學習時,我們不禁注意到機器學習過程中經常遇到的基本問題,即過度擬合的問題。過度擬合的一個常見表現是,在訓練期間,即使模型的損失不斷下降,測試組中的損失和錯誤也會增加。有兩種典型方法可以避免過度擬合:

  • 提前停止:我們可以提前分離驗證組,並在訓練期間針對此已經驗證的組進行運行。然後我們可以觀察到模型的損失,如果損失已經在驗證組中停止但仍然在訓練組中下降,那麼我們可以提前停止訓練以防止過度擬合。
  • 正則化:我們可以在神經網絡中為權重添加規則。目前流行的dropout方法涉及隨機丟棄一些節點或側面。我們可以將這種方法視為正則化的一種形式,在防止過度擬合方面非常有效。

儘管神經網絡在20世紀80年代非常流行,但不幸的是,它們在20世紀90年代進入了發展的另一個低谷。許多因素促成了這一低估區。例如,支持向量機,它是20世紀90年代的流行模型,在各種主要會議上登臺亮相,並在各種領域得到應用。支持向量機具有出色的統計學習理論,易於直觀理解。它們也非常有效併產生近乎理想的結果。

在這種轉變中,支持向量機背後的統計學習理論的興起對神經網絡的發展施加了不小的壓力。另一方面,從神經網絡本身的角度來看,即使你可以使用反向傳播網絡在理論上訓練任何神經網絡,在實際應用中,我們注意到隨著神經網絡中層數的增加,難度訓練網絡成倍增長。例如,在20世紀90年代初,人們注意到在具有相對大量層的神經網絡中,通常會看到梯度損失或梯度爆炸。

例如,梯度損失的一個簡單例子是神經網絡中的每個層都是S形結構層,因此在反向傳播期間它的損失被鏈接成S形梯度。當一系列元素串在一起時,如果其中一個漸變非常小,則漸變將變得越來越小。實際上,在傳播一層或兩層之後,該梯度消失。梯度損失導致深層中的參數停止變化,使得很難獲得有意義的結果。這是多層神經網絡很難訓練的原因之一。

學術界已經深入研究了這個問題,並得出結論,處理它的最簡單方法是改變激活算法。在開始時,我們嘗試使用整流激活算法,因為S形算法是一種索引方法,很容易引起梯度損失問題。另一方面,整流取代了sigmoid函數並替換了max(0,x)。從下圖中我們可以看出,估計值大於0的梯度為1,這可以防止梯度消失的問題。但是,當估計值低於0時,我們可以看到梯度再次為0,因此ReLU算法必須是不完美的。後來,出現了許多改進的算法,包括Leaky ReLU和Parametric Rectifier(PReLU)。當估計x小於0時,我們可以將其轉換為類似0的係數。

隨著神經網絡的發展,我們後來提出了許多方法來解決在結構層面上傳遞梯度的問題。例如,Metamodel、LSTM模型和現代圖像分析使用多種跨層鏈接方法來更容易地傳播漸變。


5.深度學習基礎

從20世紀90年代到2006年發展的第二個低谷期,之後神經網絡再次進入群眾視角,這次影響力比以前更大。神經網絡興起期間的一個重大事件是Hinton包括Salahundinov在內在多個學術論壇提交的多層神經網絡(現在稱為“深度學習”)的論文。

其中一個論文解決了為神經網絡設置初始化值的問題。簡單來說,解決方案是將輸入值視為x,將輸出值視為解碼x,然後通過此方法找到更好的初始化點。另一篇論文提出了一種快速訓練深度神經網絡的方法。實際上,有許多因素促成了神經網絡的普及,例如,計算資源的巨大增長和數據的可用性。在20世紀80年代,由於缺乏數據和計算資源,很難訓練大規模的神經網絡。

神經網絡的早期興起是由三個巨人驅動的,即Hinton,Bengio和LeCun。Hinton的主要成就是Restricted Boltzmann Machine和Deep Autoencoder,Bengio的主要貢獻是使用元模型進行深度學習的一系列突破。這也是深度學習取得重大突破的第一個領域:

2013年,基於元模型的語言建模已經能夠勝過當時最有效的方法 -概率模型。LeCun的主要成就是與CNN有關的研究。深度學習在NIPS、ICML、CVPR、ACL等一些重要的峰會上,吸引了不少關注。其中包括Google Brain,Deep Mind和Facebook AI的出現,這些都將他們的研究中心放在深度學習領域。

深度學習進入爆發期後的第一個突破是在語音識別領域。在我們開始使用深度學習之前,所有的模型都是在先前定義的統計數據庫上進行的。2010年,微軟使用深度學習神經網絡進行語音識別,我們從下圖中可以看出,兩個錯誤指標都下降了2/3,這是一個明顯的改善。基於最新的ResNet技術,微軟已將該指標降至6.9%,並逐年實現了改進提升。

在圖像分類領域,CNN模型在2012年經歷了ImageNet形式的重大突破。在ImageNet中,圖像分類使用海量數據集進行測試,然後分類為1000種類型。在應用深度學習之前,由於Hinton和他的學生在2012年使用CNN所做的工作,圖像分類系統的最佳錯誤率為25.8%(2011年),僅降低了10%。

從圖中我們可以看出,自2012年以來,該指標每年都經歷了重大突破,所有這些突破都是使用CNN模型實現的。

這些巨大的成就在很大程度上歸功於現代系統的多層結構,因為它們允許獨立學習和通過分層抽象結構表達數據的能力。抽象的特徵可以應用於各種任務,對深度學習的當前流行做出了重大貢獻。

接下來,我們將介紹兩種經典和常見類型的深度學習神經網絡:一種是卷積神經網絡(CNN),另一種是遞歸神經網絡(RNN)。

卷積神經網絡

卷積神經網絡有兩個核心概念。一個是卷積,另一個是池化(pooling)。在這一點上,有些人可能會問我們為什麼不簡單地使用前饋神經網絡而選擇CNN。例如,以1000x1000圖像為例,神經網絡在隱藏層上將擁有100萬個節點。那麼,前饋神經網絡將具有10 ^ 12個參數。在這一點上,系統幾乎不可能學習,因為它需要絕對大量的估算。

但是,大量圖像具有這樣的特徵:如果我們使用CNN對圖像進行分類,那麼由於卷積的概念,隱藏層上的每個節點只需要連接並掃描圖像的一個位置的特徵。如果隱藏層上的每個節點連接到10 * 10個估算,則最終參數數量為1億,如果可以共享多個隱藏層訪問的本地參數,則參數數量會顯著減少。

看下圖,前饋神經網絡和CNN之間的區別顯然很大。圖像中的模型從左到右依次為完全連接、正常、前饋、完全連接的前饋和CNN建模神經網絡。我們可以看到,可以共享CNN神經網絡隱藏層上節點的連接權重參數。

另一個操作是池化。CNN將在卷積原理的基礎上在中間形成隱藏層,即池化層。最常見的池化方法是Max Pooling,其中隱藏層上的節點選擇最大輸出值。因為多個內核正在池化,所以我們在中間獲得了多個隱藏層節點。

有什麼好處?首先,池化進一步減少了參數的數量,其次,它提供了一定量的平移不變性。如圖所示,如果圖像中顯示的九個節點之一要經歷轉換,則在池化層上生成的節點將保持不變。

CNN的這兩個特性使其在圖像處理領域中流行,並且已成為圖像處理領域的標準。下面的可視化汽車的例子是CNN在圖像分類領域中應用的一個很好的例子。在將汽車的原始圖像輸入CNN模型後,我們可以通過卷積和ReLU激活層傳遞一些簡單粗糙的特徵,如邊緣和點。我們可以直觀地看到它們距離最上面的輸出層的輸出圖像越近,它們越接近汽車的輪廓。此過程將最終檢索隱藏的圖層表示並將其連接到分類圖層,之後它將接收圖像的分類,如圖像中顯示的汽車、卡車、飛機、船舶和馬。

下圖是LeCun和其他研究人員在早期手寫識別領域使用的神經網絡。該網絡在20世紀90年代在美國郵政系統中得到應用,有興趣的讀者可以登錄LeCun的網站查看手寫識別的動態過程。

雖然CNN在圖像識別領域已經變得非常受歡迎,但它在過去兩年中也成為文本識別的工具。例如,CNN是目前文本分類最佳解決方案的基礎。在確定一段文本的類別方面,所有人真正需要做的是從文本中的關鍵詞中尋找指示,這是一項非常適合CNN模型的任務。

CNN具有廣泛的實際應用,例如在調查、自動駕駛汽車、分段和神經風格中。神經風格是一個不錯的應用程序。例如,App Store中有一個名為Prisma的流行應用程序,它允許用戶上傳圖像並將其轉換為不同的樣式。例如,它可以轉換為Van Goh的Starry Night風格,這個過程在很大程度上依賴於CNN。

遞歸神經網絡

至於遞歸神經網絡背後的基本原理,我們可以從下圖中看到,這種網絡的輸出不僅依賴於輸出x,還依賴於隱藏層的狀態,隱藏層的狀態根據先前的輸入x進行更新。展開的圖像顯示了整個過程,來自第一個輸入的隱藏層是S(t-1),它影響下一個輸入X(t)。遞歸神經網絡模型的主要優點是我們可以在順序數據操作中使用它,如文本,語言和語音,其中當前數據的狀態受先前數據狀態的影響,使用前饋神經網絡很難處理這種類型的數據。

說到遞歸神經網絡,我們不能提出我們前面提到的LSTM模型。LSTM實際上並不是一個完整的神經網絡,簡而言之,它是RNN節點經過複雜處理的結果。LSTM具有三個門,即輸入門,遺忘門和輸出門。

這些門中的每一個用於處理單元中的數據並確定單元中的數據是否應該被輸入,遺忘或輸出。

最後,我們來談談神經網絡的跨學科應用,這種應用正在獲得廣泛認可。該應用程序涉及將圖像轉換為圖像的文本描述或描述它的標題,我們可以首先使用CNN模型來描述具體的實現過程,以提取有關圖像的信息並生成矢量表示。稍後,我們可以將該向量作為輸入傳遞給已經訓練過的遞歸神經網絡,以產生圖像的描述。

總結

在本文中,我們討論了神經網絡的發展,並介紹了該領域的幾個基本概念和方法。上述文章基於孫飛博士在年度阿里雲計算大會上發表的演講。他目前正在致力於研究推薦系統和文本生成方法。


都看到這裡了,關注一下唄?


雲棲科技聯播


下面我們來點通俗易懂的幾個概念。如果想系統性學習,建議買一些相關的書籍看一看。

神經網絡

神經網絡技術是機器學習下屬的一個概念,本質上是從信息處理的角度對人腦神經元網絡進行抽象模擬,從而建立計算模型。

基於神經連接的計算模型在上世紀40年代開始受到重視,大量的訓練數據(包括圖像、視頻和語音)成功的實現了數據分析。在深度學習發展之前,神經網絡通常只有3到5層,和幾十個神經元/節點;深度學習之後,神經網絡擴展到7到10層,甚至更多層,模擬神經元數目增至百萬量級,從而面向更為複雜的問題實現更為可靠的處理。當下興起的人工智能,主要就是大規模的深度學習。

具體來看,神經網絡有三類主要形式:

1.1 前饋神經網絡

前饋神經網絡(Feed forward neural networks)是最常見的人工神經網絡。在這種結構下,信息只向一個方向(向前)移動,即從輸入層經過“隱藏層”到輸出層,沒有循環網絡。首個單節神經網絡在1958年提出,經過計算能力和訓練算法的大發展,前饋神經網絡展現出了更高的性能水平。

1.2 循環神經網絡

循環神經網絡(Recurrent neural networks)指結構中包含節點定向連接成環(loops)的人工神經網絡,非常適合於處理(手寫、文本、語音形式的)任意時序的輸入序列。2016年11月,牛津研究報告顯示,基於神經網絡(和卷積神經網絡)的系統在唇語識別應用中實現了95%的準確率(有經驗的人類唇語者準確率近52%)。

1.3 卷積神經網絡

卷積神經網絡(Convolutional neural networks)是一種深度前饋人工神經網絡,其邏輯結構受動物視覺大腦皮層的啟發,對於大型圖像處理(視覺感知任務)有出色表現。

▲最好的AI系統識別能力已經超過人類


智東西


人工神經網絡(ANNs)或連接系統是計算系統,其模糊地受到構成動物腦的生物神經網絡的啟發。這些系統通過考慮實例“學習”(即逐步提高性能),通常沒有特定於任務的編程。例如,在圖像識別中,他們可能會通過分析手動標記為“貓”或“無貓”的示例圖像並使用結果識別其他圖像中的貓來識別包含貓的圖像。他們沒有任何先驗知識就這樣做關於貓,例如,他們有毛皮,尾巴,鬍鬚和貓般的面孔。相反,他們從他們處理的學習資料中演變出自己的一套相關特徵。

人工神經網絡基於一組稱為人造神經元(在動物腦中的生物神經元的簡化版本)的連接單元或節點。人造神經元之間的每個連接(簡化版本的突觸)可以將信號從一個傳輸到另一個。接收信號的人工神經元可以處理它,然後發出信號傳遞與之相連的人造神經元。

在常見的ANN實現中,人造神經元之間的連接處的信號是實數,並且每個人造神經元的輸出通過其輸入之和的非線性函數來計算。人工神經元和連接通常具有隨著學習進行而調整的權重。重量增加或減少連接處信號的強度。人造神經元可能有一個閾值,只有當彙總信號超過該閾值時才會發送信號。通常,人造神經元是分層組織的。不同的層可能會對其輸入執行不同類型的轉換。信號從第一個(輸入)到最後一個(輸出)層傳播,可能在多次穿越層之後。

ANN方法的最初目標是以與人類大腦相同的方式解決問題。然而,隨著時間的推移,注意力集中在匹配具體任務上,導致生物學的偏差。人工神經網絡已用於各種任務,包括計算機視覺,語音識別,機器翻譯,社交網絡過濾,遊戲板和視頻遊戲以及醫療診斷。



硅發佈


以分類垃圾郵件為例。

如果用傳統程序做,怎麼做?

容易想到的一個思路是在郵件中搜索一些關鍵詞,比如“代開發票”之類的,然後給每個關鍵詞分配一個分數,再將這些特徵的分數加起來,得到一個總分。將這個總分和一個目標分數比較,大於這個分數結果為真(分類為垃圾郵件),小於這個分數結果為假(分類為正常郵件)。

Boolean detectSpam(f1, f2, ..., fn) {

if (w1 * f1 + w2 * f2 + ... + wn * fn > t) {

return true;

} else {

return false;

}

}

其中,f1 ... fn 代表匹配到的關鍵詞,w1 ... wn 代表相應的分數。

正如你所說:

傳統程序就是循環判斷什麼的

那上面就是一個判斷。detectSpam是分類一封郵件的,將它應用到所有郵件上,不正是循環嘛。所以說,這是一個標準的傳統程序。

好了,現在我們給上面提到的東西起些新名字。分配的分數,我們起名叫權重,目標分數,我們起名叫閾值。最後我們再把返回的布爾值(true、false)改成數字1和0。

那麼上面的detectSpam變成了什麼,感知器(perceptron)!

所以說,你可以將感知器看成傳統程序中某類具有一些特定性質的函數。感知器接受多個輸入,計算一個多項式的值(輸入乘以權重並相加),返回一個輸出(1或0)

之所以叫感知器,是因為它借鑑了神經末梢接受外部的輸入,決定是否激動的思路。

由於感知器主要是計算多項式的值,那麼從直覺上,線性不可分的問題,比如異或(XOR)函數,就無法轉化成感知器的形式。

但實際上,感知器並沒有這麼弱,將感知器組合一下,就可以表達異或函數。

我們準備兩個閾值為 0 的感知器,一個是x-y, 另一個是-x+y,將輸入分別發給這兩個感知器:

然後再將輸出提供給一個閾值為 0 的x+y感知器:

比較輸入和最終輸出,可以看到我們的這三個感知器運算的結果是符合異或的定義的。

這裡,前兩個感知器(x-y和-x+y)是第一層,最後一個感知器(x+y)是第二層。由此我們看到,通過組合感知器,可以構成一個分層的神經網絡,分層的神經網絡可以解決線性不可分問題。

但是感知器還是看起來很弱啊。 異或函數這麼簡單的問題,都要這麼複雜才能搞定。而稍微正常一點的編程語言,異或函數都能很直接地定義。我們何必要自廢武功用感知器和神經網絡呢?直接用傳統程序不行嗎?

實際上,感知器和神經網絡看起來很弱,但它也有優點:

  1. 感知器的“接口”很齊整,每個感知器都有多個輸入,返回一個結果,這就使得它們組合起來很容易

  2. 感知器內部都是在進行多項式運算,而不像傳統程序一樣千變萬化,因此優化起來很容易(特別是現在我們有很強勁的擅長浮點運算的GPU)。

  3. 感知器的運算結果只取決於它的輸入,因此可以很容易地以

    分佈式的方式跑。

  4. 上面那個例子中x-y, -x+y, x+y的確定,來自於我們對異或函數的理解。假設我們對異或函數一無所知,感知器的結構決定了,我們比較容易通過暴力的方式(所謂訓練神經網絡)來嘗試各種權重和閾值。相反,我們不太可能通過暴力的方式生成字符串恰巧撞對異或函數的一般定義。

  5. 神經網絡分層的結構,意味著我們可以逐層嘗試,來逼近預期的結果。

以上只是神經網絡的基本原理。實際使用的神經網絡要複雜很多。

比如,我們的感知器只能輸出 0 或者 1,而既然是暴力嘗試,那我們就希望整個網絡對參數的調整敏感一點。這時候我們就不再比較多項式的值和閾值來輸出 0 或者 1,而是將閾值轉化成

偏置加到多項式上,並使用一個激活函數對多項式的結果進行處理,得到一個浮點數。最簡單的激活函數是 ReLU, 定義很簡單 max(0, n). ReLu 雖然簡單,但出奇地好用。

同時,實際工程中使用的神經網絡,無論是規模還是結構一般都非常複雜。


分享到:


相關文章: