模組化深度學習網路

  • 2019 年 10 月 4 日
  • 筆記

作者:Badih Ghazi、Joshua R. Wang 編譯:泛福軒

經典機器學習(ML)都在關注如何利用可獲得的數據來給出更精確的預測。然而最近,研究者們開始考慮其它一些重要的東西,比如如何將演算法設計得小巧、高效和具有魯棒性。

匹配這一目標的一個自然的研究課題就是,關於一個高效存儲資訊的神經網路的頂層系統的設計——換句話說,是一個機制,用於獲取複雜深度網路如何處理輸入的簡潔概括(抽象)。

抽象是一個具有豐富內容的研究領域,這可以追溯到Alon,Matias和Szegedy等的基礎性工作,他們使神經網路能夠從輸入中高效提煉資訊。

舉個例子:想像進入一個房間並大致觀察房間內的物體。

現代機器學習在回答短期問題上會表現很出色,例如:房間里是否有一隻貓?那隻貓有多大?

現在,假如我們在一年的時間範圍里,每天來這個房間一次,那麼我們可以根據回憶來回答:房間里有貓的情況是否頻繁?通常是在早上還是晚上房間里有貓?

因此,我們能否設計一個即便我們不知道時長多少,仍然能夠回答如上基於記憶的問題的系統呢?

在今年ICML 2019(第36屆機器學習國際會議)上出現的一篇文章「Recursive Sketches for Modular Deep Learning」(《模組化深度學習的遞歸抽象》)中,Google的研究人員對機器學習模型如何理解輸入資訊進行了簡要總結的探索嘗試。

他們在一個已經訓練好的機器學習模型中加入它計算過程的簡要資訊,利用它們做到了高效地回答基於記憶的問題——例如,圖與圖的相似與統計問題——儘管記憶體的使用率遠小於把整個原始計算過程存儲下來。

AI科技評論編譯如下:

基本抽象演算法

一般來說,抽象演算法把一個輸入矢量 輸出為一個行為與 相似的抽象矢量,但是維度小很多使得存儲代價低得多。事實上存儲代價的大幅減小使得概括地保存網路資訊成為可能,也是能夠高效回答記憶相關問題的關鍵。

在最簡單的情況中,x的一個線性抽象由矩陣與矢量的乘積給出Ax。這種方法衍生出各種針對大規模數據集的高效演算法,例如基本統計量的估計(像直方圖、分位數、四分位間距),高頻元素的尋找,以及不同元素的數目的估計(稱為支援規模和與範數、熵估計相關的任務。

抽象化矢量的一個簡單方法是乘以一個寬矩陣A產生一個低維矢量y

這種簡單方法在線性回歸這樣相對簡單的情形下運行地很好。因為在每個維度有相同的方差這樣的一般假設下,權重的大小直接就能反映出數據的哪些維度是重要的。

然而,現在很多機器學習模型實際上是深度神經網路和基於高維嵌入(Word2Vec、Image Embedding、Glove、DeepWalk和BERT)的情況,這使得抽象化模型輸入變得困難起來。

不過幸運的是,這些複雜網路中的一大部分是模組化網路,允許我們針對每個模組進行抽象化處理從而能夠不去管整個網路的複雜性。

神經網路模組化

一個模組化深度網路由幾部分獨立的神經網路(模組)組成。這些模組的輸入(輸出)來自(作為)其它模組的輸出(輸入),且為模組間交流的唯一方式。

在這個概念的啟發下,已經出現了多個實踐系統,包括Neural Modular Networks,Capsule Neural Networks和PathNet。也可以把其它正則系統分解為模組網路的組合併應用我們的方法。

舉個例子,按傳統方式理解的 CNNs 就具有模組化的行為方式。它們會在較低層級偵測基本的概念和屬性並在較高層級偵測更複雜的對象。在這種觀點下,convolution kernels就對應模組。下圖生動地描寫了一個模組化網路。

這是一個處理影像的模組化網路的示意圖。數據從影像的底部通過藍色方塊表示的模組流向頂部。注意到較低層的模組對應基礎的對象,如圖中的邊,而上面的層對應更複雜的對象,像人或貓。同時也注意到這個想像的模組網路中,臉部模組的輸出足夠一般化使其同時適用於人和貓兩個模組。

抽象化條件

為了對我們的方法進行優化,我們要求對一個網路的抽象化需要滿足幾個性質:

  • 相似性:相近的網路操作的抽象化也應該保持相近,不相關的操作的抽象化應明顯不同
  • 屬性復現性:圖中任意節點的激活都能通過頂層的抽象中實現。
  • 統計性:如果有多個相似的對象,需要能夠重現關於它們的一些統計結果。例如,如果有一幅圖中有多隻貓,我們可以數出具體有幾隻。值得注意的是我們不需要提前想好這個問題。
  • 可擦除性:弱化頂層的抽象仍然能夠保持上面提到的性質,只是會連續地增加誤差。
  • 網路復現性:獲得足夠多的(輸入,抽象)對後,網路的連接結構和抽象化函數都能粗略地重現。

這是一個體現相似性的二維示意圖。每個矢量代表一個抽象化,有關聯的抽象更可能聚集在一起。

抽象化機制

我們提出的抽象化機制可以應用到預訓練的模組化網路上。它生成了一個單一的頂層抽象,總結了這個網路的操作資訊,同時滿足上面提到的所有性質。為了理解它如何做到這一點,首先考慮一個一層網路會給我們一些幫助。

此時,我們確保針對某個節點的所有預訓練得到的資訊都被「打包」進了兩個分離的子空間中,一個代表節點自身另一個代表所屬的模組網路。通過合合適的投影操作,第一個子空間能復現節點的屬性,第二個子空間加快對概括性統計量的快速估計。兩個子空間都能幫助加強之前提到的相似性。我們展示了所有這些性質都能得到如果所有涉及到的子空間都是被獨立且隨機的選擇的。

當然,當遇到超過一層的網路時,為了得到可拓展性需要額外的考量——這就引導到了本文提出的遞歸抽象機制。因為遞歸的關係,這些抽象能夠被「展開「到識別出每個子組件,刻畫複雜的網路結構。最終,我們用訂製的dictionary learning(字典學習)演算法證明了組成抽象機制的隨機子空間和網路結構能從充分多的(輸入,抽象)對的數據中得到恢復。

未來方向

簡要的概括網路是如何運行的這個問題看上去與模型可解釋性非常相關。研究來自於抽象化的想法是否能被應用到這個領域會是一件很有意思的事情。我們獲得抽象資訊也可被重新組織形成一個知識圖譜,允許模式的識別和快速檢索。

更進一步,我們的抽象化機制允許無縫添加新的模組——探索這一特性能否應用到architecture search(體系結構搜索)和不斷發展的網路拓撲會非常有趣。

最後,我們的抽象化資訊可以被視為一種方法,用於組織記憶中的資訊,如共享同一個模組或屬性的圖片也將共享對應抽象化後的同一個子成分。不誇張地說,這和人類使用經驗知識來識別物體和應對未知情形的方式非常相似。

via https://ai.googleblog.com/2019/09/recursive-sketches-for-modular-deep.html