摘要: 對神經網絡概念還很朦朧?來看看阿里技術大牛的分享!
神經網絡和深度學習技術是當今大多數高級智能應用的基礎。在本文,來自阿里巴巴搜索部門的高級算法專家孫飛博士將簡要介紹神經網絡的演變,並討論該領域的最新發展。本文主要圍繞如下五個方面:算法
▪ 神經網絡的演化;網絡
▪ 感知機模型;機器學習
▪ 前饋神經網絡;函數
▪ 反向傳播;學習
▪ 深度學習基礎知識;測試
在咱們深刻研究神經網絡的歷史發展以前,讓咱們首先介紹神經網絡的概念。神經網絡主要是一種計算模型,它以簡化的水平模擬人類大腦的運做。這種類型的模型使用大量計算神經元,這些神經元經過加權鏈接層鏈接。每層神經元都可以執行大規模並行計算並在它們之間傳遞信息。優化
下面的時間表顯示了神經網絡的演變:spa
神經網絡的起源甚至能夠追溯到計算機自己的發展以前,第一個神經網絡出如今20世紀40年代。本文將經過一些歷史來幫助每一個人更好地理解神經網絡的基礎知識。設計
第一代神經網絡神經元做爲驗證者:這些神經元的設計者只是想確認他們能夠構建用於計算的神經網絡。但,這些網絡不能用於訓練或學習,它們只是充當邏輯門電路。它們的輸入和輸出是二進制的,權重是預約義的。索引
神經網絡發展的第二階段發生在20世紀50年代和60年代:這涉及Roseblatt關於感知機模型的開創性工做和Herbert關於學習原理的工做。
咱們上面提到的感知機模型和神經元模型類似但有一些關鍵差別。感知機模型中的激活算法能夠是中斷算法或S形算法,而且其輸入能夠是實數向量而不是神經元模型使用的二進制向量。與神經元模型不一樣,感知機模型可以學習。接下來,咱們將討論感知機模型的一些特殊特性。
咱們能夠將輸入值(x1...xn)視爲N維空間中的座標,而wTx-w0=0是N維空間中的超平面。顯然,若是wTx-w0<0,則該點低於超平面,而若是wTx-w0> 0,則該點落在超平面之上。
感知機模型對應於分類器的超平面,而且可以分離N維空間中的不一樣類型的點。看下圖,咱們能夠看到感知機模型是線性分類器:
感知機模型可以輕鬆地對AND,OR和NOT等基本邏輯運算進行分類。
咱們能夠經過感知機模型對全部邏輯運算進行分類嗎?答案固然不是。例如,經過單個線性感知機模型很難對異或運算進行分類,這是神經網絡在第一個峯值以後很快進入開發的低點的主要緣由之一。包括明斯基在內的一些大牛就感知機模型的主題討論了這個問題。然而,不少人在這個問題上誤解了做者。
實際上,像明斯基這樣的做者指出,能夠經過多層感知機模型實現異或運算;然而,因爲學術界缺少有效的方法來研究當時的多層感知機模型,神經網絡的發展已經進入了第一個低點。
下圖直觀地顯示了多層感知機模型如何實現異或操做:
進入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,其中α是咱們能夠手動調整的學習率。
咱們如何學習多層前饋神經網絡中的全部參數?頂層的參數很是容易得到,咱們能夠經過比較計算模型輸出的估計值和實際值之間的差別並使用梯度降低原理來得到參數結果來實現參數。當咱們嘗試從隱藏層獲取參數時,問題出現了。即便咱們能夠計算模型的輸出,咱們也沒法知道預期值是什麼,所以咱們沒法有效地訓練多層神經網絡。這個問題長期困擾着研究人員,它致使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模型和現代圖像分析使用多種跨層連接方法來更容易地傳播漸變。
請繼續關注本文的第二部分。
本文做者:【方向】
本文爲雲棲社區原創內容,未經容許不得轉載。