Visualizing Representations: Deep Learning and Human Beings 簡單翻譯(數據可視化:深度學習和人類)(未完)

最近在學習NLP相關內容, 學到Visualizing Representations部分的時候,老師推薦讀這篇文章。本文介紹了比較新的,而且實用的高維數據可視化方法,並且包含一些例子,裏面沒有太多的公式和算法,淺顯易懂,適合入門的朋友閱讀

本文於2015年1月26日發表於colah的github博客,原文鏈接:http://colah.github.io/posts/2015-01-Visualizing-Representations/

個人水平不高,如有錯誤希望大家指正。另外一些專業術語,我也不知道如何翻譯的,或者是比較複雜的術語,可能會以原型或縮略詞在文中出現。


下文中有一詞表示(representation)可能比較晦澀難懂,你可以簡單的理解成數據在該處變換和重塑的抽象或者說數據的描述形式,作者給出的意思是:The representation perspective is an abstraction over inputs. Instead of trying to understand what the neural network does to a single input, we try to understand what it does to the space of inputs, to the data manifold. It’s a step up the ladder of abstraction. Later, we will take a second step, allowing us to look at the space of neural networks, instead of a single one.



以下是譯文:


前言

前面的博文中,我曾經提到過一些高維數據可視化(visualizing high-dimensional data)的技術。從它本身來說,是個非常有趣的技術點,但是往往我們的目標不在於此。在我看來,這項技術現存的不足,對於我們進一步理解機器學習和深度神經網絡的內部機制,造成的了極大的障礙。

深度神經網絡(Deep neural networks,後稱:神經網絡、網絡)是一種解決機器學習問題的手段。過去幾年中,它使得計算機視覺(computer vision)和語音識別(speechrecognition )領域有了巨大的突破,頗有撥雲見日之感。這些技術手段在很多其他領域也已經有了非常具有價值的成果,比如:語言理解(language understanding)和機器翻譯(machine translation)。儘管如此,要想理解這些網絡背後究竟做了什麼,仍然是個巨大的挑戰。

在我看來,降維(dimensionality reduction)不光是一種技術手段,還給我們進一步理解神經網絡提供了很多線索。

不過,理解神經網絡只是揭露了問題的表象,通過這去理解數據如何在內部運作的纔是更重要的事情。在高維數據可視化的領域下,結合運用神經網絡和降維是個非常有趣的技術點——這比單獨使用降維要功能強大的多。


神經網絡變換空間(Neural Networks Transform Space)


其實,不是所有的神經網絡都難以理解的。實際上,低維神經網絡還是相當容易理解的,比如:每層只有2到3個神經元(neurons)。
讓我們一起來看看這麼這數據集,一個平面內有兩條曲線。給定一個位於曲線上的點,我們的神經網絡就可以預測說來它來自哪一條曲線。

接下來,我們使用一個具有一層輸入和一層輸出的神經網絡,按直線對其進行分類,如圖:

在這個例子中,僅僅通過一條直線,是無法特別理想的分類的。所以,只含有一個輸入層和一個輸出層的神經網絡,不能在這個例子中很好的分類。
但是在實踐中,往往神經網絡還會加上很多中間層,我們稱爲隱含層(hidden layers)。它們會對數據進行重塑和變換,使其能夠更好的分類。如下圖:

