關於人工智慧深度學習的那些事兒
2016年,AlphaGo 擊敗韓國圍棋冠軍李世石,在媒體報導中,曾多次提及“深度學習”這個概念。而新版本的AlphaGoZero,更充分地運用了深度學習法,不再從人類棋手的以往棋譜記錄中開始訓練,而是完全靠自己的學習演算法,透過自我對弈來學會下棋。經過一段時間的自我學習,它就擊敗了曾打敗李世石的以及曾完勝柯潔的AlphaGo版本。
由此可見,機器的確開始具有了某種學習能力。它在訓練中得到的不再只是規則、物件資訊,而是還能獲得物件出現的可能條件。換言之,它已經能夠開始“感受”和捕捉可能性,而不只是現成之物了。這種學習就是一個非線性的、機率的、反饋調整的和逐層逐時地深化和構成的準發生過程。這是一個具有某種真實時間歷程的習得過程。
什麼是深度學習?
深度學習是機器學習的一種形式,所採用的神經網路在輸入節點和輸出節點之間具有許多“深度”層。透過基於大資料集訓練網路,建立的模型可用於根據輸入資料進行精確預測。在用於深度學習的神經網路中,每一層的輸出會前饋到下一層的輸入。透過更改各層之間連線的加權,反覆最佳化模型。在每一個週期,對模型預測準確度的反饋將用於指導連線加權的更改。
輸入和輸出之間含有“深度”隱藏層的神經網路:
相對輸入加權的更改:
人工智慧、機器學習與深度學習
如上圖,最早出現的人工智慧位於同心圓最外側;其次是隨後發展起來的機器學習,位於中間;最後是推動人工智慧突飛猛進發展的深度學習,位於最內側。
自上個世紀50年代的人工智慧熱以來,基於人工智慧概念的機器學習和深度學習又掀起一陣前所未有的新浪潮。
1956年,幾個電腦科學家在達特茅斯會議上首次提出了“人工智慧”的概念。此後,人工智慧就一直縈繞於人們的腦海之中,並在科研實驗室中蓄勢待發。之後的幾十年,人工智慧一直在兩極反轉,有人稱其為開啟人類文明輝煌未來的鑰匙,也有人將其當成科技瘋子的狂想扔到技術垃圾堆裡。其實2012年之前,這兩種觀點一直不相上下。
過去幾年,尤其是2015年以來,人工智慧突飛猛進地發展。這主要歸功於圖形處理器(GPU)的廣泛應用,使得平行計算變得更快、更便宜、更有效。當然,無限擴充的儲存能力和驟然爆發的資料洪流(大資料)的組合拳,也使得影像資料、文字資料、交易資料、對映資料全面海量爆發。
機器學習——實現人工智慧的方法
機器學習最基本的做法,是使用演算法來解析資料、從中學習,然後對真實世界中的事件做出決策和預測。與傳統的為解決特定任務、硬編碼的軟體程式不同,機器學習是用大量的資料來“訓練”,透過各種演算法從資料中學習如何完成任務。
機器學習直接來源於早期的人工智慧領域。傳統演算法包括決策樹學習、推導邏輯規劃、聚類、強化學習和貝葉斯網路等等。眾所周知,我們還沒有實現強人工智慧。早期機器學習方法甚至都無法實現弱人工智慧。
機器學習最成功的應用領域是計算機視覺,雖然也還是需要大量的手工編碼來完成工作。人們需要手工編寫分類器、邊緣檢測濾波器,以便讓程式能識別物體從哪裡開始,到哪裡結束;寫形狀檢測程式來判斷檢測物件是不是有八條邊;寫分類器來識別字母“ST-O-P”。使用以上這些手工編寫的分類器,人們總算可以開發演算法來感知影像,判斷影像是不是一個停止標誌牌。
深度學習——實現機器學習的技術
人工神經網路是早期機器學習中的一個重要的演算法。神經網路的原理是受我們大腦的生理結構——互相交叉相連的神經元啟發。但與大腦中一個神經元可以連線一定距離內的任意神經元不同,人工神經網路具有離散的層、連線和資料傳播的方向。
例如,我們可以把一幅影像切分成影像塊,輸入到神經網路的第一層。在第一層的每一個神經元都把資料傳遞到第二層。第二層的神經元也是完成類似的工作,把資料傳遞到第三層,以此類推,直到最後一層,然後生成結果。
每一個神經元都為它的輸入分配權重,這個權重的正確與否與其執行的任務直接相關。最終的輸出由這些權重加總來決定。
我們停止(Stop)標誌牌為例。將一個停止標誌牌影像的所有元素都打碎,然後用神經元進行“檢查”:八邊形的外形、救火車般的紅顏色、鮮明突出的字母、交通標誌的典型尺寸和靜止不動運動特性等等。神經網路的任務就是給出結論,它到底是不是一個停止標誌牌。神經網路會根據所有權重,給出一個經過深思熟慮的猜測——“機率向量”。
這個例子裡,系統可能會給出這樣的結果:86%可能是一個停止標誌牌;7%的可能是一個限速標誌牌;5%的可能是一個風箏掛在樹上等等。然後網路結構告知神經網路,它的結論是否正確。
其實在人工智慧出現的早期,神經網路就已經存在了,但神經網路對於“智慧”的貢獻微乎其微。主要問題是,即使是最基本的神經網路,也需要大量的運算。神經網路演算法的運算需求難以得到滿足。
現在,經過深度學習訓練的影像識別,在一些場景中甚至可以比人做得更好:從識別貓,到辨別血液中癌症的早期成分,到識別核磁共振成像中的腫瘤。Google的AlphaGo先是學會了如何下圍棋,然後與它自己下棋訓練。它訓練自己神經網路的方法,就是不斷地與自己下棋,反覆地下,永不停歇。
深度學習的相關技術
深度學習可以讓那些擁有多個處理層的計算模型來學習具有多層次抽象的資料的表示。這些方法在許多方面都帶來了顯著的改善,包括最先進的語音識別、視覺物件識別、物件檢測和許多其它領域。深度學習能夠發現大資料中的複雜結構。深度卷積網路在處理影像、影片、語音和音訊方面帶來了突破,而遞迴網路在處理序列資料,比如文字和語音方面表現出了閃亮的一面。
幾十年來,想要構建一個模式識別系統或者機器學習系統,需要一個精緻的引擎和相當專業的知識來設計一個特徵提取器,把原始資料(如影像的畫素值)轉換成一個適當的內部特徵表示或特徵向量,子學習系統,通常是一個分類器,對輸入的樣本進行檢測或分類。特徵表示學習是一套給機器灌入原始資料,然後能自動發現需要進行檢測和分類的表達的方法。
深度學習就是一種特徵學習方法,把原始資料透過一些簡單的但是非線性的模型轉變成為更高層次的,更加抽象的表達。透過足夠多的轉換的組合,非常複雜的函式也可以被學習。
監督學習
機器學習中,不論是否是深層,最常見的形式是監督學習。我們要建立一個系統,它能夠對一個包含了一座房子、一輛汽車、一個人或一個寵物的影像進行分類。我們先收集大量的房子,汽車,人與寵物的影像的資料集,並對每個物件標上它的類別。在訓練期間,機器會獲取一副圖片,然後產生一個輸出,這個輸出以向量形式的分數來表示,每個類別都有一個這樣的向量。我們希望所需的類別在所有的類別中具有最高的得分,但是這在訓練之前是不太可能發生的。透過計算一個目標函式可以獲得輸出分數和期望模式分數之間的誤差(或距離)。然後機器會修改其內部可調引數,以減少這種誤差。這些可調節的引數,通常被稱為權值,它們是一些實數,定義了機器的輸入輸出功能。
在典型的深學習系統中,有可能有數以百萬計的樣本和權值,和帶有標籤的樣本,用來訓練機器。為了正確地調整權值向量,該學習演算法計算每個權值的梯度向量,表示瞭如果權值增加了一個很小的量,那麼誤差會增加或減少的量。權值向量然後在梯度向量的相反方向上進行調整。我們的目標函式,所有訓練樣本的平均,可以被看作是一種在權值的高維空間上的多變地形。負的梯度向量表示在該地形中下降方向最快,使其更接近於最小值,也就是平均輸出誤差低最低的地方。
卷積神經網路
卷積神經網路被設計用來處理到多維陣列資料的,比如一個有3個包含了畫素值2-D影像組合成的一個具有3個顏色通道的彩色影像。很多資料形態都是這種多維陣列的:1D用來表示訊號和序列包括語言,2D用來表示影像或者聲音,3D用來表示影片或者有聲音的影像。卷積神經網路使用4個關鍵的想法來利用自然訊號的屬性:區域性連線、權值共享、池化以及多網路層的使用。
一個典型的卷積神經網路結構是由一系列的過程組成的。最初的幾個階段是由卷積層和池化層組成,卷積層的單元被組織在特徵圖中,在特徵圖中,每一個單元透過一組叫做濾波器的權值被連線到上一層的特徵圖的一個區域性塊,然後這個區域性加權和被傳給一個非線性函式,比如ReLU。在一個特徵圖中的全部單元享用相同的過濾器,不同層的特徵圖使用不同的過濾器。使用這種結構處於兩方面的原因:
1、在陣列資料中,比如影像資料,一個值的附近的值經常是高度相關的,可以形成比較容易被探測到的有區分性的區域性特徵。
2、不同位置區域性統計特徵不太相關的,也就是說,在一個地方出現的某個特徵,也可能出現在別的地方,所以不同位置的單元可以共享權值以及可以探測相同的樣本。在數學上,這種由一個特徵圖執行的過濾操作是一個離線的卷積,卷積神經網路也是這麼得名來的。
深度神經網路利用的很多自然訊號是層級組成的屬性,在這種屬性中高階的特徵是透過對低階特徵的組合來實現的。在影像中,區域性邊緣的組合形成基本圖案,這些圖案形成物體的區域性,然後再形成物體。這種層級結構也存在於語音資料以及文字資料中,如電話中的聲音,因素,音節,文件中的單詞和句子。當輸入資料在前一層中的位置有變化的時候,池化操作讓這些特徵表示對這些變化具有魯棒性。
使用深度卷積網路進行影像理解
21世紀開始,卷積神經網路就被成功的大量用於檢測、分割、物體識別以及影像的各個領域。這些應用都是使用了大量的有標籤的資料,比如交通訊號識別,生物資訊分割,面部探測,文字、行人以及自然圖形中的人的身體部分的探測。近年來,卷積神經網路的一個重大成功應用是人臉識別。
影像可以在畫素級別進行打標籤,這樣就可以應用在比如自動電話接聽機器人、自動駕駛汽車等技術中。像Mobileye以及NVIDIA公司正在把基於卷積神經網路的方法用於汽車中的視覺系統中。其它的應用涉及到自然語言的理解以及語音識別中。
如今的卷積神經網路架構有10-20層採用ReLU啟用函式、上百萬個權值以及幾十億個連線。然而訓練如此大的網路兩年前就只需要幾周了,現在硬體、軟體以及演算法並行的進步,又把訓練時間壓縮到了幾小時。
卷積神經網路很容易在晶片或者現場可程式設計門陣列(FPGA)中高效實現,許多公司正在開發卷積神經網路晶片,以使智慧機、相機、機器人以及自動駕駛汽車中的實時視覺系統成為可能。
遞迴神經網路
引入反向傳播演算法時,最令人興奮的便是使用遞迴神經網路訓練。對於涉及到序列輸入的任務,比如語音和語言,利用RNNs能獲得更好的效果。RNNs一次處理一個輸入序列元素,同時維護網路中隱式單元中隱式的包含過去時刻序列元素的歷史資訊的“狀態向量”。如果是深度多層網路不同神經元的輸出,我們就會考慮這種在不同離散時間步長的隱式單元的輸出,這將會使我們更加清晰怎麼利用反向傳播來訓練RNNs。
RNNs是非常強大的動態系統,但是訓練它們被證實存在問題的,因為反向傳播的梯度在每個時間間隔內是增長或下降的,所以經過一段時間後將導致結果的激增或者降為零。
由於先進的架構和訓練方式,RNNs被發現可以很好的預測文字中下一個字元或者句子中下一個單詞,並且可以應用於更加複雜的任務。例如在某時刻閱讀英語句子中的單詞後,將會訓練一個英語的“編碼器”網路,使得隱式單元的最終狀態向量能夠很好地表徵句子所要表達的意思或思想。這種“思想向量”可以作為聯合訓練一個法語“編碼器”網路的初始化隱式狀態(或者額外的輸入),其輸出為法語翻譯首單詞的機率分佈。如果從分佈中選擇一個特殊的首單詞作為編碼網路的輸入,將會輸出翻譯的句子中第二個單詞的機率分佈,並直到停止選擇為止。總體而言,這一過程是根據英語句子的機率分佈而產生的法語詞彙序列。這種簡單的機器翻譯方法的表現甚至可以和最先進的的方法相媲美,同時也引起了人們對於理解句子是否需要像使用推理規則操作內部符號表示質疑。這與日常推理中同時涉及到根據合理結論類推的觀點是匹配的。
機器學習和深度學習的主要差異
深度學習和機器學習都提供了訓練模型和分類資料的方法,那麼這兩者到底有什麼區別?
使用標準的機器學習的方法,我們需要手動選擇影像的相關特徵,以訓練機器學習模型。然後,模型在對新物件進行分析和分類時引用這些特徵。
透過深度學習的工作流程,可以從影像中自動提取相關功能。另外,深度學習是一種端到端的學習,網路被賦予原始資料和分類等任務,並且可以自動完成。
另一個關鍵的區別是深度學習演算法與資料縮放,而淺層學習資料收斂。淺層學習指的是當使用者向網路中新增更多示例和訓練資料時,機器學習的方式能夠在特定效能水平上達到平臺級。
如果需要在深度學習和機器學習之間作出抉擇,使用者需要明確是否具有高效能的GPU和大量的標記資料。如果使用者沒有高效能GPU和標記資料,那麼機器學習比深度學習更具優勢。這是因為深度學習通常比較複雜,就影像而言可能需要幾千張圖才能獲得可靠的結果。高效能的GPU能夠幫助使用者,在建模上花更少的時間來分析所有的影像。
如果使用者選擇機器學習,可以選擇在多種不同的分類器上訓練模型,也能知道哪些功能可以提取出最好的結果。此外,透過機器學習,我們可以靈活地選擇多種方式的組合,使用不同的分類器和功能來檢視哪種排列最適合資料。
所以,一般來說,深度學習的計算量更大,而機器學習技術通常更易於使用。
深度學習,給人工智慧以璀璨的未來
深度學習使得機器學習能夠實現眾多的應用,並擴充了人工智慧的領域範圍。深度學習摧枯拉朽般地實現了各種任務,使得似乎所有的機器輔助功能都變為可能。無人駕駛汽車,預防性醫療保健,甚至是更好的電影推薦,都近在眼前,或者即將實現。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901784/viewspace-2295452/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於 sudo 的那些事兒
- 關於自定義元件的那些事兒元件
- 關於JavaScript原型物件那些事兒JavaScript原型物件
- 有關指標的那些事兒《一》指標
- 關於微信域名攔截檢測那些事兒
- 關於Cookie的那些事Cookie
- https的那些事兒HTTP
- webpack的那些事兒Web
- 關於H5與小程式路由引數的那些事兒H5路由
- [elixir! #0084] 關於 DFA(確定性有限自動機)的那些事兒
- 四問四答 關於託管資料中心的那些事兒
- 關於程式碼評審(CodeReview)那些不得不說的事兒View
- 關於Rollup那些事
- 小白入門學習Python,值得你重視的那些事兒Python
- 雲端計算學習,後臺執行的那些事兒
- PHP那些事兒PHP
- Redis那些事兒Redis
- babel那些事兒Babel
- 關於moment打包的那些事
- 那些年關於HTTPS的事HTTP
- Eval家族的那些事兒
- 關於時序資料庫,你必須要知道的那些事兒!資料庫
- C++學習日記:關於我決定開始學習C++的那些事C++
- 關於 Flex 的那點事兒Flex
- 物聯網時代中關於邊緣計算那些事兒
- 關於評分卡模型那些事兒,看這篇就對了模型
- 雲原生java的那些事兒Java
- util.promisify 的那些事兒
- iOS 截圖的那些事兒iOS
- HTTP 快取的那些事兒HTTP快取
- 漏洞檢測的那些事兒
- 面試的那些事兒--01面試
- 關於 TCP 需要了解的事兒TCP
- 關於退款那些事兒,實在RPA一招幫你解決
- 【雲攻防系列】玩轉eBPF---關於核心執行時安全的那些事兒eBPF
- 關於國密HTTPS 的那些事(二)HTTP
- 【機器學習基礎】關於深度學習的Tips機器學習深度學習
- MySQL優化那些事兒MySql優化