神經網絡與深度學習

2021-02-15 機器學習實驗室

Author:louwill

From:深度學習筆記

深度學習作為當前機器學習一個最熱門的發展方向,仍然保持著傳統機器學習方法的理念與特徵,從監督學習的角度看,深度學習與機器學習並無本質上的差異。隱藏層使得感知機能夠發展為擬合萬物的神經網絡模型,而反向傳播算法則是整個神經網絡訓練的核心要義。要學習深度學習,恐怕不得不先溫習一下機器學習,搞清楚二者之間的關係。簡單來說,機器學習就是從歷史數據中探索和訓練出數據的普遍規律,將其歸納為相應的數學模型,並對未知的數據進行預測的過程。至於在這個過程中我們碰到的各種各樣的問題,比如數據質量、模型評價標準、訓練優化方法、過擬合等一系列關乎機器學習模型生死的問題,在這裡不做具體展開,大家可以去補習相關的機器學習知識。在機器學習中,有很多相當成熟的模型和算法。其中有一種很厲害的模型,那就是人工神經網絡。這種模型從早期的感知機發展而來,對任何函數都有較好的擬合性,但自上個世紀90年代一直到2012年深度學習集中爆發前夕,神經網絡受制於計算資源的限制和較差的可解釋性,一直處於發展的低谷階段。之後大數據興起,計算資源也迅速跟上,加之2012年ImageNet競賽冠軍採用的AlexNet卷積神經網絡一舉將圖像分類的Top5錯誤率降至16.4%,震驚了當時的學界和業界。從此之後,原本處於研究邊緣狀態的神經網絡又迅速火熱了起來,深度學習也逐漸佔據了計算機視覺的主導地位。注意:這裡有必要解釋一下模型和算法的概念,通常我們所說的像支持向量機(Support Vector Machine,以下簡稱SVM)之類的所謂機器學習十大算法其實不應該稱之為算法,更應該稱之為模型。機器學習算法應該是在給定模型和訓練策略的情況下採取的優化算法,比如梯度下降、牛頓法等。當然,一般情況下將機器學習中的模型和算法概念混在一起並沒有十分不妥之處,畢竟模型中本身就包含著計算規則的意思。講了這麼多,無非就是想讓大家知道,以神經網絡為核心的深度學習是機器學習的一個領域分支,所以深度學習在其本質上也必須遵循機器學習的基本要義和法則。在傳統的機器學習中,我們需要訓練的是結構化的數值數據,比如預測銷售量、預測某人是否按時還款,等等。但在深度學習中,其訓練輸入就不再是常規的數值數據了,它可能是一張圖片、一段語言、一段對話語音或一段視頻。深度學習要做的就是輸入一張狗的圖片到神經網絡裡,它的輸出是狗或者dog這樣的標籤,輸入一段語音,它輸出的是比如「你好」這樣的文本。綜上所述可以看出,機器學習(深度學習)的核心任務就是找(訓練)一個模型,它能夠將輸入轉化為正確的輸出。深度學習看起來就像是一個黑箱機制,輸入各種非結構化的數據之後出來預測結果,比如輸入一段語音,輸出為「Hello, World!」這樣的文本;輸入一張狗的圖像,輸出為「狗」這樣的標籤;輸入一副棋盤和當前的局勢,輸出為下一步的走棋方式;輸入「你好!」這樣一句中文,輸出為「Hi!」這樣一句英文,等等。我們很難對輸入與輸出之間的模型轉化過程給出一個合理的解釋。在實際工作中,調用像 TensorFlow 這樣優秀的深度學習框架能夠幫助我們快速搭建起一個深度學習項目,但在學習深度學習的時候,不建議大家一開始就上手各種深度學習框架,希望大家能和我們一道,在把基本原理搞清楚之後利用Python自己手動去編寫模型和實現算法細節。為了學習深度學習和各種結構的神經網絡,我們需要從頭開始。感知機作為神經網絡和支持向量機的理論基礎,一定要清楚其中的模型細節。簡單來說,感知機就是一個旨在建立一個線性超平面對線性可分的數據集進行分類的線性模型。其基本結構如圖1所示。圖1從左到右為感知機模型的計算執行方向,模型接受了三個輸入,將輸入與權值參數進行加權求和並經過Sigmoid函數進行激活,將激活結果作為輸出。這便是感知機執行前向計算的基本過程。這樣就行了嗎?當然不行。剛剛我們只解釋了模型,對策略和算法並未解釋。當我們執行完前向計算得到輸出之後,模型需要根據你的輸出和實際的輸出按照損失函數計算當前損失,計算損失函數關於權值和偏置的梯度,然後根據梯度下降法更新權值和偏置,經過不斷的迭代調整權值和偏置使得損失最小,這便是完整的單層感知機的訓練過程。圖2所示是輸入為圖像的感知機計算過程。前面講的是單層感知機,單層感知機包含兩層神經元,即輸入與輸出神經元,可以非常容易地實現邏輯與、邏輯或和邏輯非等線性可分情形,但是單層感知機的學習能力是非常有限的,對於像異或問題這樣的線性不可分情形,單層感知機就搞不定了(所謂線性不可分,即對於輸入訓練數據,不存在一個線性超平面能夠將其進行線性分類)。其學習過程會出現一定程度的振蕩,權值參數難以穩定下來,最終不能求得合適的解,異或問題如圖3 c圖所示。對於線性不可分的情況,在感知機基礎上一般有兩個解決方向,一個是著名的SVM,旨在通過核函數映射來處理非線性的情況,而另一種就是神經網絡模型。這裡的神經網絡模型也叫作多層感知機(Muti-Layer Perception,以下簡稱MLP),與單層的感知機在結構上的區別主要在於MLP多了若干隱藏層,這使得神經網絡能夠處理非線性問題。可以看到,相較於兩層神經元的單層感知機,多層感知機中間多了一個隱藏層。何為隱藏層?就是在神經網絡的訓練過程中我們只能觀察到輸入和輸出層的數據,對於中間的隱藏層的數據變化我們是看不見的,因而在深度神經網絡(Deep Neural Networks,以下簡稱DNN)中,對於中間看不見又難以對其效果進行合理解釋的隱藏層稱之為「黑箱子」。含隱藏層的神經網絡是如何訓練的呢?與感知機一樣,神經網絡的訓練依然包含前向計算和反向傳播兩個主要過程。當然,單層感知機沒有反向傳播這個概念,而是直接建立損失函數對權值和偏置參數進行梯度優化。前向計算簡單來說,就是權值偏置與輸入的線性加權和激活操作,在隱藏層上有個嵌套的過程。這裡我們重點講反向傳播算法(Error Back Propagation,也叫誤差逆傳播),作為神經網絡的訓練算法,反向傳播算法可謂是目前最成功的神經網絡學習算法。我們通常說的BP神經網絡就是指應用反向傳播算法進行訓練的神經網絡模型。那麼,反向傳播算法的工作機制究竟是怎樣的呢?這裡需要大家複習一下在大學課本階段學習的微積分知識。下面以一個兩層(即單隱層)網絡為例,也就是圖5中的網絡結構,給大家詳細推導一下反向傳播的基本過程。假設輸入層為x,輸入層與隱藏層之間的權值和偏置分別為w1和b1,線性加權計算結果為z1=w1x+b1,採用sigmoid激活函數,激活輸出為a1=σ(z1)。而隱藏層到輸出層的權值和偏置分別為w2和b2,線性加權計算結果為z2=w2x+b2,激活輸出為a2=σ(z2)。所以這個兩層網絡的前向計算過程為x-z1-a1-z2-a2。可以看出,反向傳播的直觀理解就是將前向計算過程反過來,但必須是梯度計算的方向反過來,假設我們這裡採用如下的交叉熵損失函數。                                                   反向傳播是基於梯度下降策略的,主要是以目標參數的負梯度方向對參數進行更新,所以基於損失函數對前向計算過程中各個變量進行梯度計算就非常必要了。將前向計算過程反過來,那基於損失函數的梯度計算順序就是da2-dz2-dw2-db2-da1-dw1-db1。我們從輸出a2開始進行反向推導,輸出層激活輸出為a2,那首先計算損失函數L(y,a)關於a2的微分da2,影響a2輸出的是誰呢?由前向傳播可知a2是由z2經激活函數激活計算而來的,所以計算損失函數關於z2的導數dz2必須經由a2進行複合函數求導,即微積分上常說的鏈式求導法則。然後繼續往前推,影響z2的又是哪些變量呢?由前向計算可知影響的有w2、a1和b2,繼續按照鏈式求導法則進行求導即可。最終以交叉熵損失函數為代表的兩層神經網絡的反向傳播向量化求導計算公式如下所示。

