每日最新頭條.有趣資訊

如何提取網絡架構的先驗知識?為它畫幅素描吧!

選自谷歌部落格

機器之心編譯

參與:郭元晨、Geek AI

五花八門的深度神經網絡看似結構各不相同,其內在學習邏輯實則有跡可循。且看谷歌的研究人員如何通過「遞歸速寫」方法提取知識、進行神經網絡壓縮,最終實現在未曾訓練過的場景下的智能推理。

許多經典的機器學習方法專注於如何利用可獲得的數據來做出更準確的預測。最近,研究者們也開始關注其他重要的目標,比如怎樣設計一個小巧、高效又魯棒的算法。在這些目標的驅動下,一個自然的研究課題就是設計一個基於神經網絡的系統,該網絡可以高效地存儲其中編碼的信息。換句話說,也就是設計一種概括複雜深度網絡處理輸入的方法的簡單機制(像「速寫」(sketch)一樣)。「神經網絡速寫」是一個被廣泛研究的領域,可以追溯到 Alon、Matias 和 Szegedy 的奠基性工作「The space complexity of approximating the frequency moments」。這項工作中,研究者們使得神經網絡可以高效地概括輸入的信息。

論文地址:http://www.math.tau.ac.il/~nogaa/PDFS/amsz4.pdf

舉個例子,假設你進入了一個房間,大略地掃了一眼裡面的物體。如果你要求現代機器學習算法回答一些它在訓練時見過的問題,它可以立刻給出很好的答案:「這裡有貓嗎?如果有,它多大?」現在,假設我們在一年中每一天都會看一遍這個房間,人類可以回想起他們在這段時間觀察房間的情景:「房間裡有出現一隻貓的頻率如何?我們通常是在早上還是晚上看這個房間?」那麽,我們是否可以設計一類系統,它們能高效地回答這類基於記憶的問題呢(即使它們在訓練中沒有出現過)?

