本文作者Ajit Jaokar是futuretext的創始人。
這篇文章主要講述一個正在演化的論題?,F在,我將主要解釋深度學習的基礎,以及深度學習算法如何應用于物聯網及智慧城市等。尤其是,像我接下來論述的一樣,我對于使用物聯網數據來完善深度學習算法很感興趣。我在物聯網數據科學課程項目中闡述過這些想法,這個課程的目的是培養物聯網數據科學家(與我在牛津大學和馬德里理工大學的課程類似)。我還會在上海同濟大學城市科學國際會議、舊金山物聯網大會(IoTworld event)上針對這些理論進行論述。如果你希望獲得最新信息,請在我的 linkedin上聯系我。
深度學習
深度學習經常會被認為是模仿大腦的一系列算法。但更加精確的定義應該是「利用神經層進行學習」的算法。深度學習涉及通過讓計算機從簡單概念之上建立起復雜概念的神經層進行學習。
深度學習逐漸從黑暗中摸索出了光明的道路,谷歌的研究員為他們的試驗性深度學習系統輸入了數千萬張來自于YouTube的隨機圖像,繼而指導系統去識別圖像的基本元素,以及如何將這些元素相互整合。這個有著16000個CPU的系統能夠識別出有著共同特點的圖像(例如貓咪的圖像)。谷歌權威性的實驗展示了深度學習的無限潛力。深度學習算法可以應用在多種領域,包括計算機視覺、圖像識別、模式識別、語音識別以及行為識別等。
計算機如何學習?
為了理解深度學習算法的驚人之處,首先必須了解計算機如何思考和學習。從很早以來,研究員就嘗試過創造可以思考的計算機。直至最近,這種努力最近已經成為了「自上而下」方法的規則。這種方法包括了為所有可能的情況寫出足夠的規則。但是此方法很明顯受限于規則的數量,以及其有限的規則依據。
為了克服這些限制,一個由下至上的方法被提出來。這種想法是從經驗中學習?!笜俗R數據」提供這些經驗。標識數據輸入到系統中,系統基于回應進行訓練。這種方法對過濾垃圾郵件這樣的應用十分有效。然而,大部分數據(圖像、視頻、語言等)并沒有標識,即使有,也并不完善。
另一個問題是解決無限的問題域。例如,國際象棋的問題域非常復雜,但是有限,因為它有著有限的基元(32個棋子)以及有限的可采取步驟(在64個格子上)。但是在真實生活中,無論何時,我們都有著無限多的變量。問題域因此而變得非常大。
像國際象棋這樣的問題可以根據一系列形式化規則向電腦進行描述。而反過來,許多真實世界的問題能夠被人們容易地理解(直覺)但是卻不是那么容易地向計算機表達。像這樣需要直覺的例子包括了在圖片上識別文字與臉。這樣的問題很難向計算機表達,因為問題域是無限的。因此,問題描述承受著維度的詛咒——當維度增加,空間的體積會增加得非常迅速,使可用的數據變得稀疏。計算機無法在稀疏數據中訓練。這樣的情景很難描述,因為沒有足夠的數據去合適地表達由維度代表的組合。即使如此,這樣「無限的選擇」問題在日常生活中也很常見。
深度學習算法如何學習?
深度學習涉及「困難/直覺性」的高維度無規則問題。在此,系統必須在不知道規則的前提下學習去處理未預料的情況。許多現存的系統例如Siri的語音識別與Facebook的臉部識別就在這些宗旨下運作。深度學習系統現在有著完善的可能,因為三個原因:高CPU配置,更好的算法,以及更多的數據。在接下去的許多年,這些因素會帶來深度學習算法更多的應用。
深度學習算法基于大腦的運作進行模擬。大腦可能會被視為一種大規模并行模擬計算機,有著 10^10個簡單處理器(神經元)——每一個都只需要幾毫秒去對輸入進行回應。為了從理論上模擬大腦的運行,每個神經元都被設計為一個小型電子設備,有著與生物神經元相似的傳輸功能。我們繼而可以連接這些神經元,模擬大腦的運作方式。從實踐上來說,這證明了這個模型并不是那么容易去完善,并且很難訓練。
因此我們制作了一些模型的簡化版本。這類神經網絡叫做「前饋反向傳播網絡」。簡化和限制在于:我們改變了神經元之間的相連方式,這樣它們可以位于不同層。每層中的每個神經元都與下一層的每個神經元相連。信號只能在一個方向上傳播。最終,我們簡化了神經元的設計,使其基于其他神經元傳來的簡單、權重驅動的輸入做出反應。這樣簡化的網絡(前饋神經網絡模型)在更容易構建和使用。
這樣:
每個神經元都收到上一層神經元傳來的信號
每個信號都乘上了一個權重
加權后的輸入值加總起來,通過一個限制的功能,將輸出值的范圍縮小為一個固定范圍。
通過限制器后的輸出值繼而向下一層的所有神經元傳播
人工神經網絡最常見的學習算法叫做反向傳播(Back Propagation,簡稱BP),即「誤差反向傳播」。為了利用神經網絡,我們給第一層施加輸入值,讓信號通過網絡傳播,讀取輸出。一個BP網絡通過例子學習,也就是說,我們必須提供一套學習模式,由一些輸入值和已知的正確輸出值組成。這樣,我們將這些輸入-輸出的例子展示給網絡,告訴它哪些行為是我們期望得到的。BP算法通過網絡反向傳播誤差值,調整權重值,并以此讓網絡適應。這些神經元的每個鏈接都有著獨一無二的權重值。網絡的「智能」就隱藏于權重的值中。隨著每個誤差迭代返回,權重以此得到調整。每個案例中整個過程都在重復。因此,為了檢測目標函數,程序員將會通過迅速發送許多包含目標的數字化數據版本(例如圖片)來訓練網絡。如果網絡沒有準確識別一個具體的模式,權重就會被調整。訓練的最終目的是去讓網絡能始終如一地識別我們能夠識別的模式(例如貓咪)。
深度學習如何幫助解決直覺問題?深度學習的總體目標還是要去解決一個「直覺」問題,也就是以高維度和無規則為特征的問題。前文介紹的機制展示了一個基于有限神經元模型的監督式學習算法——但是我們需要理解更多。
深度學習讓計算機解決直覺問題,這是因為:
有了深度學習,計算機可以不僅從經驗中學習,還可以根據概念的層級結構來理解世界——這個層級結構中,每個概念都由更簡單的概念來定義。
概念的層級結構是通過解決「表示問題」而「自下而上」地構建,并沒有提前定義好的規則。
這與孩子們學習「狗狗是什么」的方式相似,通過理解概念中的一個組成部分,如行為(例如狗吠),腦袋的形狀,尾巴,皮毛等等,繼而將這些概念組成為一個更大的概念,也就是狗本身。
(知識)表征問題在計算機科學中是一個重復出現的主題。
知識表征與心理學中的理論相結合,后者主要研究理解人們如何解決問題,以及表征知識。這個想法是:如果像人類一樣,計算機可以從經驗中整合知識,它就不再需要人類操作者正式指定解決問題所需的所有知識。
對于計算機來說,表征的選擇對機器學習算法的成果有著巨大的影響。例如,基于音調的高低可以知道講話者是一個男人、女人還是孩子。然而,對于很多應用來說,知道哪些特征表示著準確的信息并不容易。例如,在檢測汽車圖像中,輪子應該是圓形的——但是實際上輪子的照片有著很多不同的部分(例如金屬部分)。因此,表征學習的概念就是要同時找到映射與表征。
如果我們能夠自動(即沒有人類的干預)找到知識的表征和它們的映射,我們就有了一個靈活的設計去解決直覺問題。我們可以適應新的任務,甚至可以不需觀察就可以產生新見解。舉個例子,基于音調的高低我們可以知道其主人的口音,從而了解種族。這種機制是自我學習。深度學習最適用于數據龐大、參數之間關系復雜的環境。訓練一個神經網絡涉及重復地向它展示:「給定一個輸入,就會有一個正確的輸出」。如果這個過程被進行了足夠多次,這個網絡就擁有了有效的訓練,它就能模仿出你所模擬的方程。它會忽視與解無關的輸入。但反過來,如果你沒有給出關鍵性的輸入,它就無法給出一個正確的解。這種模型可以應用于很多情況,如以下所給出的簡單案例。
多層學習的案例深度學習涉及到通過神經層學習,讓計算機能夠基于簡單概念構建起復雜概念的層級結構。這種方法對很難表達的主觀與直覺問題很有用。
來看看圖像數據吧。計算機無法理解像素集合的意義。從一組像素中映射出復雜的目標函數,是非常困難的事。
有了深度學習,這個問題被分解為一系列層級化的映射——每個映射都由一個具體的神經層描述。
將輸入(表征我們實際觀察的變量)展現給可見層。接著,一系列隱藏層從涉及到某個具體映射的輸入中提取出越來越抽象的特征。然而請注意,這個過程并不是提前定義好的,也就是說,我們并不會指定每層選擇的內容。
舉個例子:從像素中,第一個隱藏層識別出邊緣
從邊緣,第二個隱藏層識別角和輪廓。
從角和輪廓,第三個隱藏層識別目標的部分
最終,從目標的部分中,第四個隱藏層識別出整個物體
對物聯網的啟示
讓我們扼要重述:
第一,深度學習算法可應用于多個領域,包括計算機視覺、圖像識別、模式識別、語音識別、行為識別等。
第二,深度學習系統現在有著完善的可能性,因為三個原因:高配置CPU、更好的算法及更多可用的數據。在接下來的幾年里,這些因素會為深度學習系統帶來更廣泛的應用。
第三,深度學習是最適合于數據龐大、參數之間關系復雜的情況。
第四,解決直覺性問題:訓練一個神經網絡需要重復地向它展示:「給定一個輸入,就會有一個正確的輸出」。如果這個過程被進行了足夠多次,這個網絡就擁有了有效的訓練,它就能模仿出你所模擬的方程。它會忽視與解無關的輸入。但反過來,如果你沒有給出關鍵性的輸入,它就無法給出一個正確的解。這種模型可以應用于很多情況。
另外,我們在這種技術上依然還有局限性。例如,我們還要走很漫長的路,深度學習系統才能發現你因為你的貓咪死掉了而很傷心(盡管IBM的沃森所衍生的認知玩具似乎正向著這個方向前進)。目前的關注點更多在于識別圖片,猜測圖片中人物的年齡(基于微軟的Oxford項目的API。)
正如吳恩達所提醒我們的那樣,用建造火箭飛船的方法去思考人工智能。我們在這一點也的確還有進步的空間。
「我認為AI類似于建造一艘火箭飛船。你需要一個巨大的引擎和很多燃料。如果 你有一個大引擎但是燃料卻很少,你就無法讓它飛上軌道。如果你有一個小引擎,但是卻有上噸的燃料,你甚至沒法讓它飛起來。這和深度學習(創造人工智能的關鍵過程之一)的相似點在于,火箭引擎是深度學習的模型,燃料則是我們供給算法的海量數據。 」
今天,由于技術的限制,我們仍然受限于規?;9雀柰瞥龅淖R別貓的神經網絡有著16,000個節點。但是,一個人類大腦足足有著1000億個神經元!
下列是反向傳播神經網絡適用于的情景:
有著大量的輸入/輸出數據,但是你并不確定如何與輸出相關聯。因此,我們有大量「給定一個輸入,就有一個正確的輸出」這樣的情景可利用于訓練神經網絡,因為很容易創造出許多正確行為的樣本。
問題看起來有著極端的復雜度。復雜度產生于低規則、高維度以及很難表征的數據。然而,這里肯定有一個解決方法。
問題的解決方法可能會隨時間改變,在給出的輸入與輸出參數范圍中(也就是說,今天的2+2=4,但是未來我們也許會發現2+2=3.8)。輸出可能很「模糊」,或者是非數值的。
某個領域的專業技能并不是必須的,因為輸出可以純粹來源于輸入:這里存在一些爭議,因為建立一個輸出只依賴于輸入的模型并不總是可能。不過,想想預測股市的例子吧。在理論上,有了足夠多的股票價格的輸入和輸出例子,如果利用深度學習技術進行合適的訓練,你可以創造出一個能夠預測未知情景的模型。
推論:我們需要在缺乏觀察的情況下,也能夠推出新見解。例如,基于音調的高低——我們可以推測出講話者口音與種族。
說到物聯網領域,我們要考慮的首要問題是:
哪些已有的應用可以通過增加直覺型成分(過去曾用在智慧城市),用深度學習技術來進行補充?
測量和預測時采用什么度量指標?我們如何給這個指標增加一個直覺型的成分?
哪些存在于計算機視覺、圖像識別、模式識別、語音識別、行為識別等等的應用還可以應用于物聯網?
現在為了更加深入該領域,下面有一些我很感興趣且正在關注的領域。
利用物聯網數據庫補充深度學習算法
從根本上來說,這些技術/策略用物聯網數據庫來補充深度學習算法。
深度學習算法和時間序列數據:來自傳感器的時間序列數據可以被認為是一種以規則的時間間隔取樣的一維網絡,而圖像數據可以被認為是一種像素組成的二維網絡。這讓我們可以用深度學習算法為時間序列數據進行建模(大部分傳感器/IoT數據都是時間序列)。探索深度學習和時間序列的做法不太常見,但是這種方法已經有了許多相關的案例(例如這篇論文:Deep Learning for Time Series Modelling to predict energy loads using only time and temp data)。
多模態:深度學習的多模態(multimodality)。深度學習算法中,多模態被研究得很多,尤其是交叉模態特征學習。在交叉模態特征學習中,如果在特征學習的過程中展示了多模態(如音頻+視頻),那么,對單一模態(例如視頻)就能學到更好的特征。
深度學習的時間模式:卡耐基梅隆大學電子和計算機工程系的博士學生Huan-Kai Peng與教授Radu Marculescu在他們最近的論文中,提出了識別多時間尺度中互動模式內在動態的新方法。他們的方法需要構建一個深度學習模型,由多層組成;每一層捕捉一個具體時間尺度的相關模式。
這種新的模型還可以應用于解釋短期模式與長期模式相關聯的可能方式。舉個例子。利用這種方法,就有可能解釋Twitter上 的某個長期模式是如何保持,并由一系列短期模式來加強的——這些短期模式包括人氣、忠實度、傳染度和互動性等。(論文見:http://vdisk.weibo.com/s/te1d-BLdOXpEB )
智慧城市的暢想
我把智慧城市看為一種物聯網的應用領域。智慧城市/未來都市的定義有許多。從我們的角度看,智慧城市是指用數字技術來加提高人們的生活與福利,減少成本與能源消耗,并更有效更活躍地參與到居民活動中。關鍵的「智慧」部分包括運輸、能源、醫療、水與垃圾處理等領域。
更加全面的智慧城市/物聯網應用領域包括:智能運輸系統(自動化交通工具),醫療、環境、廢物管理、空氣質量、水質量、事故與緊急服務、能源(可再生能源等)。在這些領域內,我們可以找到一些應用,添加上面所講述的直覺型組分。
還有一些典型的領域包括計算機視覺、圖像識別、模式識別、行為識別。目前人們比較感興趣的新興領域則有自動駕駛車——例如Lutz pod,甚至更大的汽車,例如自動駕駛卡車。
結論
深度學習設計到通過多層學習,讓計算機基于簡單概念構建復雜概念的層級結構。深度學習被用于解決高維度直覺性應用。它是一個新興領域,在未來幾年,由于科技的進步,我們可能會看到更多深度學習的應用。
我自己則非常感興趣于物聯網數據庫如何補充深度學習算法。從上面的幾個案例來看,它尚為雛形。我相信它會有著廣泛的應用,并且有許多我們的探索還沒有完成(例如智慧城市)。