注意:鏈式求導法則對複合函數進行求導的一種計算方法,複合函數的導數將是構成複合這有限個函數在相應點的導數的乘積,就像鏈子一樣一環套一環,故稱鏈式法則。在有了梯度計算結果之後,我們便可根據權值更新公式對權值和偏置參數進行更新了,具體計算公式如下,其中為學習率,是個超參數,需要我們在訓練時手動指定,當然也可以對其進行調參以取得最優超參數。                                             

以上便是BP神經網絡模型和算法的基本工作流程,如圖5所示。總結起來就是前向計算得到輸出,反向傳播調整參數,最後以得到損失最小時的參數為最優學習參數。經過近十幾年的發展,神經網絡的結構已經從普通的全連接網絡發展到卷積神經網絡、循環神經網絡、自編碼器、生成式對抗網絡和圖神經網絡等各種各樣的結構,但BP算法一直是神經網絡一個經典和高效的尋優工具。通過本節內容來看,訓練一個BP神經網絡並非難事,我們有足夠優秀的深度學習計算框架,讀者通過幾行代碼就可以搭建起一個全連接網絡。但是,為了掌握神經網絡的基本思維範式和鍛鍊實際的編碼能力,希望讀者朋友們能夠利用Python在不調用任何算法包的情況下根據算法原理手動實現一遍神經網絡模型。

