一篇文章讀懂人工智能、機器學習、深度學習及PyTorch?

PyTorch是Facebook在機器學習和科學計算工具Torch的基礎上,針對Python語言發佈的一個全新的機器學習工具包,一經推出便受到了業界的廣泛關注和討論,目前已經成為機器學習從業人員首選的一款研發工具。

深度學習改變了很多產業,吳恩達(Andrew Ng)曾在他的推特上這樣描述:

Artificial Intelligence is the new electricity!(人工智能猶如新型電力!)

電能的應用曾為無數行業帶來了鉅變,如今人工智能也將帶來同樣的震撼。

人工智能和深度學習雖然經常被當成同義詞使用,但實際上這兩個術語有本質的區別。我們會從專業的角度解釋這兩個術語,作為業內人士的你就可以像區分信號和噪聲一樣區分它們。

本文將講解人工智能的以下內容:

  • 人工智能及其源起;
  • 現實世界中的機器學習;
  • 深度學習的應用;
  • 為何要研究深度學習;
  • 為什麼要學深度學習框架PyTorch。

1.1 人工智能

現今每天都有很多人工智能的文章發表,並且在最近兩年愈演愈烈。網絡上關於人工智能的定義有幾種說法,我最喜歡的一個是,通常由人完成的智能任務的自動化。

1.1.1 人工智能發展史

1956年,約翰·麥肯錫(John McCarthy)主持召開了第一次人工智能的學術會議,並創造了人工智能這個術語。然而早在此之前,關於機器是否會思考的討論就已經開始。人工智能發展初期,機器已經可以解決對於人類比較困難的問題。

例如,德國製造了在第二次世界大戰後期用於軍事通信的恩尼格瑪密碼機(Enigma machine)。阿蘭·圖靈(Alan Turing)則構建了一個用於破解恩尼格瑪密碼機的人工智能系統。人類破譯恩尼格瑪密碼是一個非常有挑戰性的任務,並往往會花費分析員數週的時間。而人工智能機器幾個小時就可以完成破譯。

計算機解決一些對人類很直接的問題,卻一度非常艱難。如區分貓和狗,朋友對你參加聚會遲到是否生氣(情緒),區分汽車和卡車,為研討會寫紀要(語音識別),或為你的外國朋友將筆記轉換成對方的語言(例如,從法語轉成英語)。這些任務中的大多數對於我們都很直接,但過去我們卻無法通過給計算機硬編碼一個程序來解決這類問題。早期計算機人工智能的實現都是硬編碼的,如可以下棋的計算機程序。

人工智能發展初期,許多研究人員相信,人工智能可以通過對規則硬編碼來實現。這類人工智能稱為符號人工智能(symbolic AI),它適於解決明確的邏輯性問題,然而對於那些複雜的問題,如圖像識別、對象檢測、語言翻譯和自然語言的理解等任務,它卻幾乎無能為力。人工智能的新方法,如機器學習和深度學習,正是用於解決這類問題的。

為更好理解人工智能、機器學習和深度學習的關係,我們畫幾個同心的圓圈,人工智能位於最外層,人工智能最早出現,範疇最大,然後向內是機器學習,最後是驅動今天人工智能迅速發展的深度學習,它位於另兩個圓圈內部,如圖1.1所示。


一篇文章讀懂人工智能、機器學習、深度學習及PyTorch?


圖1.1 人工智能、機器學習和深度學習的關係

1.2 機器學習

機器學習是人工智能的一個子領域,它在過去10年變得非常流行,這兩個詞有時會交換使用。除機器學習外,人工智能還包括很多其他的子領域。與通過對規則進行硬編碼的符號人工智能不同,機器學習系統通過展示大量實例來構造。從更高層面上說,機器學習系統通過檢視大量數據得出可以預測未見數據結果的規則,如圖1.2所示。


一篇文章讀懂人工智能、機器學習、深度學習及PyTorch?


圖1.2 機器學習對比傳統編程

大多數機器學習算法在結構化數據上運行良好,如銷售預測、推薦系統和個性化營銷等。所有機器學習算法中都涉及的一個重要方面是特徵工程,數據科學家花費大量時間來獲取機器學習算法運行的正確特徵。在某些領域,如計算機視覺(Computer Vision)和自然語言處理(Natural Language Processing,NLP),因為具有較高維度,特徵工程非常具有挑戰性。

直到現在,由於諸如特徵工程和高維度方面的原因,對於使用經典機器學習技術(如線性迴歸、隨機森林等)來解決這類問題的機構都非常具有挑戰性。考慮一張大小為224×224×3(高×寬×通道)的圖片,其中3表示彩色圖片中紅、綠、藍色彩通道的個數。為了在計算機內存中存儲這張圖片,對應的矩陣要包含150,528個維度。假設要基於1000張224×224×3大小的圖片構建分類器,維度就會變成1000個150,528大小。機器學習中一個被稱為深度學習的特別分支,讓我們得以藉助現代技術和硬件解決這些問題。

