1. 程式人生 > >寫給人類的機器學習 四、神經網路和深度學習

寫給人類的機器學習 四、神經網路和深度學習

四、神經網路和深度學習

使用深度學習,我們仍然是習得一個函式f,將輸入X對映為輸出Y,並使測試資料上的損失最小,就像我們之前那樣。回憶一下,在 2.1 節監督學習中,我們的初始“問題陳述”:

Y = f(X) + ϵ

訓練:機器從帶標籤的訓練資料習得f

測試:機器從不帶標籤的測試資料預測Y

真實世界很亂,所以有時f很複雜。在自然語言問題中,較大的詞彙數量意味著大量特徵。視覺問題設計大量的畫素相關的視覺資訊。玩遊戲需要基於複雜場景做決策,也帶有許多可能的未知。當我們處理的資料不是很複雜時,我們目前涉及的學習機制做的很好。但是,它們如何推廣到像這樣的場景,還不清楚。

深度學習非常善於習得f,特別是在資料很複雜的場景中。實際上,人工神經網路也被成為通用函式近似器,因為它們能夠學習任何函式,無論多麼扭曲,都只需要一個隱藏層。

讓我們看看影象分類的問題。我們選取一張圖片作為輸入,並輸出一個分類(例如狗、貓、車)。

通過圖解,深度神經網路的影象分類解決方式,類似於這樣:

圖片來自 Jeff Clune 在 YouTube 上的一小時深度學習概覽

但是說真的,這是個巨大的數學方程,有數百萬個項和大量引數。假設輸入X是灰度影象,由w*h的畫素亮度矩陣表示。輸出Y是每個分類的概率的向量。也就是說,我們輸出“每個分類是正確標籤”的概率。如果這個神經網路能用的話,最高的概率就是正確的分類。然後,中間的層僅僅計算大量的矩陣相同,通過在每個隱藏層之後,使用非線性變換(啟用函式),對啟用值x

的權重求和,來讓神經網路習得非線性函式。

難以置信的是,你可以使用梯度下降,以 2.1 節中我們對線性迴歸所做的相同方式,使損失最小。所以使用大量樣本和大量梯度下降,模型可以習得如何正確分類動物圖片。這個,簡單來說,就是“深度學習”。

深度學習做得好的地方,以及一些歷史

人工神經網路實際上有很長時間了。它們的應用可追溯到控制論(cybernetics,1940s~1960s),連線機制(connectionism,1980s~1990s),之後變成了流行的深度學習。大約在 2006 年,神經網路開始變得“更深”(Goodfellow 等,2016)。但是最近我們才開始觸及它們的全部潛能。

就像 Andrej Karpathy(特斯拉的 AI 總監,它被認為是深度學習的 Shaman)描述的那樣,有四個“將 AI 帶回來”的不同因素:

  • 計算(最明顯的一個:摩爾定律,GPU,ASIC)
  • 資料(以不錯的形式,並不在網際網路上某處,也就是 ImageNet)
  • 演算法(研究和理念,也就是 backprop, CNN, LSTM),以及
  • 基礎設施(你下面的軟體,Linux, TCP/IP, Git, ROS, PR2, AWS, AMT, TensorFlow, 以及其它)(Karpathy, 2016)。

在過去的十年當中,深度學習的全部潛能,最紅被(1)和(2)的進步解鎖,它反過來產生了(3)和(4)的突破。並且這個迴圈仍在繼續,成倍的人們不斷參與到深度學習研究的前線中,沿著這條路(想想你現在做的事情)。

由 NVIDIA 演示,它是一家核彈 GPU 領導廠商。GPU 最開始為遊戲構建,但是最終很好地順應了深度學習所需的平行計算。

在這一章的剩餘部分中,我們提供一些來自生物和統計的被寂靜,來解釋神經網路裡面發生額了什麼,之後討論深度學習的一些神奇應用。最後,我們連結到一些資源,所以你可以自行應用深度學習,甚至穿著睡衣坐在沙發上,拿著筆記本,在特定種類的問題上快速實現超越人類級別的表現。

從大腦中(或者只是統計?)獲取靈感:神經網路中發生了什麼

神經元、特徵學習和抽象層次