在 ICML2019 上發表的文章「Recursive Sketches for Modular Deep Learning(https://arxiv.org/abs/1905.12730)中,我們探索了如何簡潔地概括機器學習模型理解輸入的方式。對於一個現有的(訓練好的)機器學習模型,我們用其計算的「速寫」增強它,並用這些「速寫」來高效地回答基於記憶的問題——比如計算圖像間的相似度,並總結一些統計數據(儘管事實上相比於將完整的原始計算過程存儲下來,這些「速寫」佔用的記憶體要少得多)。

基礎「速寫」算法

總體上來說,一個「速寫」算法接收輸入一個向量 x,輸出一個與 x 表現相似但是存儲開銷的小得多的「速寫」向量。事實上這種小得多的存儲開銷讓我們能夠簡潔地存儲有關網絡的信息,這在高效地回答基於記憶的問題時是至關重要的。在最簡單的情況下,一個線性的「速寫 向量」x 由矩陣和向量的乘積 *Ax *得到。其中 A 是一個「寬」矩陣,它的列數是 x 的原始維數,行數是新的降維後的向量維數。這種方法在大數據集的一些基本任務上衍生出了許多高效的算法(http://db.cs.berkeley.edu/cs286/papers/synopses-fntdb2012.pdf),比如估計基本統計量(例如,直方圖、分位數、四分位數等),尋找高頻項(frequenct elements),估計不同的元素的數量(support size),以及一些和范數、熵估計相關的任務。

將向量 x 乘上一個寬矩陣 A,得到一個低維向量 y,這是得到「速寫」的一個簡單的方法。這個基本的方法在一些像線性回歸之類相對簡單的情況中效果很好,在這種情況下,它僅僅通過權重的大小就可以識別重要的數據維度(在方差一致性的常見假設下)。然而,很多現代機器學習模型是基於高維嵌入(如 Word2Vec、Image Embeddings、Glove、DeepWalk、BERT 等)的深度神經網絡,這使得概括模型對於輸入的操作變得異常困難。但另一方面,這些複雜網絡的很多部分都是模塊化的,即使它們非常複雜,我們也可以對於它們的行為生成準確的「速寫」。

神經網絡的模塊性

一個模塊化的神經網絡由數個獨立的神經網絡模塊組成,它們隻通過「將某個模塊的輸出作為另一個模塊輸入」這樣的方式來傳遞信息。這種思想啟發了許多實用架構的出現,比如 Neural Modular Networks、Capsule Neural Networks 和 PathNet。我們也可以拆分其它經典的神經網絡架構,把它們看作模塊化的網絡,並應用我們的方法。比如,卷積神經網絡(Convolutional Neural Networks,CNNs)通常被認為是以模塊化的方式工作的,網絡在低層檢測出圖像中基本的概念和屬性,而在較高層檢測更加複雜的物體。在這種觀點下,各種卷積核就對應於各種模塊。在下圖中,我們給出了模塊化網絡一個形象的描述。

上圖是用模塊化神經網絡進行圖像處理過程的一個形象的圖示。數據從底端經過藍色方框代表的模塊流向頂端。請注意,在較低層中,模塊對應的是一些基本的元素(比如圖像的邊緣);而較高層的模塊對應著更加複雜的物體(比如人或者貓)。我們還應該注意,在這個想象的模塊化網絡中,檢測臉的模塊的輸出有足夠的通用性,使它能夠同時被檢測人和檢測貓的模塊所利用。

「速寫」的要求

為了針對這些模塊化網絡優化我們的方法,我們明確定義了幾個網絡「速寫」應該滿足的性質:

「速寫」間的相似性:兩個不相關的網絡操作(無論從模塊本身還是向量屬性來說)的「速寫」應當是非常不同的;同理,兩個相似網絡計算的「速寫」應該很相像近。

屬性恢復:屬性向量(即圖中任何結點的激活函數值),都可以根據頂層「速寫」大致恢復。

概要統計量:如果有多個相似的物體,我們可以恢復出這些物體的概要統計量。比如,如果一張圖像中有多隻貓,那麽我們可以數出有多少隻。請注意,這些問題在訓練中是不會出現的。

可擦除性:擦除頂層「速寫」的後綴仍可以保留以上特性(但會稍微增大誤差)。

網絡恢復:給定足夠多的(輸入,「速寫」)對,可以粗略地會付出網絡邊的連接方式以及「速寫」函數。

上圖是一個形象的「速寫」間相似性的二維示意圖。每個向量都表示了一個「速寫」,相關的「速寫」更傾向於聚集在一起。

「速寫」機制

我們提出的「速寫」機制可以應用在預訓練好的模塊化網絡上。這種機制為網絡的運算提供了一個頂層「速寫」式的概括,同時滿足了上面提到的那些性質。為了理解這種機制的工作方式,我們不妨考慮一個單層的網絡。在這種情況下,我們保證某個特定結點預訓練得到的所有信息可以被封裝到兩個不同的子空間去,其中一個對應著結點本身,另一個對應著和該節點相關的模塊。通過恰當的投影,第一個子空間可以恢復該節點的屬性,而第二個子空間可以快速地估計概要統計量。兩個子空間強化了上面提到的「速寫」間的相似性特性。我們說明了,只要涉及到的這些子空間是獨立隨機選取的,那麽上述特性一定成立。

當然,如果想要將這種思想擴展到多於一層的網絡上,還需要考慮更多的問題——這就引出了我們的「遞歸速寫」(recursive sketching)機制。由於網絡的遞歸性質,這些「速寫」可以被「展開」,從而識別子組件,掌握更加複雜的網絡結構。最後,我們使用針對該問題特別設計的字典學習(dictionary learning)算法來證明:只要有足夠多的(輸入,「速寫」)對,那麽我們就可以恢復出組成「速寫」機制的隨機選取的子空間和網絡結構。

未來的研究方向

簡潔地概括網絡的操作似乎和模型可解釋性有著密切的聯繫,所以進一步探究「速寫」相關的思想能否被應用在模型可解釋性領域是一個有趣的方向。我們的「速寫」也可以被組織成一個「知識圖譜」(knowledge graph),使模式可以被快速識別和檢索。此外,我們的「速寫」機制允許無縫地向「速寫」庫中添加新的模塊,所以探究這種特性在神經網絡架構搜索(architecture search)和網絡拓撲演進中的應用也是一個有趣的想法。最後,「速寫」可以認為是組織記憶中之前遇到信息的一種方式(例如,共享相同模塊或屬性的圖像,它們的「速寫」也會共享相同的子模塊)。高屋建瓴地說,這和人類使用先驗信息來識別物體並且泛化到未曾遇到的情境中的過程非常相似。

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

------------------------------------------------

獲得更多的PTT最新消息
按讚加入粉絲團