1.2.1 機器學習實例

下面是使用機器學習技術實現的出色應用。

  • 例1:Google Photos使用了機器學習中的一類深度學習照片分組(deep learning for grouping photos)技術。
  • 例2:推薦系統,這是一類可用於推薦電影、音樂和產品的機器學習算法,很多大公司,如Netflix、Amazon和iTunes都在使用。

1.3 深度學習

傳統機器學習算法使用手寫的特徵提取代碼來訓練算法,而深度學習算法使用現代技術自動提取這些特徵。

例如,一個用於預測圖像是否包含人臉的深度學習算法將在第一層檢查邊緣,第二層檢測鼻子和眼睛等形狀,最後一層檢測面部形狀或者更復雜的結構(見圖1.3)。每一層都基於前一層的數據表示進行訓練。如果大家覺得上面的解釋理解起來有些困難,請不要擔心,本書的後續章節會更直觀地構造和詳細解釋這樣的網絡。


一篇文章讀懂人工智能、機器學習、深度學習及PyTorch?


圖1.3 中間層的可視化輸出

得益於GPU、大數據、雲提供商如 Amazon Web Services(AWS)和Google Cloud,以及Torch、TensorFlow、Caffe和PyTorch這些框架的出現,深度學習的應用在過去幾年出現了巨大的增長。除此之外,一些大型公司還分享了已在龐大的數據集上訓練好的算法,因而使得後來者可以經過很少的改動就能夠以幾種用例為基礎構建最先進的系統。

1.3.1 深度學習的應用

深度學習一些流行的應用如下:

  • 接近人類水平的圖像分類;
  • 接近人類水平的語音識別;
  • 機器翻譯;
  • 自動駕駛汽車;
  • Siri、Google語音和Alexa在最近幾年更加準確;
  • 日本農民的黃瓜智能分揀;
  • 肺癌檢測;
  • 準確度高於人類的語言翻譯。

圖1.4所示為一個用於總結段落大意的簡例,計算機讀入一大段文本,並用幾行總結出中心語義。


一篇文章讀懂人工智能、機器學習、深度學習及PyTorch?


圖1.4 計算機生成的本文摘要

接下來,我們把圖1.5作為普通的圖片輸入給計算機,並不告知計算機圖像中展示的是什麼。藉助對象檢測技術和詞典的幫助,我們得到的圖像描述是:兩個小女孩正在玩樂高玩具。計算機太聰明瞭,不是嗎?


一篇文章讀懂人工智能、機器學習、深度學習及PyTorch?


圖1.5 對象檢測和圖像標註

1.3.2 深度學習的浮誇宣傳

媒體人士和人工智能領域外的人士,以及那些並非真正的人工智能和深度學習參與者,一直暗示說,隨著人工智能和深度學習的進步,電影Terminator 2: Judgement Day中的場景會成為現實。有些甚至在談論人類終將被機器人控制的時代,那時機器人將決定什麼對人類有益。目前而言,人工智能的能力被過分誇大了。現階段,大多數深度學習系統都部署在一個非常受控的環境中,並給出了有限的決策邊界。

我的想法是,當這些系統能夠學會做出智能決策,而非僅僅完成模式匹配,當數以千百計的深度學習算法可以協同工作,那時也許我們有希望見到類似科幻電影中一樣表現的機器人。事實上,我們尚不能實現通用的人工智能,即機器可以在沒有指示的情況下做任何事。現在的深度學習大多是關於如何尋找現有數據的模式並預測未來結果。作為深度學習業者,我們應該像區別信號和噪聲一樣區分這些不實說法。

1.3.3 深度學習發展史

儘管深度學習在最近幾年才開始廣為流行,但其背後的理論早在20世紀50年代就開始形成了。表1.1給出了現今深度學習應用中最受歡迎的技術和出現的大概的時間點。

深度學習這個術語過去有幾種不同的叫法。20世紀70年代我們稱之為控制論(cybernetics),20世紀80年代稱之為聯結主義(connectionism),而現在稱之為深度學習或神經網絡。我們將交替使用深度學習和神經網絡這兩個術語。神經網絡通常指的是那些受人腦運作啟發的算法。然而,作為深度學習的從業者,我們應明白神經網絡主要是由強大的數學理論(線性代數和微積分)、統計學(概率)和軟件工程激勵和支持的。

表1.1

技術年份

神經網絡 1943

反向傳播 20世紀60年代初期

卷積神經網絡 1979

循環神經網絡 1980

長短期記憶網絡 1997

1.3.4 為何是現在

為何現在深度學習這麼流行?一些關鍵原因如下:

  • 硬件可用性;
  • 數據和算法;
  • 深度學習框架。

1.3.5 硬件可用性

