可視化循環神經網路的隱藏記憶

可視化循環神經網路的隱藏記憶

來自專欄 論智

來源:github

編譯:weakish

對於文本和語音這樣的序列化數據而言,循環神經網路(RNN)是非常高效的深度學習模型。RNN的變體,特別是長短時記憶(LSTM)網路和門控循環單元(GRU),在自然語言處理(NLP)任務中得到了廣泛應用。

然而,儘管在語言建模、機器翻譯、語言識別、情感分析、閱讀理解、視頻分析等任務中表現出色,RNN仍然是「黑盒」,難以解釋和理解。

有鑒於此,香港科技大學的Yao Ming等提出了一種新的可視化分析系統RNNVis,基於RNNVis,可以更好地可視化用於NLP任務的RNN網路,理解RNN的隱藏記憶。

在介紹RNNVis系統之前,先讓我們溫習一下RNN及其變體LSTM和GRU.

RNN及其變體

循環神經網路

如上圖所示,原始RNN接受序列化輸入{x(0), …, x(T)},並維護一個基於時間的隱藏狀態向量h(t)。在第t步,模型接受輸入x(t),並據下式更新隱藏狀態h(t-1)至h(t):

其中,WV權重矩陣f是非線性激活函數。上圖中,f為tanh.

h(t)可直接用作輸出,也可以經後續處理後用作輸出。比如,在分類問題中,對隱藏狀態應用softmax運算後輸出概率分布:

長短時記憶網路

和原始RNN不同,LSTM除了維護隱藏狀態h(t)外,還維護另一個稱為細胞狀態(cell state)的記憶向量c(t)。此外,LSTM使用輸入門i(t)、遺忘門f(t)、輸出門o(t)顯式地控制h(t)、c(t)的更新。三個門向量通過如下方法計算:

細胞狀態和隱藏狀態則通過如下方法計算:

上面的第一個公式為候選細胞狀態。

基於細胞狀態和門向量,相比原始RNN,LSTM能維持更久的信息。

門控循環單元

相比LSTM,GRU要簡單一點。GRU只使用隱藏狀態向量h(t),和兩個門向量,更新門z(t)、重置門r(t):

在更新隱藏狀態之前,GRU會先使用重置門計算候選隱藏狀態:

多層模型

為了增加表示能力,直接堆疊RNN網路可得到多層RNN模型:

其中,h0(t) = x(t)

類似地,LSTM和GRU也可以通過堆疊得到多層模型。

協同聚類可視化二分圖

還記得我們之前提到,對隱藏狀態進行後續處理(例如softmax)可以輸出分類的概率分布嗎?

上式可以分解為乘積:

其中,?h(t)可以解讀為模型對輸入單詞t的反應。

相應地,模型對輸入單詞w的反應的期望可以通過下式計算:

其中,x為單詞w的嵌入向量,s(x)i表示hi和w之間的關係。s(x)i的絕對值較大,意味著x對hi較重要。基於足夠的數據,我們可以據下式估計反應的期望:

下圖為一個雙層LSTM對三個不同的單詞的反應分布。該LSTM每層有600個細胞狀態單元,基於Penn Tree Bank(PTB)數據集訓練。我們可以看到,模型對介詞(「for」)和代詞(「he」、「she」)的反應模式大不相同。

基於前述期望反應,每個單詞可以計算出n個隱藏單位的期望反應,同時,每個隱藏單元可以計算出對n個單詞的期望反應。如果將單詞和隱藏單元看作節點,這一多對多關係可以建模為二分圖G = (Vw, Vh, E)。其中,Vw和Vh分別為單詞和隱藏節點的集合。而E為加權邊:

要可視化分析二分圖,很自然地就想到使用協同聚類。

從上圖我們可以看到,功能類似的單詞傾向於聚類在一起。

RNNVis

以上述可視化分析技術為核心,論文作者構建了RNNVis可視化系統:

如上圖所示,RNNVis包含3個主要模塊:

  1. 模型管理器 使用TensorFlow框架構建、訓練和測試RNN模型。用戶可以通過編輯配置文件修改模型的架構。
  2. RNN評估器 分析訓練好的模型,提取隱藏狀態中學習到的表示,並進一步處理評估結果以供可視化。同時,它也能夠提供單詞空間中每個隱藏狀態的解釋。
  3. 互動式可視化 用戶可以在主界面點擊單詞或記憶單元,以查看詳情。另外,用戶也可以調整可視化風格。

上圖為詳情頁面。箱形圖顯示,第48維和第123維都捕捉到了像「buy」(「買」)和「sell」(「賣」)這樣的動詞,儘管兩者的符號不同。另外,這一詳情界面也表明,LSTM網路能夠理解單詞的語法功能。

比較不同模型

除了用於理解單個模型的隱藏記憶,RNNVis還可以用來比較兩個模型:

上圖比較了原始RNN和LSTM。無論是記憶單元的飽和度(B和E),還是具體的響應歷史(C和D),都反映了RNN比LSTM更密集地更新隱藏記憶。換句話說,LSTM對輸入的反應更加稀疏。詳情頁面基於單個單詞的比較也印證了這一點(G和H)。

LSTM相比RNN更「懶惰」,這可能是它在長期記憶方面勝過RNN的原因。

比較同一模型的不同層

除了用來比較不同模型,RNNVis還可以用來比較同一模型的不同層。

對CNN的可視化研究揭示了,CNN使用不同層捕捉圖像中不同層次的結構。初始層捕捉較小的特徵,例如邊緣和角落,而接近輸出的層學習識別更複雜的結構,以表達不同的分類。

