標題:抽象學習:神經狀態機
來源:NeurIPS 2019 https://proceedings.neurips.cc/paper/2019/hash/c20a7ce2a627ba838cfbff082db35197-Abstract.html
程式碼:暫無 (該專案為網友復現,不全面--> https://github.com/ceyzaguirre4/NSM )
一、問題提出
針對神經網路和符號網路各自的優缺點,引入有限自動機的思想,提出一種神經狀態機,將各自的互補優勢整合到視覺推理任務中。
首先基於給定的影像,使用一個場景圖抽取模型,得到對應的概率場景圖。其中,物件被轉化為節點,並使用屬性表示表示特徵;關係被轉化為邊,來捕獲物件之間的空間關係和語義關係。此外,對輸入的問題進行語義理解,並轉化為一系列軟指令。在推理過程中,概率場景圖被視為一個有限狀態機,利用指令集合在其上執行順序推理,迭代遍歷它的節點,以回答一個給定的問題或得出一個新的推理。
不同於一些旨在將多模態資料進行緊密互動的神經網路結構,神經狀態機定義了一組語義概念embedding的概念,其描述領域的不同實體和屬性,如各種物件、屬性和關係。通過將視覺和語言形式轉換為基於語義概念的表示,有效地使兩種模態可以”說同一種語言“,從而可以在抽象的語義空間中進行綜合推理,這使得結構從內容中分離出來,實現模型的模組化,增強模型的透明度和可解釋性。
二、主要思想
兩個階段:
- 建模:構造狀態機。將視覺和語言形式都轉換成抽象的表示形式:影像被分解成一個表示其語義的概率圖——描述的視覺場景中的物件、屬性和關係,問題被轉換成一系列推理指令,通過執行指令回答問題。
- 推理:模擬狀態機的操作。在問題的指導下對語義視覺場景執行順序推理:通過迭代地向機器輸入指令並遍歷其狀態來模擬序列計算,以獲得答案。
定義:元組\((C,S,E,{{r_i}}_{i=0}^N,p_0,\delta)\)
(1)C:模型的概念詞彙表,由一組屬性概念組成。
(2)S:狀態集。
(3)E:有向邊的集合,指定狀態之間的有效轉換。
(4)\(\{{r_i}\}_{i=0}^N\):維數為d的指令序列,作為過渡函式\(\delta\)的輸入依次傳遞。
(5)\(p_0\):S→[0,1] 初始狀態的概率分佈。
(6)\(\delta_{S,E}\):\(p_i\times\ r_i\rightarrow\ p_{i+1}\)是狀態轉移函式。例項化為神經模組,在每一步中,考慮狀態分佈\(p_i\)和輸入指令\(r_i\),並使用它沿邊更新分佈概率,產生一個更新的狀態分佈\(p_{i+1}\)。
Part1:概念詞彙表Concept vocabulary C
用於捕獲和表示輸入影像的語義內容。
L + 2個屬性:
一個物件主體\(C_O=C_0\) eg:cat
L個屬性\(C_A=U_{i=1}^LC_i\) eg:顏色、形狀、材質
一種關係\(C_R=C_{L+1}\) eg:持有、看
每個屬性型別定義了一組D維embedding。
Part2:狀態集 S 和 邊集 E
構建一個概率場景圖,提取給定影像中的物件和關係,構建機器的狀態圖。
此處使用了前人提出的場景圖生成模型和Mask R-CNN物體檢測器。
場景圖的組成:
(1)物件節點\(S\),每個物件包括一個邊界框、一個mask遮罩、視覺特性表示和對應於概念詞彙表中L個語義屬性的離散概率分佈\(\{{P_i}\}_{i=0}^L\)。轉化到概率場景圖中,每個物件對應一個狀態\(s\in\ S\),使用\(L + 1\)的屬性變數\(\{{s^j}\}_{i=0}^L\)表示其特徵:
其中,\(c_k\in\ C_j\)表示第j個屬性型別的每個子類屬性embedding(比如顏色屬性裡面的紅色),\(P_j\)表示這些子屬性上的概率分佈。該公式主要抽取出每個物件的屬性特徵。
例子:具有”red“屬性的物件,其顏色屬性會被賦予接近”red“特徵的embedding。
(2)物件之間的關係邊,每條邊都與語義型別\(C_{L+1}\)上的概率分佈\(P_{L+1}\)相關聯。類似,計算每一條邊的關係語義embedding:
補充:
每個物件有\((L+1) \times D\)維特徵;每個邊有\(D\)維特徵。
Part3:推理指令Reasoning instructions \(\{{r_i}\}_{{i}={0}}^{N}\)
將問題翻譯為推理指令。
Step1:
使用NLP領域的GloVe對問題進行詞嵌入,之後將每個詞翻譯為詞彙表中最相近的概念(即和圖片對映到同一個語義空間),如果詞彙表沒有就保留。
針對每個詞向量\(w_i\),首先計算和詞彙表中屬性的相似度的分佈:
其中,C為所有子屬性的embedding,該矩陣中還包括一個額外的embedding\(c^\prime\),表示非內容詞彙。
之後,將每個詞轉變為基於詞彙表C的特徵表示:
基於該變換,問題中屬性詞會被詞典中的對應屬性替代;而其餘功能詞等報錯原始embedding。最終得到M個轉換之後的詞序列\(V^{M\times d}=\{{v_i}\}_{i=1}^M\)。
Step2:
使用一個基於注意力的encoder-decoder結構處理詞序列:
encoder部分為一個LSTM迴圈神經網路,最終狀態\(q\)作為問題特徵表示;
decoder部分為固定步數(\(N+1\))的迴圈decoder,其產生\(N+1\)個隱藏狀態\(h_i\),每一步decoding時計算對詞序列的注意力,並轉換為對應的推理指令:
該步驟使用注意力機制生成了一系列推理指令,其可以有選擇性給關注問題中的各個部分,達到循序漸進找答案的效果。
補充:\(r_i\)為1*d維向量
Part4:模型推理
已求得:
概念詞彙表\(C=U_{i=0}^{L+1}C_i\)
圖的狀態S 每個狀態:\(\{{s^j}\}_{i=0}^L\)
邊E 每一條邊: \(e^\prime\)
指令序列\(\{{r_i}\}_{i=0}^N\)
自動機初始化:場景圖上物件的初始概率分佈\(p_0\)。
每個推理步\(i\):讀取指令\(r_i\),並通過其沿著邊更新概率,將注意力重新分配給狀態。
Step1:理解指令的含義,即找到與指令\(r_i\)最相關的屬性型別。
設\(D\)為詞彙表中\(L+2\)個屬性,先求出指令和各屬性相關的程度:
\(R_i=softmax(r_i^T \cdot D)\)
比如\(R_i(L+1)\in[0,1]\)表示為\(r_i^\prime\),代表著該指令和語義關係的相關性程度。
Step2:得到指令的內容,將其與所有的狀態和邊進行比較,計算節點和邊的相關性分數:
Step3:將模型的注意力從現有狀態轉移到最相關的鄰居狀態(即下一個狀態):
(3)計算基於每個狀態自身屬性潛在轉移的概率,(4)則考慮到相對於當前狀態、轉移到下一狀態的上下文相關性。最終通過加權平均概率得到下一狀態的概率分佈。
通過將該過程重複執行N步,模擬神經狀態機的推理步驟。
Part5:分類
為了預測問題,使用兩次全連線層的softmax分類器,接收LSTM輸出的問題特徵和最終指令\(r_N\)引導下提取到的最終狀態聚合得到的資訊m:
(6)先按照指令型別求平均值,之後加上了對最終狀態的注意力\(p_N\)。
三、實驗
資料集:GQA VQA-CP
結果:
GQA:
VQA-CPv2:
模型泛化效能:
對GQA資料集進行修改,泛化了內容以及語法結構:內容泛化:測試機包括訓練集不存在的種類;結構泛化:同中問題語法表達修改。
視覺化推理過程:
四、總結
本文提出了神經狀態機NSM,其從影像中抽取出一個圖結構,並模擬有限自動機的推理步驟,來執行視覺推理任務。通過實驗,證明了其有效性、魯棒性和很好的泛化效能,此外也提高了可解釋性。
通過將有限狀態機的概念融入神經網路結構,使得符號和連線主義方法更加緊密的整合在一起,從而將神經模型從感官和知覺任務提升到更高層次的抽象、知識表徵、組合性和推理領域。