當你閱讀這些詞彙的時候,你並沒有檢查每個詞的每個字,或者組成字的每個畫素,來獲得單詞的含義。你從細節中將東西抽象、組裝成高階的概念:詞、短語、句子、段落。

Yuor abiilty to exaimne hgiher-lveel fteaures is waht aollws yuo to unedrtsand waht is hpapening in tihs snetecne wthiout too mcuh troulbe (or myabe yuo sned too mnay dnruk txets).

(你檢測高階特徵的能力,讓你理解句子中發生的東西,而不會太麻煩(或者可能你傳送了大量的亂序文字)。

視覺上發生的事情相同,這並不僅僅在人類,也在動物的視覺系統中。

大腦由神經元組成,它們在足夠“啟用”之後,通過向其他神經元傳送電訊號來“觸發”。這些神經元都是可塑的,根據有多少來自神經元的訊號新增到當前神經元的啟用水平上(大概來說,將神經元彼此連線的權重最後會被訓練,使神經連線更加有用,就像線性迴歸中的引數可以被訓練,來改進輸入到輸出的對映)。

生物和人工神經網路的端到端的演示,來自斯坦福 CS231n。這個比喻不是很嚴謹,生物神經元可以做人工神經元不能做的事,反之亦然。但是理解生物中的靈感十分有用。更多細節請見生物和人工神經元的維基百科的描述

我們的生物網路以層次方式排列,以便特定神經元最終檢測我們周圍的世界的,不是極其特定的特徵,而是更加抽象的特徵,也就是,更低階的特徵的規律或者分組。例如,人類視覺系統中的紡錘狀臉部區域可特別用於人臉識別。

持續學習抽象特徵的演示,來自 NVIDIA。

人工神經網路如何選取原始畫素輸入,開發中介“神經元”來檢測高階特徵(也就是鼻子的存在),以及組合它們的輸出來建立最終輸出。來自《神經網路和深度學習》(Nielsen, 2017)。

生物神經網路表現出的層次結構最早於 1950s 發現,當研究員 David Hubel 和 Torsten Wiesel 研究貓的視覺皮層中的神經元的時候。在給貓大量刺激之後,它們不能觀察到神經活動:暗點、亮點、揮手、甚至是雜誌上的女性照片。但是在它們的失望中,它們從投影儀中移除了對角線處的照片,它們注意到了一些神經活動。結果是,位於某個特定角度的,對角線上的邊能夠導致特定的神經元被啟用。

這樣就逐漸有意義了,因為自然環境通常是嘈雜和隨機的(想想草原和荒野)。所以當野外的貓感知到一條“邊”的時候,也就是一條不同於背景的線,這可能表明,一個物體或者生物進入了視野範圍。當邊緣的神經元的特定組合被啟用時,這些活動會集體產生更加抽象的活動,以此類推,直到最終的抽象是個有用的概念,比如“鳥”或者“狼”。

深度神經網路背後的概念就是,使用人工神經網路的層次來模擬類似的結構。

為什麼線性模型不能用

為了提煉斯坦福的優秀的深度學習課程,CS231n:卷積神經網路和視覺識別,想象我們打算訓練一個神經網路,使用下列標籤的正確的那個來分類影象:["plane", "car", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck"]

一種方式可能是,使用訓練樣本為每個分類構造一個“模板”,或者平均影象,之後使用最近鄰演算法,在測試期間來度量每個未分類影象的畫素值,到每個模板的距離。總的來說是這樣。這個方法不涉及任何抽象層次。這是個線性模型,將每個影象型別的所有不同的方向組合為一個平均的影子。

例如,它可以選取所有的車,無論它們面向左邊、右邊、中間,也無論它們的顏色,只是將它們平均。模板最終看起來非常模糊。

要注意,上面的馬的模板出現了兩個頭。這對我們並沒什麼幫助:我們想要能夠分別檢測頭朝右邊或者頭朝左邊的馬,並且如果這些特徵的任何一個被檢測到了,我們就說我們看到了一匹馬。深度神經網路提供給我們這種靈活性,我們會在下一節中看到。

深度神經網路使用抽象層來解決影象分類問題。

為了重複我們在這一節之前解釋的東西:輸入層接受影象的原始畫素亮度。最終的層級會是類概率的輸出向量(也就是影象是貓、車子、馬,以及其他的概率)。

但是我們不習得一個簡單的,和輸入輸出相關的線性模型。我們構造網路中間的隱藏層,它們會漸進學習抽象特徵,這讓我們不會丟失複雜資料中的所有細微差異。

就像我們描述的動物大腦檢測抽象特徵,隱藏層中的人工神經元會學著檢測抽象概念,無論哪個概念,只要它對於捕捉最多資訊,以及使網路輸出的準確度中的損失最小非常實用(這是個發生在網路中的,無監督學習的例項)。

這損失了模型的可解釋性,因為當你新增更多隱藏層時,神經元開始表示越來越多的抽象和無法理解的特徵。在這個層面上,你可能聽說,深度學習也被稱作“黑箱優化”,其中你基本上只是隨機嘗試一些東西,然後觀察出現了什麼,而無需真正理解裡面發生了什麼。

線性迴歸是可解釋的,因為你決定了模型中包含哪個特徵。深度神經網路難以解釋,因為習得的特徵在任何地方都不能用自然語言解釋。它完全在機器的想象中。

一些值得注意的擴充套件和深層概念

  • 深度學習軟體包。你很少需要從零開始實現神經網路的所有部分,因為現有的庫和工具使深度學習更加易於實現。有許多這類東西:TensorFlow, Caffe, Torch, Keras, 以及其它。

  • 卷積神經網路(CNN)。CNN 特地為接受影象輸入而設計,並且對於計算機視覺任務非常高效。它們也有助於深度增強/強化學習。CNN 的靈感特別來源於動物的視覺皮層的工作方式,並且它們是深度學習課程的熱點。我們已經在文章中引用它了,就是斯坦福 CS231n。

  • 迴圈神經網路(RNN)。RNN 擁有內建記憶的概念,並且非常適合語言問題。它們在強化學習中也很重要,因為它們讓智慧體能夠跟蹤東西在哪裡,以及之前發生了什麼,甚至在那些東西不能一次性看到的時候。Christopher Olah 編寫了一個非常棒的,在語言問題的語境中的, RNN 和 LSTM 的參考文獻

  • 深度增強/強化學習。這是深度學習研究中的最刺激的領域之一,處在近期研究的核心位置,例如 OpenAI 擊敗了 Dota2 職業玩家,以及 DeepMind 的 AlphaGo 在圍棋競技中勝過人類。我們在第五章會深度,但是本質上的目標是將這篇文章中的所有技術,應用於一個問題,教會智慧體使回報最大。這可以用於與任何可以遊戲化的環境,從真實的遊戲,例如反恐精英或者吃豆人,到無人駕駛的汽車,或者股票交易,最終到真實生活和真實世界。

深度學習應用

深度學習正在重構世界的幾乎每個領域。這裡是深度學習可以做的無法置信的事情的示例:

  • Fackbook 訓練了一個神經網路,由短時記憶加持,來智慧地回答《指環王》情節中的問題。

    來自 FAIR(Facebook AI 實驗室)的研究,將加持了分離的短時記憶的深度神經網路,應用於回答 LOTR 情節的問題。這是史詩級的定義。

  • 無人駕駛的汽車依賴深度學習,用於解決視覺任務,例如理解路面標誌,檢測道路和識別障礙。

  • 深度學習可以用於有趣的東西,例如藝術生成。一個叫做 Neural Style(神經風格)的工具可以模擬藝術家的風格,並且用它來重新組合另一幅圖片,令人難以置信。

其它值得注意的示例包括:

  • 預測藥物發現中的分子的生物活性。

  • 用於照片和視訊標註的人臉識別。

  • 增強谷歌搜尋的結果。

  • 自然語言理解和生成,也就是谷歌翻譯

  • 火星探索者機器人“好奇號”,基於視覺檢測,自動選取值得檢查的土壤目標。

…以及很多,非常多,太多了。

現在開始去做吧!

對於神經網路如何實際建立,我們這裡沒有涉及太多細節。因為你通過自己實現,更易於理解細節。這裡是一些非常棒的實踐資源,用於起步。

  • 使用這篇谷歌的教程快速準備好並起步:TensorFlow 和深度學習。以超過 99% 的準確度分類手寫數字,你不需要是 PhD,只需要在三個小時內,熟悉 TensorFlow 以及學習深度學習概念。

  • 之後,瀏覽斯坦福 CS231n 的至少前幾篇講義,以及第一個作業,從零開始構建雙層的神經網路,來實際強化這篇文章中涉及的概念。

更多資源

深度學習是個非常廣闊的領域。因此,我們也編譯了一些最佳資源,我們在這個話題中遇到過它們,以便你打算深入瞭解。

下一章:到了玩遊戲的時候了!

最後是第五章:強化/增強學習。

相關推薦

人類機器學習 神經網路深度學習

四、神經網路和深度學習 使用深度學習,我們仍然是習得一個函式f,將輸入X對映為輸出Y,並使測試資料上的損失最小,就像我們之前那樣。回憶一下,在 2.1 節監督學習中,我們的初始“問題陳述”: Y = f(X) + ϵ 訓練:機器從帶標籤的

人工智慧機器學習神經網路深度學習的關係

最近很長的一段時間,人工智慧的熱度都維持在一定的高度。但是大家在關注或研究人工智慧領域的時候,總是會遇到這樣的幾個關鍵詞:深度學習、機器學習、神經網路。那他們之間到底是什麼樣的關係呢? 先說人工智慧,人工智慧是在1956年一個叫達特茅斯會議上提出的。更準確的說是1956年學者們在會議上將他們確定

深度學習筆記()——神經網路深度學習(淺層神經網路

1.神經網路概覽 神經網路的結構與邏輯迴歸類似,只是神經網路的層數比邏輯迴歸多一層,多出來的中間那層稱為隱藏層或中間層。從計算上來說,神經網路的正向傳播和反向傳播過程只是比邏輯迴歸多了一次重複的計算。正向傳播過程分成兩層,第一層是輸入層到隱藏層,用上標[1]來表示;第二層是隱藏層到輸出層,用上標

人工智慧機器學習神經網路深度學習關係

前段時間看了不少關於人工智慧方面的書籍部落格和論壇,深深覺得了人工智慧是個大坑,裡面有太多的知識點和學科,要想深入絕非易事,於是萌發了自己寫一些部落格把自己的學習歷程和一些知識點筆記都記錄下來的想法,給自己一個總結收穫,同時監督自己的動力,這樣咱也算是“有監督學習”了:) 這裡提到了“有監督學習

[Python人工智慧] .神經網路深度學習入門知識

從本篇文章開始,作者正式開始研究Python深度學習、神經網路及人工智慧相關知識。前三篇文章講解了神經網路基礎概念、Theano庫的安裝過程及基礎用法、theano實現迴歸神經網路、theano實現分類神經網路,這篇文章又回到基礎知識,結合莫煩大神的視訊學習,講解機器學習基礎

神經網路深度學習-開發案例】第神經網路如何對數字進行分類

【神經網路和深度學習】 第四章 神經網路如何對數字進行分類 案例:使用神經網路識別手寫數字 好了,讓我們來寫一個程式,學習如何識別手寫的數字,使用隨機梯度下降和MNIST的訓練資料。我們將用一個簡短的Python(2.7)程式來完成這項工作,只

吳恩達第一門-神經網路深度學習第二週6-10學習筆記

神經網路和深度學習第二週6-10學習筆記 6.更多導數的例子 在本節中,為上一節的導數學習提供更多的例子。在上一節中,我們複習了線性函式的求導方法,其導數值在各點中是相等的。本節以y=a^2這一二次函式為例,介紹了導數值在各點處發生變化時的求導方法。求導大家都會,y=x ^3的導數是

神經網路深度學習基本原理

這是看到的一篇對神經網路的講解的文章,我覺得寫得很好,也仔細學習了學習,最近我可能也得用這個東西,現在確實是很火啊,也很實用。   神經網路和深度學習 神經網路:一種可以通過觀測資料使計算機學習的仿生語言範例 深度學習:一組強大的神經網路學習技術  

吳恩達第一門-神經網路深度學習第三週6-10學習筆記

吳恩達第一門-神經網路和深度學習第三週6-10學習筆記 3.6啟用函式 啟用函式 圖中給出了前面課程中所學到的利用神經網路計算輸出值的具體步驟。其中的 σ

01神經網路深度學習-Deep Neural Network for Image Classification: Application-第四周程式設計作業2

一、兩層神經網路 模型:LINEAR->RELU->LINEAR->SIGMOID #coding=utf-8 import time import numpy as np import h5py import matplotlib.pyplot as

Andrew Ng——神經網路深度學習——第二週筆記

Week2 2-1二分分類 計算機如何儲存一張圖片? 計算機要儲存一張圖片,實質上是要儲存三個矩陣,這三個矩陣分別對應RGB(red,green,blue)三個顏色的通道。例如輸入的圖片是64×64畫素的,那麼每一個矩陣的的大小就是64×64的,所以計算機就儲存了3個6

Lesson1:神經網路深度學習

能夠使神經網路執行速度加快的幾個Python技巧 vectorization:避免在神經網路中使用for迴圈 broadcast:避免在神經網路中使用for迴圈 申明變數時,將變數初始化為(m,n)的形式,而不是(m,)形式 import numpy a

神經網路深度學習(三)—— 反向傳播工作原理

本文轉自:https://blog.csdn.net/qq_31192383/article/details/77198870 反向傳播演算法工作原理 在上一篇文章,我們看到了神經網路如何通過梯度下降演算法學習,從而改變權重和偏差。但是,前面我們並沒有討論如何計算代價函

神經網路深度學習-學習總結

     粗略地說,交叉熵是“不確定性”的一種度量。特別地,我們的神經元想要計算函式x-> y = y(x)。但是,它用函式x->a = a(x) 進行了替換。假設我們將a 想象成我們神經元估計為y = 1 的概率,而1-a 則是y = 0 的概率。那麼交叉熵衡量我們學習到y的正確值的平均起來的不

Coursera-吳恩達-深度學習-神經網路深度學習-week1-測驗

本文章內容: Coursera吳恩達深度學習課程,第一課神經網路和深度學習Neural Networks and Deep Learning, 第一週:深度學習引言(Introduction to Deep Learning) 部分的測驗,題目及答案截圖。 正確:ABC

吳恩達Coursera深度學習課程筆記(1-1)神經網路深度學習-深度學習概論

這系列文章是我在學習吳恩達教授深度學習課程時為了加深自己理解,同時方便後來對內容進行回顧而做的筆記,其中難免有錯誤的理解和不太好的表述方式,歡迎各位大佬指正並提供建議。1、什麼是神經網路               在簡單的從房屋面積預測價格時,神經網路可以理解為將輸入的房屋

神經網路深度學習】筆記

文章導讀: 1.交叉熵損失函式   1.1 交叉熵損失函式介紹   1.2 在MNIST數字分類上使用交叉熵損失函式   1.3 交叉熵的意義以及來歷   1.4 Softmax 2. 過擬合和正則化   2.1 過擬合   2.2 正則化   2.3 為什麼正則化可以減輕

Deeplearning.ai學習筆記-神經網路深度學習(二)

前言 這次學習的主題是深度學習,學習的第一門課程就是吳恩達的Deeplearning.ai專案課程。此係列筆記也是根據該深度學習課程整理而成。 該系列筆記是該課程中重點知識的羅列和自己的一些理解,可供正在學習此課程的同學作為參考,也是方便自己日

神經網路深度學習》之神經網路基礎(第三週)課後作業——一個隱藏層的平面資料分類

由於沒有找到課後練習,所有練習文章均參考點選開啟連結,我已經將所有程式碼都實現過一遍了,沒有錯誤,感謝博主歡迎來到第三週的課程,在這一週的任務裡,你將建立一個只有一個隱含層的神經網路。相比於之前你實現的邏輯迴歸有很大的不同。你將會學習一下內容:用一個隱含層的神經網路實現一個二

吳恩達 神經網路深度學習 第4周程式設計作業

由於csdn的markdown編輯器及其難用,已將本文轉移至此處NoteThese are my personal programming assignments at the 4th week after studying the course neural-network