在這裏,我們將數據的版本和不同層的表示(representation)一一對應。輸入層是原始數據,中間的隱含層是對原始數據的變形,使數據能更容易的進行分類。
低維神經網絡是非常容易理解的,因爲我們可以非常直觀的看到數據的展示,以及隱含層是以何種方式對數據進行變形的。所以,如果你對內部的機制感興趣的話,直接看看就知道了。(這裏只提到了一點點,如果你對這部分感興趣,還可以參考我之前寫的博文 神經網絡、流型和拓補(Neural Networks, Manifolds, and Topology
不幸的是,神經網絡常常都不是低維的。它的強大之處就是對高維數據進行分類。比如說,計算機視覺的數據,往往有成百上千個緯度,隱含層也需要對這麼多的緯度進行轉換。
例如,我們要對MNIST(譯者注:一個入門級的計算機視覺數據集,它包含各種手寫數字圖片)進行分類。輸入層是一個784維的向量,即使使用一個非常簡單神經網絡,我們也需要一個隱含層來處理高維數據。更具體的說,假設我們有一個隱含層,它很有100個Sigmoid(譯者注:一個良好的閾值函數,能將變量映射到0-1之間)神經元。
由於我們不能直接觀察高維數據,所以我們嘗試展示降維以後的數據。下圖是一個MNIST神經網絡的訓練示意圖,我們可以看到在原始數據和隱含層之間擁有很多的連接,這意味着數據的轉換和重塑:

在輸入層中,我們可以看到數據的展示結果是非常混亂的。在下一層我們可以看到,由於模型已經經過訓練了,隱含層已經知道如何將數據轉化成新的表示,因此,數據結果看起來要分的更開一些。
在深度學習中,這種方式(通過降維進行高維數據可視化)在評估模型的時候應用的極其廣泛。
除了理解神經網絡內部的進行機制之外,評估模型展示可以幫助我們進步瞭解數據本身。就算是用一些非常複雜的降維手段,很多真實世界的數據集也是難以理解的,它們的結構往往是複雜和混沌的。但是,更高維的展示正滿滿變的更加容易和理性,並且更助於人類閱讀。

(值得一提的是,降維這個概念並不新潮,事實上,它已經變的非常的普遍。一個更好的例子是Andrej Karpathy的visualizations of a high-level ImageNet representation(譯者注:這是一篇有關t-SNE可視化的文章),然而我的貢獻更多的在於關注它的實現和發展)

示例 1: Word Embeddings

Word Embedding(譯者注:將單詞用向量來表示,比如:apple=[0.1,-0.2,0.3],orange=[0.3,0.2,-0.5],後文會有具體介紹。另一種常見的表現形式是:將整個文檔作爲一個向量,詞典裏的詞彙數量作爲向量裏的元素數量,詞彙的詞頻作爲元素的值,這樣的矩陣中有大量的0,特別稀疏,在下一個例子中也會有提到。)是一種非常有意義的單詞表現形式,特別是在使用神經網絡來解決語言問題的時候。
對於這些任務,輸入網絡中的是一個或者多個單詞(這裏的單詞都指的是英文單詞),每個單詞都可以被表示成一個高維空間向量,每個維度都對應的是單詞表中的一個單詞(維度高大幾萬)。網絡將這種高維數據和空間進行轉換和壓縮,把這些高維向量映射到低維中去(幾百個維度),這就被稱爲word embedding。
在word embedding中,每個單詞都是一個幾百維的向量。這些向量有一些特別有用的屬性,接下來將可視化這些屬性。我們將會看到,意思相似的單詞,空間距離也較爲相近。
(除了鄰近性,這些embedding還有很多其他有趣的特性。例如:這些向量的空間方向似乎有語義含義,進一步說,單詞向量之間的差的構成是非常相似的,比如,“女人”和“男人”之間的差,和“女王”和“國王”之間的差是近似的:v(woman)-v(man)≈v(queen)-v(king).對於更多有關內容,你可以參考我之前的博文Deep Learning, NLP, and Representations
爲了在二維空間中展示embedding的結果,我們需要選擇一些合適的降維方法。如果我們需要表示單詞語義之間的關係(比如近義詞關係),我們可以選擇t-SNE(譯者注:一種熱門有效的高維數據可視化方法,使用概率表示相對性,經過多次迭代後可以將鄰近數據變的更加分開,可以參考h博文:從SNE到t-SNE再到LargeVis)。因爲這種方法可以使得高維相鄰的點,在二維空間上更加的接近。
通過下面的t-SNE圖,我們可以看到二維空間鄰近的點,語義上也存在相似的關係。但是,這裏的單詞量太大,爲了看的更清楚,我們高亮了具有部分相似語義的單詞:城市,身體部分,食物,旅遊,感覺,親屬。

我們以上看到的只是例子,在後面的交互可視化中,你可以選擇高亮具有不同語義的單詞,還可以單獨查看每個點對應的單詞。(譯者注:以下爲屏幕截圖,我選擇查看“室外遊戲.n.01”和"食物.n.01",可以看到鼠標位置周圍有一些遊戲,目前顯示的是棒球,原始的交互程序是由JavaScript編寫,嵌入到原始網頁中,請點擊原始網頁鏈接查看。另外,這種詞彙標記法xxx.x.xx是代表“單詞.詞性.序號”,來自WordNet

示例 2: 維基百科中的Paragraph Vector

Paragraph vector是由 Le & Mikolov在2014年提出的,是由多個向量組成,用於表示一大段文本。它有很多種形式,在這裏我們用的是最簡單的一種,用來表示基於詞袋模型(bag of words)的一些特徵。
對於word embedding,我們通過向量學習來解決一些基於單詞的語言問題。對於paragraph vector,我們通過向量學習來預測哪些單詞在給定的段落中。
詳細的說,神經網絡可以針對不同的段落進行學習,得到單詞的近似低維統計量。這種神經網絡的隱含層中,我們可以得到表示每個段落的向量。這些向量具有一些很有價值的特性,比如,具有相似含義的段落也會非常的相近。
最近,谷歌有一些非常厲害的大牛, Andrew Dai, Quoc Le, 和Greg Corrado,他們決定對於一些有趣的數據集創建paragraph vector,其中之一就是維基百科,對每個英文的維基百科文章都創建一個向量。很有幸我能參加這個項目,並做了一些可視化的工作。
由於維基百科文章數量太大,我們可視化了它們的一個子集,然後我們用t-SNE進行計算,因爲我們想知道哪些文章內容是相近的。
下圖就是我們對整個維基百科進行可視化後的結果——一幅維基百科的地圖。從左圖可以看到,大部分的詞條都屬於以下幾個領域:體育、音樂(歌曲和唱片)、電影、物種和科學。爲什麼和體育有關的詞條這麼多,看起來是因爲體育是由很多個獨立的小的子類組合起來的,像是運動員、球隊、體育館、賽季、聯賽和遊戲,同樣的因素造成了其他幾個大類。

上面的維基百科地圖向我們展示了一個非常重要的結構。在一個巨大的體育簇(cluster)下,還有很多小的子簇(subcluster),比如:網球。非西方電影有多個分離的簇,像是寶萊塢。即使是看起來比較細的話題文章,像是人類蛋白質,也被分開了。
和上一個示例一樣,這個例子同樣提供了一個交互的界面來查詢你感興趣的話題(請點擊原文鏈接),在圖中對應的位置,和行程的簇。下圖交互小程序的截圖,我輸入的是“電影”,顯示的是電影在圖中的位置,分爲了上下兩個大簇。

(另外,維基百科的分類實際上比遠比你想的要廣。For example, every human is included in the category applied ethics because humans are in peoplewhich is in personhood which is in issues in ethics which is in applied ethics.

示例 3: 翻譯模型

上面兩個例子儘管很有趣,但是都有一點特殊。他們都是通過神經網絡來處理數據,並且得到了非常好的展示。這種可視化效果非常炫酷而且有用,但是它們對於我們進一步理解神經網絡並沒有太大幫助。
那下面,讓我們來一起看看cutting edge network做的一個真實例子:將英語翻譯成法語,來自Sutskever et al. (2014)
案例中,使用了兩個遞歸神經網絡(RNN),將英語句子翻譯成法語句子。首先,一個單詞一個單詞的對英文句子進行處理,並表示它們。接下來,輸入這些英文句子的表示,並連續的輸出翻譯後的單詞。最後,使用多層長短期記憶人工神經網絡(Long Short Term Memory)將這兩個步驟放在一起進行聯合訓練。




我們可以看到,在左邊的英語句子結束以後(EOS=“end of sentence”),通過中間的表示,得到的是右邊的法語句子。這些表示非常重要,以某種方法,從英語的句子,我已經得到了某個用於信息編碼的向量,將英語的句子轉換爲法語的句子。
通過t-SNE算法,進一步來分析我們的計算結果:
下面是程序截圖,我輸入的首字母是“According”

鼠標選擇了另一個句子,我們再看一個以“According”開頭的:

你可以看到,前一個說的是“受歡迎的戲服”,後一個說的是“中國反恐問題”。這兩個句子內容幾乎完全無關,但是可視化結果的距離非常的接近。這個結果讓我們覺得驚訝:句子的表示主要是根據第一個單詞進行的。
如果你自己的看,你可以看到更多結構化的內容。在有些地方,我們可以看到子簇的主題對應的是第二個詞。在另一些地方,我們會發現是由一些相似的第一個詞主導的,比如:“this”和“that”。但是總的來說,句子的轉換和表示主要是由第一個詞控制的。
這可能是由以下幾個原因造成的:1.根據我們輸入的句子,最開始處理的是第一個詞,因此,神經網絡可能強烈的認爲第一個詞是信息量最大的;2.第一個詞可能是最難翻譯的,因爲翻譯後面的詞可以根據前面的信息來進行,像是馬爾科夫鏈(Markov chain)。
儘管可能有更多的原因造成這個現象 ,但是我們依然覺得非常驚訝。我覺得,有更多的案例已經出現這種情況,只要將結果可視化一下,就可以很清楚的發現這種驚訝的現象。但是實際上,由於可視化存在困難,我們往往沒能看到這樣的結果。

高維數據可視化的模式


有關低維數據可視化,我們已經有了很多優秀的實踐。例如,在學校中會學到的,“給座標軸加上標題和單位”等。這些常用的規則有利於可視化和交流低維數據。
不幸的是,這些規則並不適用於高維數據可視化。如何給t-SNE圖的座標軸中加上標題?這種座標軸並沒有什麼確切的含義,它們更是沒有單位。在t-SNE圖中,唯一有意義的東西就是,點與點之間是接近的。
在繪製t-SNE圖的時候,還會有一些不尋常的挑戰,我們可以看一下下面這個圖:

先看看左手邊的男性名字(譯者注:這幅圖本來就不是交互式的,作者故意讓你鼠標點上去沒有反應,來說明這個問題),但是在左邊看不到任何有關男性名字的簇(是不是很沮喪啊,鼠標放上去也沒反應)。儘管,這幅圖中點的位置和之前示例中的位置一模一樣,但是,如果你不能看到哪個點對應的是哪個單詞,那這幅圖完全是沒有意義的。根據這幅圖,我們最多隻能判斷:這些點不是隨機的。
問題的關鍵就在於:就算是你知道你畫的是什麼,你也能夠將高維數據生成低維的圖像,但是低維圖像中點的位置並不能解釋任何數據,這樣是沒有意義的。
接下來,讓我們來解決這個問題,讓我們在圖上加上一些提示框。現在,當把鼠標放上去的時候,你就可以看到指定點對應的位置了。(譯者注:作者在這裏就給圖像加入了交互功能,用來說明以上的觀點)

接下來,請你試着找找“身體”有關的單詞。哈哈哈,你是不是沒有耐心在成千上萬個點找到與“身體”有關的單詞啊,除非你記得之前的位置,要不然你肯定找不到。
所以說,僅僅只是觀察點和對應單詞的位置是遠遠不夠的。因此,面對大量的數據,一個可行的方法是,用某種方式快速的強調某些數據,讓人一下就能看清楚。
在這裏,我個人總結出2點有關高維數據可視化的原則(基於我整三個月的工作經驗):
  1. 必須有辦法去獲取獨立的數據點
  2. 必須有辦法去強調數據
交互可視化(interactive visualization)就可以輕鬆的滿足以上兩個原則,但是它並不是唯一的辦法。在最初的t-SNE論文中,還有一種非常美觀的對於MNIST的可視化方法Maaten & Hinton (2008),如下圖:

通過直接將每個MNIST字符嵌入到圖表中(譯者注:在圖中我們可以看到,不同的部分都是由很多很小的阿拉伯數字組成的,這種方式對應的是非交互可視化),Maaten和Hinton使得查看每個獨立的點變的十分容易,並且每個點的對應的原始數據也一目瞭然。
不幸的是,這種方式僅僅是在處理簡單的MNIST圖像的時候管用。
 Cho et al. (2014)有一篇關於短語分析的優秀論文,也使用到了t-SNE,下面是一部分短語分析結果的圖表:

上圖中,我們也能看出鄰近的短語在語義上也存在很大程序的相似性。不幸的是,如果直接將所有的短語繪製到圖標上是行不通的,因爲它們實在是太龐大太臃腫了。老實說,對於這種數據集,除了交互可視化,我並沒有看到其他更好的可視化方法。

幾何指紋(Geometric Fingerprints

接下來,讓我們一起來看另一種非常有趣的表示,回到最簡單的MNIST數據,來看看是如何進行的。這一次,我們選擇使用PCA來對這個案例進行降維,主要有兩個原因:1.它能使我們觀察一些這些表示的幾何指紋;2.相比之前討論的其他降維算法,PCA有較小的隨機性。
下面你看到的網絡有5個Signoid隱含層,儘管實踐中從來都不會使用這樣的網絡,但是它還有有一些有趣的特性。


上圖你可以看到,網絡隱含層的表示有點像高維立方體的映射,這是因爲Sigmoid單元將數據的值映射到了接近0或1,中間值較少。如果你繼續下去,會發現大量的數據點聚集在高維立方體的角落,少部分落在邊緣。PCA最終會將數據點映射到一個二維空間裏。
這種類立方體結構是Sigmoid隱含層的一種幾何指紋。如果你使用其他的激勵函數(Activation function)會有類似的幾何指紋,下面讓我們看看ReLU(Rectified linear unit,修正線性單元,f(x)=max(0,x))隱含層。



因爲ReLU隱含層有更高的概率使得數值映射到0,所以很多的點都聚集在了原點和座標軸上。如果將數據映射到二維空間中,它看起來會像是從原點發散出來的多條射線。
這些集合屬性在只有幾個神經元的時候會變的更加明顯。

展示空間(The Space of Representations)

每次我們訓練神經網絡的時候,我們都會得到新的展示。就算是多次重複訓練相同的網絡,以上的論斷也是成立的,因爲對於一個數據集,很容易有多重不同的展示。
我們很少能看到這麼多不同的展示,只要我們想這麼做,它們也很容易被可視化。下面我們就來看看它們:
(譯者注:這裏作者實際上也提供的是一個交互程序,左邊可以選擇你想看的層次,右邊鼠標放上去的時候可以看到對應點對應的數字圖像。下面兩幅圖都是屏幕截圖,選擇是不同的展示,查看右邊數據點的可視化效果。)


現在,當我們可以選擇左邊的項目來查看數據不同的表示,但是這一切實在是沒有什麼幫助。我們能從中看出什麼嗎?似乎沒有。當然,這裏面很有很多獨特的展示,但是它們之間很難作比較,也無法有一個全局的視圖。
接下來,讓我們把注意力放在比較不同的展示上。一個非常微妙的事實是,兩個極度相似的神經網絡可能會在我們注意不到的地方造成巨大的不同。比如說,交換兩個神經元的位置,它們的展示也可能會被旋轉或翻面。

不管怎麼說,我們會儘可能的去忽略掉那些不重要的差異,並將注意力放在更重要的差異點上。我們更需要一種標準的範式,來定義表示的不同。
在圖中,數據點之間的距離似乎非常重要。所有其他可以忽略的差異點都是可以進行等距離變換的(isometries ),比如:二維空間內的旋轉或交換並不改變數據點之間的相對距離。另一方面,數據點之間的距離是非常重要的,因爲,更接近的數據點,可以認爲它們的相似度更高,反之亦然。
幸好這裏有一種簡單的方式可以很好的處理等距離變換。對於任意一個表示X,存在一個相關的度量函數(metric function),dX,這個函數定義的是給定兩點在當前表示X下的距離。對於另一個表示Y,如果dX=dY,當且僅當表示X和表示Y是等價的。這種度量函數精確的描述了我們需要的信息。
實際上,我們還不能直接使用dX這個定義,因爲這個函數是在高維連續空間中的(譯者注:因爲在連續空間裏,是無法計算所有的dX(Xm,Xn)的,因爲有無限個Xn,這樣一來無法比較dX和dY是否等價)。我們需要將它離散化,才能變得有用。


另外,我們還可以將Dx扁平化,把表示X的性質編碼成一個向量。我們可以對很多不同的表示做同樣的計算,得到一組高維向量。
很自然的,對於表示,我們還可以使用降維的手段,比如:t-SNE。Geoff Hinton把這種方法稱作“meta-SNE”,除此之外,他還使用了很多別的降維手段。
在下圖中(以下是程序截圖,作者同樣提供了一個交互程序),你可以看到三個方框。左邊的最大,體現了一個表示空間,裏面的每個點都對應了一個表示。這些點是通過對度量函數(類似上面的)扁平化後降維得到的。一種對這幅圖像的解讀方式是:表示之間的距離越近意味着,給定的表示之間,對於相似點的分類結果是一致的(譯者注:比如存在兩個不同的表示X和Y,存在兩個(分類)相似數據點a和b,假如在圖中XY的距離非常相近,那麼在對XY可視化以後,ab在X中的距離和在Y中的距離都是非常近的),反之亦然。
然後,中間的方塊是一種常見的對於MNIST的表示的可視化表達,就像我們前面提到的一樣,當你把鼠標放在左邊方框中的點上時,它會顯示該店對應的表示。最後,當你鼠標放在中間方框中的某個點上時,右邊的小方框顯示的是該點所對應的MNIST字符。

這種可視化方式使我們可以從一個森林看到一棵樹。


未完
發佈了55 篇原創文章 · 獲贊 12 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章