深度學習要在數百萬甚至數十億的參數上進行復雜的數學運算。儘管過去這些年有所提高,但僅依靠現在的CPU執行這些運算極其耗時。一種叫作圖形處理單元(Graphics Processing Unit,GPU)的新型硬件在完成這些大規模的數學運算(如矩陣乘法)時可以高出幾個數量級。

GPU最初是Nvidia和AMD公司為遊戲產業而開發的。事實證明這種硬件極其高效。Nvidia最近的一款產品1080ti,僅用了幾天時間就構建了一個基於ImageNet數據集的圖像分類系統,而此前這需要大概1個月的時間。

如果打算購買用於深度學習的硬件,建議用戶根據預算選擇一款Nvidia的內存較大的GPU。記住,計算機內存和GPU內存並不相同,1080ti帶有大約11GB的內存,它的價格在700美元左右。

你也可以使用各種雲服務,如AWS、Google Cloud或Floyd(這家公司提供專為深度學習優化的GPU機器)。如果剛開始深度學習,或在財務受限的情況下為公司的應用配置機器時,使用雲服務就很經濟。

優化後的系統性能可能有較大提升。

圖1.6所示為不同CPU和GPU的性能基準的對比。


一篇文章讀懂人工智能、機器學習、深度學習及PyTorch?


圖1.6 基於不同CPU和GPU的神經網絡架構的性能基準

1.3.6 數據和算法

數據是完成深度學習最重要的組成部分,由於互聯網的普及和智能手機應用的增長,一些大公司,如Facebook和Google,可以收集到大量不同格式的數據,特別是文本、圖片、視頻和音頻這類數據。在計算機視覺領域,ImageNet競賽在提供1,000種類別中的140萬張圖片的數據集方面發揮了巨大作用。

這些圖像類別是手工標註的,每年都有數百個團隊參與競賽。過去比賽中一些成功的算法有VGG、ResNet、Inception、DenseNet等。現在這些算法已在行業中得到應用,用於解決各種計算機視覺問題。深度學習領域還有其他一些流行的數據集,這些數據集常被用於建立不同算法的性能基準:

  • MNIST;
  • COCO數據集;
  • CIFAR;
  • The Street View House Numbers;
  • PASCAL VOC;
  • Wikipedia dump;
  • 20 Newsgroups;
  • Penn Treebank;
  • Kaggle。

各種不同算法的發展,如批規一化、激活函數、跳躍式連接(skip connection)、長短期記憶網絡(LSTM)、dropout等,使得最近幾年可以更快並更成功地訓練極深度網絡。本書接下來的章節中,我們將深入每種技術的細節,以及如何使用這些技術構建更好的模型。

1.3.7 深度學習框架

在早期,人們需要具備C++和CUDA的專業知識來實現深度學習算法。現在隨著很多公司將它們的深度學習框架開源,使得那些具有腳本語言知識(如Python)的人,也可以開始構建和使用深度學習算法。今天,這個行業中流行的深度學習框架有TensorFlow、Caffe2、Keras、Theano、PyTorch、Chainer、DyNet、MXNet和CNTK。

如果沒有這些框架,深度學習的應用也不會如此廣泛。它們抽象出許多底層的複雜度,讓我們可以專注於應用。我們尚處於深度學習的早期階段,很多組織機構都在對深度學習進行大量研究,幾乎每天都有突破性的成果,因而,各種框架也都各有利弊。

PyTorch

PyTorch以及其他大多數深度學習框架,主要用於兩個方面:

  • 用GPU加速過的運算替代與NumPy類似的運算;
  • 構建深度神經網絡。

讓PyTorch越來越受歡迎的是它的易用性和簡單性。不同於其他大多數流行的使用靜態計算圖的深度學習框架,PyTorch使用動態計算,因此在構建複雜架構時可以有更高的靈活性。

PyTorch大量使用了Python概念,例如類、結構和條件循環,允許用戶以純面向對象的方式構建深度學習算法。大部分的其他流行框架引進了自己的編程風格,有時編寫新算法會很複雜,甚至不支持直觀的調試。後續章節將詳細討論計算圖。

儘管PyTorch新近才發佈並且還處於β版本,由於它的簡單易用和出色的性能、易於調試性,以及來自不同公司如SalesForce等的強大支持,PyTorch受到了數據科學家和深度學習研究人員的巨大歡迎。

由於PyTorch最初主要為研究目的而構建,因此不建議用於那些對延遲要求非常高的生產環境。然而,隨著名為Open Neural Network Exchange(ONNX)的新項目的出現,這種情況正在發生改變,該項目的重點是將在PyTorch上開發的模型部署到適用於生產的Caffe2這樣的平臺上。在本書寫作時,這個項目剛剛啟動,因而過多的定論還為時尚早。該項目了得到Facebook和微軟的支持。

在本書的其餘部分,我們將學習用於構建計算機視覺和自然語言處理領域的強大深度學習應用的各種模塊(較小的概念或技術)。

EDN

本文摘自《PyTorch深度學習

喜歡的朋友請轉發到朋友圈

相關推薦

推薦中...