編者按:Microsoft Semantic Machines資深研究科學家、UC Berkeley計算機科學博士Jacob Andreas對比了機器學習和程序語言的發展史,提出可組合性、模塊化是神經網絡的重要發展方向。
應用機器學習簡史:
每當我們用能力更強、特征更簡單、結構性限制更少的模型替換能力更弱、附帶手工編寫的結構性限制的模型時,模型質量提升了(模型更小,開發用時更短,在未見數據上的概括性更好)。
從NLP領域我們就能舉出很多例子:線性模型取代了決策列表;Jelinek說:“我每開掉一個語言學家,語音識別系統的表現就會提高一點”;基于統計的機器翻譯;最近一大波論文的實質是“將log-linear模型(雙層神經網絡)替換為一個三層神經網絡”。
程序語言簡史:
每當我們用帶有少量高層構件的語言替換帶有大量簡單構件的語言時,程序質量提升了(同等復雜度的程序更短了,開發用時更短,包含bug的可能性降低)。
所有人都不寫匯編了,接著,所有人都不寫C了。(顯然這是粗暴的過度概括,因為還有很多人在寫匯編和C。爭議更少的說法是使用底層語言寫程序的人越來越少,使用底層語言更難寫對程序。)
不知道你注意到了沒有,在以上兩個情形中,我們移動的都是同一個滑塊——只不過方向不同。機器學習和程序語言設計最終目標是一致的:讓特定的問題求解機器(不管是人類還是優化算法)產生正確的代碼。在現實世界中,我們并不是因為機器學習內在地比手寫代碼更純粹或者更美才偏愛機器學習——我們使用機器學習是因為它高效。如果今天有人發布了一個包含一些可組合的視覺原語的庫,接著突然之間Facebook發現實習生可以比神經網絡更高效地解決所有的圖像標記問題,那么明天神經網絡就會被棄之門外。
實際上,我們現在能夠寫出這樣的庫嗎?
澄清一下,我指的不是類似OpenCV的東西,讓你選擇為特定任務預先實現的模型,然后在后處理部分加上你想要的操作。相反,我想要的是一些視覺原語,基于這些原語我們可以這樣編寫一個分類器:
load(image) andThen
detectObjects andThen
orderBy(salience) andThen
head andThen
name
或者這樣給圖像自動加上說明:
load(image) andThen
detectObjects andThen
describeAll
或者這樣識別人臉:
load(image) andThen
detectObjects andThen
filter(name(_) == Face) andThen
drawBoundaries
detectObjects、describeAll等函數看起來是什么樣?目前的經驗提示它們應該是神經網絡,但不是特定種類的神經網絡:它們并不是為完成某個具體任務(比如給圖像加上說明)而訓練的,而是以可自由組合的方式進行訓練:describeAll承諾可以接受任何“檢測結果列表之類”的輸入(可以直接來自detectObjects,也可以是經過后續過濾的),并生成一個字符串。這些函數的輸入和輸出都是實向量。無法結構化地強制“檢測結果列表之類”的東西實際具有所需的語義,相反,我們完全依賴訓練過程。
在當前的真實世界實現中,將網絡層視為模塊化、預先規定的單元,而將網絡視為為特定任務定制的單一模型(需要端到端訓練)。不過,一旦我們轉移到模塊化網絡上,我們可以開始進行不存在訓練數據的任務。例如,使用上面指定的原語“為圖像中的人添加說明”:
load(image) andThen
detectObjects andThen
filter(name(_) == Face)
andThen describeAll
其實我們已經向這個方向邁步了:人們使用圖像分類網絡的前若干層初始化幾乎所有視覺任務;盡管“注意力”是一系列組合多個網絡層的復雜操作,人們在描述模型時突然開始將其用作原語。Roger Grosse關于矩陣分解模型的語法的出色論文(arXiv:1210.4856)也多少是這個風格,還有Christopher Olah對視作可復用模塊組合的神經網絡的類型理論細節的討論(git.io/fAn4J)。
回到我們之前的程序語言討論,我們觀察到:
手工編寫人類檢測器對人類來說很難,但對神經網絡而言很容易。
給定功能恰當的視覺原語,編寫人類描述器很容易。但從頭訓練完成這一任務的神經網絡需要大量人類描述的樣本。(我們也許可以說,對人類來說“容易”,對神經網絡來說“困難”。)
更進一步,有很多更類似人類而不是神經網絡的機器學習技術,使用很小的數據集以及良好的預先指定的原語,比如,程序推導和語義解析。如果我們真的只在乎最少的人類干預,我們可以將指定的視覺原語交給機器學習子系統自動推導。
所以讓我們編寫這個庫!這里有一些問題需要研究:首先,提供給人們的功能原語(或用于程序推導的模塊)的正確組合是什么?接著,這些共享的表示真的可以被學習嗎?我們如何基于現有的標記數據為這些模塊搜尋參數配置?
作為概念證明,我和一些研究人員合作,寫了三篇關于可組合模塊化神經網絡的論文:
Neural Module Networks(arXiv:1511.02799)
Learning to Compose Neural Networks for Question Answering(arXiv:1601.01705)
Modeling Relationships in Referential Expressions with Compositional Modular Networks(arXiv:1611.09978)
-
神經網絡
+關注
關注
42文章
4806瀏覽量
102684 -
機器學習
+關注
關注
66文章
8488瀏覽量
134011
原文標題:程序語言與神經網絡
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
恒壓變壓器的發展史
中國電機工業發展史首發書籍下載
Robot的發展史
5G的發展史
unix系統發展史
C語言的發展史

評論