往期精彩:

【原創首發】機器學習公式推導與代碼實現30講.pdf

【原創首發】深度學習語義分割理論與實戰指南.pdf

喜歡您就點個在看!

相關焦點

  • 深度學習和深度神經網絡
    深度學習深度學習是眾多機器學習方法中的一種。主要是通過神經網絡來實現。「深度」是指神經網絡的層數。
  • 通俗理解神經網絡與深度學習
    不管是 DeepMind,還是 OpenAI,他們在訓練人工智慧的時候都用到了深度學習,也就是有很多層的人工神經網絡。想必大部分讀者對「神經網絡」的最初印象都來自於大腦神經,顧名思義,神經網絡必然和腦神經有著千絲萬縷的聯繫。那麼神經網絡為什麼會這麼火呢?我們先來看看神經網絡的發家史。1.
  • 什麼是深度學習? - 45分鐘理解深度神經網絡和深度學習
    為了使學生們能夠更好、更快理解和使用深度神經網絡和深度學習,特撰寫此文。本文的目的是幫助非人工智慧領域的學生(主要是計算機圖形學領域的學生及筆者的學生)來搞懂深度學習(這裡指狹義的深度學習,即基於DNN的深度學習)的基本概念和方法。筆者嘗試用通俗的語言,從函數逼近論的角度來闡釋深度神經網絡的本質。
  • 人工智慧-Andrew Ng版|神經網絡和深度學習|深度學習概述
    專項課程的第一門課是《Neural Networks and Deep Learning 神經網絡與深度學習》。1.1 Welcome這個視頻主要講了什麼是深度學習,深度學習能做些什麼事情。吳恩達老師的從深度學習改變了傳統網際網路業務開始講述,例舉如網絡搜索和廣告。
  • 《神經網絡和深度學習》系列文章四:神經網絡的結構
    本節譯者:哈工大SCIR碩士生 徐偉 (https://github.com/memeda)聲明:我們將在每周一,周四,周日定期連載該書的中文翻譯,如需轉載請聯繫wechat_editors@ir.hit.edu.cn,未經授權不得轉載。
  • 神經網絡和深度學習簡史(全)
    但是,這種災難性的形容的確可以用來描述深度學習在過去幾年中的異軍突起——顯著改善人們對解決人工智慧最難問題方法的駕馭能力,吸引工業巨人(比如谷歌等)的大量投資,研究論文的指數式增長(以及機器學習的研究生生源上升)。在聽了數節機器學習課堂,甚至在本科研究中使用它以後,我不禁好奇:這個新的「深度學習」會不會是一個幻想,抑或上世紀80年代已經研發出來的「人工智慧神經網絡」擴大版?
  • (圖解)類神經網絡的復興:深度學習簡史
    接下來,讓我們來繼續談談類神經網絡是如何再度復甦。2006年,Hinton帶著「深度學習」回歸幕前若是沒有一個關鍵人物,那麼類神經網絡的故事可能也就到此為止了。Hinton教授作為反向傳播算法的發明人之一,即使不被學界重視,30多年來、對於神經網絡研究仍然不離不棄。
  • 深度學習筆記4:深度神經網絡的正則化
    作者:魯偉 一個數據科學踐行者的學習日記。
  • 深度學習背後的基礎-神經網絡揭秘
    最近, 深度學習三傑獲得了計算機界最重要的圖靈獎, 它們的貢獻都集中在對深度學習的根據神經網絡的理論突破。 今天我們看到的所有和人工智慧有關的偉大成就, 從阿法狗到自動駕駛, 從海量人臉識別到對話機器人, 都可以歸功於人工神經網絡的迅速崛起。那麼對於不了解神經網絡的同學如何入門? 神經網絡的技術為什麼偉大, 又是什麼讓它們這麼多年才姍姍走來?
  • 吳恩達深度學習課程:神經網絡和深度學習[中英文字幕+ppt課件]
    此課程廣受好評,通過視頻講解、作業與測驗等讓更多的人對人工智慧有了了解與啟蒙,國外媒體報導稱:吳恩達這次深度學習課程是迄今為止,最全面、系統和容易獲取的深度學習課程,堪稱普通人的人工智慧第一課。第一周  深度學習概論:學習驅動神經網絡興起的主要技術趨勢,了解現今深度學習在哪裡應用、如何應用。
  • 深度學習:神經網絡算法的昨天、今天和明天
    深度學習就是人工神經網絡(Artificial Neural Network)。神經網絡算法得名於其對於動物神經元傳遞信息方式的模擬,而深度學習這一「俗稱」又來自於多層級聯的神經元:眾多的層讓信息的傳遞實現了「深度」。
  • 火爆網絡的《神經網絡與深度學習》,有人把它翻譯成了中文版!
    ,就是《Neural Network and Deep Learning》,中文譯為《神經網絡與深度學習》。這是一本解釋人工神經網絡和深度學習背後核心思想的免費在線書籍。書籍在線地址:http://neuralnetworksanddeeplearning.com/about.html該書的作者是來自 Y Combinator Research 的研究員 Michael Nielsen,他也是⼀位量⼦物理學家、科學作家、計算機編程研究⼈員。
  • 走近深度學習:神經網絡工作原理解析
    神經網絡是一種模仿生物神經網絡的結構和功能的數學模型或計算模型,由大量的人工神經元聯結進行計算。在深度學習時代,基於神經網絡的目標檢測算法也大放異彩。為了能夠幫助大家更好的了解目標檢測領域,猩算法開設「目標檢測」系列文章,精選乾貨文章,持續分享。
  • 【深度學習】神經網絡知識專題總結
    下方的層可能是另一個神經網絡層,也可能是其他類型的層。一個激活函數,對層中每個節點的輸出進行轉換。不同的層可能擁有不同的激活函數。警告:神經網絡不一定始終比特徵組合好,但它確實可以提供適用於很多情形的靈活替代方案。
  • 理解神經網絡:從神經元到RNN、CNN、深度學習
    神經網絡是目前最流行的機器學習算法之一。隨著時間的推移,證明了神經網絡在精度和速度方面,比其他的算法性能更好。並且形成了很多種類,像CNN(卷積神經網絡),RNN,自編碼,深度學習等等。學習權值的算法叫做反向傳播,其中的細節超過了本文的範圍。 具有超過一個隱藏層的神經網絡通常被叫做深度神經網絡。 卷積神經網絡(CNN) 卷積神經網絡(CNN)是神經網絡的一種,在計算機視覺領域應用非常廣泛。
  • 深度學習網絡之RNN(遞歸神經網絡)
    遞歸神經網絡(recursive neural network)是具有樹狀階層結構且網絡節點按其連接順序對輸入信息進行遞歸的人工神經網絡,是深度學習算法之一
  • 資料| 《 神經網絡與深度學習 中文版 PDF 》
    資料 | 《 神經網絡與深度學習 中文版 PDF 》
  • 機器學習算法匯總:人工神經網絡、深度學習及其它
    常見算法有邏輯回歸(Logistic Regression)和反向傳遞神經網絡(Back Propagation Neural Network) 非監督式學習: 人工神經網絡算法模擬生物神經網絡,是一類模式匹配算法。
  • LSTM、GRU與神經圖靈機:詳解深度學習最熱門的循環神經網絡
    選自MachineLearningMastery作者:Jason Brownlee機器之心編譯參與:熊貓循環神經網絡是當前深度學習熱潮中最重要和最核心的技術之一為神經網絡添加狀態的好處是它們將能在序列預測問題中明確地學習和利用背景信息(context),這類問題包括帶有順序或時間組件的問題。在這篇文章中,你將踏上了解用於深度學習的循環神經網絡的旅程。在讀完這篇文章後,你將了解:用於深度學習的頂級循環神經網絡的工作方式,其中包括 LSTM、GRU 和 NTM。
  • 深度學習元老Yann Lecun詳解卷積神經網絡
    卷積神經網絡(Convolutional Neural Network)是一種前饋神經網絡,它的人工神經元可以響應一部分覆蓋範圍內的周圍單元,對於大型圖像處理有出色表現。Yann LeCun出生在法國,曾在多倫多大學跟隨深度學習鼻祖Geoffrey Hinton進行博士後研究。