圖片來源:arXiv:1710.10777

而關於RNN及其變體不同層的作用,研究較少。一個自然的假想是初始層學習抽象表示,而後續層更多地學習特定任務的表示。

從上圖我們可以看到,第0層的「記憶晶元」的尺寸比第1層更均勻。另一方面,第1層的單詞雲中單詞的顏色更一致。也就是說,第1層的單詞雲的質量比第0層更高。這意味著第0層對不同單詞的用法的把握更模糊,而第1層在識別不同功能的單詞方面更聰明。

分別點擊兩層中的單詞「thou」,我們可以看到,相比第0層(C1),第1層對單詞「thou」的反應更稀疏(C2)。在其他單詞上也有類似的現象。對於語言建模而言,這樣的稀疏性有助於最後層,在最後層,輸出通過softmax直接投影到一個巨大的單詞空間(包含數千單詞)。

如此,我們通過可視化印證了之前的假想,模型使用第一層構建抽象表示,使用最後一層表達更為任務相關的表示。

案例研究

論文作者通過兩個案例試驗了RNNVis的效果。

情感分析

論文作者使用的數據集是Yelp Data Challenge,該數據集包含四百萬餐館點評及評分(一分到五分)。評分正好可以視為點評的標籤。為了簡化問題,論文作者預處理了五個標籤,將其歸併為兩個標籤,其中,一分、二分映射為「消極」,四分、五分映射為「積極」,三分的點評不計在內。同樣是為了簡化問題,只使用了原數據集的一個子集,2萬條長度小於100個單詞的點評。然後按照80/10/10的百分比分割訓練/驗證/測試集。

所用網路為單層GRU,包含50個細胞狀態,在驗證集和測試集上分別達到了89.5%和88.6%的精確度。

從上圖的單詞雲可以看到,GRU可以理解單詞的極性。上面的雲包含「never」、「not」之類的消極單詞,而下面的雲包含「love」、「awesome」、「helpful」之類的積極單詞。

另外,上圖分析的是兩個不同的轉折句:

  • I love the food, though the staff is not helpful. (我喜歡食物,不過服務人員不熱情。)
  • The staff is not helpful, though I love the food. (服務人員不熱情,不過我喜歡食物。)

從上圖可以看到,GRU對同一個單詞「though」的反應不同,第一個句子中的「though」導致隱藏狀態的更新更多,也就是說,GRU對消極情緒更敏感。

另一方面,數據集中許多消極單詞,比如「bad」(「糟」)和「worst」(「最糟」)並沒有出現在可視化之中。

這兩點暗示GRU在積極點評和消極點評上的表現可能不一樣。論文作者檢查了數據集,發現數據集並不均衡,積極點評與消極點評的比例接近3:1。基於過採樣技術,得到了均衡的數據集。在該數據集上重新訓練的GRU模型,表現提升了,在驗證集和測試集上分別達到了91.52%和91.91%的精確度。

可視化新模型後,單詞雲(C)包含更多情緒強烈的單詞,比如消極單詞雲中的「rude」(粗魯)、「worst」(最糟)、「bad」(糟),和積極單詞雲中的「excellent」(極好)、「delicious」(美味)、「great」(棒)。詳情頁面(A)顯示,模型對「excellent」和「worst」具備完全相反的反應模式。

莎士比亞著作

論文作者使用莎士比亞的著作(包含一百萬單詞)構建了一個語言建模數據集(辭彙量一萬五千)。數據集按80/10/10百分比分為訓練/驗證/測試數據集。

研究人員使用小、中、大三個規模的LSTM網路。

下面的評估和可視化結果屬於中等規模的LSTM網路,不過,其他兩個LSTM網路上的結果與此類似。

莎士比亞的語言混雜了新舊兩個時期的英語。而從上圖我們可以看到,「hath」「dost」「art」和「have」「do」「are」位於同一片單詞雲中。這說明,模型能夠學習這些用途相似的助詞,不管它們是來自古英語還是現代英語。詳情界面印證了這一點,成對的新詞和舊詞具有相應的反應模式。

上圖中有一個例外,是「thou」和「you」。這是因為在莎士比亞時期,「thou」和「you」的用法有細微的差別,「thou」為單數,常用於非正式場合,而「you」為複數,更正式、更禮貌。

以後的工作

論文作者計劃部署一個RNNVis的線上版本,並增加更多RNN模型的量化指標以提升可用性。

由於可視化分析技術基於文本的離散輸入空間,RNNVis只適用於分析用於文本的RNN系列模型。分析用於音頻應用的RNN模型尚需構建可解釋的表示。

當前RNNVis的瓶頸在於協同聚類的效率和質量,可能導致交互時的延遲。

另外,目前RNNVis還不能可視化一些特化的RNN變體,比如記憶網路(memory network)或注意力模型(attention model)。支持這些RNN變體需要對RNNVis進行擴展。

視頻和代碼

論文作者製作了視頻,演示RNNVis的使用及效果(請點擊查看)。

https://mp.weixin.qq.com/s?__biz=MzI3ODkxODU3Mg==&mid=2247486355&idx=2&sn=821257918b94e219e769240bc6599685&chksm=eb4eef50dc396646f0e554aad5b8bd82d99cf0a37e7d33d73c691719ef80a0a4ee2637a5db64#rd?

mp.weixin.qq.com

RNNVis的代碼已經公開發布在GitHub上:

github.com/myaooo/rnnvi


推薦閱讀:

TAG:機器學習 | 深度學習DeepLearning | 神經網路 |