資訊理論在機器學習中非常重要,但我們通常熟知的是資訊理論中交叉熵等模型度量方法。最近很多研究者將資訊理論作為研究深度方法的理論依據,而本文的目標不是要去理解神經網路背後的數學概念,而是要在資訊理論的視角下視覺化與解讀深度神經網路。
「Information: the negative reciprocal value of probability.」—克勞德 夏農
編碼器-解碼器
編碼器-解碼器架構絕不僅僅是組合在一起的兩個卷積神經網路或者迴圈神經網路!事實上它們甚至都可以不是神經網路!
最初從資訊理論的概念來說,編碼器僅僅用於壓縮資訊而解碼器可以擴充套件編碼過的資訊(https://www.cs.toronto.edu/~hinton/science.pdf)。
而對於機器學習來說,解碼和編碼的過程都不是無損的,也就是說總有一些資訊會丟失。編碼器編碼後的輸出被稱為上下文向量,同時它也是解碼器的輸入。
常用的編碼器-解碼器框架配置有兩種:
解碼器是編碼器的逆函式。在這種設定下,解碼器要儘可能地復原原始資訊。它通常被用於資料去噪,這種設定有一個特殊的名字,叫做自編碼器。
編碼器是一個壓縮演算法而解碼器是一個生成演算法。它用來將上下文資訊從一種格式轉換到另一種格式。
應用示例:
自編碼器:編碼器把英文文字壓縮成一個向量。解碼器根據這個向量生成原始的英文文字。
編碼器-解碼器:編碼器把英文文字壓縮成一個向量。解碼器根據這個向量生成原始英文文字的法語譯文。
編碼器-解碼器:編碼器把英文文字壓縮成一個向量。解碼器根據文字內容生成一幅圖片。
資訊理論
現在,如果我說每一個神經網路本身都是一個編碼器-解碼器框架;對大多數人來說,這聽起來非常荒誕,但我們可以重新思考一下這個觀點。
我們用 X 來表示輸入層,用 Y 來表示(訓練集中)真實的標籤或者說類別。現在我們已經知道神經網路要尋找到 X 和 Y 之間潛在的函式關係。
因此 X 可以被視為 Y 的高熵分佈。高熵是因為 X 除了 Y 的資訊外還包含有許多其它的資訊。
示例:
「這個男孩很棒」包含了足以讓我們明白其包含「positive」情感資訊(二元分類)。
但是,它也包含了如下的其它資訊:
1. 這是一個特定的男孩
2. 這僅僅是一個男孩
3. 句子使用的時態是現在時
現在這句話低資訊熵的表示可以為「positive」,而這同樣也是輸出資訊,我們待會再來討論這個問題。
現在想象一下每一個隱藏層都是一個單變數 H,這樣多層網路就可以被表示為 H_0, H_1 ….. H_{n-1}。
現在每一層都是一個變數,同時整個神經網路就變成了一個馬爾科夫鏈,因為馬爾科夫鏈中的每一個變數都僅僅依賴於前一個變數。
所以本質上來說每一個層都以不同的抽象形式構建不同部分的資訊。
下圖展示了以馬爾科夫鏈的形式視覺化神經網路。
最後一層 Y_ 應該產生一個低熵的結果(同最初的標籤或者說類別'Y'相關)。
根據資訊瓶頸理論,在獲取 Y_ 的過程中,輸入的資訊 X 經過 H 個隱藏層的壓縮最終保留同 Y 最相關的資訊。
互資訊
I(X,Y) = H(X)—H(X|Y)
如上所示為互資訊的表示式,其中 H 代表資訊熵,H(X) 代表變數 X 的資訊熵。而 H(X|Y) 表示給定 Y 時 X 的條件熵,或 H(X|Y) 表明了在 Y 已知的情況下從 X 中移除的不確定性。
互資訊的性質:
當資訊沿著馬爾科夫鏈移動時互資訊只會減少。
對於再引數化來說互資訊是恆定的,也就是說打亂一個隱藏層中的數值不會改變輸出。
反思瓶頸
在神經網路的馬爾科夫表達中,每一層都變成了部分資訊。在資訊理論中,這些部分資訊通常被視為是對相關資訊的連續提煉。
另一個看待這個問題的視角是:輸入先被編碼然後被解碼為輸出。
那麼,對於足夠多的隱藏層:
神經網路取樣的複雜度由最後一個隱藏層編碼的互資訊決定。
準確度由最後一個隱藏層解碼後的互資訊決定。
取樣複雜度是模型為了達到一定程度的準確性所需要的訓練樣本數和種類。
訓練階段的互資訊
我們計算了以下內容之間的互資訊:
1. 隱藏層和輸入
2. 隱藏層和輸出
初始狀態
在一開始,我們隨機初始化網路的權重。因此網路對於正確的輸出一無所知。經過連續的隱層,關於輸入的互資訊逐漸減少,同時隱層中關於輸出的資訊也同樣保持了一個相對比較低的值。
壓縮階段
隨著訓練的進行,上圖中的點開始向上移動,說明網路獲得了關於輸出的資訊。
但是上圖的點同時也開始向右側移動,說明靠後的隱層中關於輸入的資訊在增加。
訓練階段所需要的時間是最長。點的密度也需要最大化,上圖的點最終都聚集在了右上角。這說明輸入中同輸出相關的資訊得到了壓縮。這被稱為壓縮階段。
擴充套件階段
在壓縮階段之後,點開始向上並且向左移動。
這說明經過連續的隱層後,神經網路丟失了一些輸入資訊,並且保留到最後一個隱層的內容是關於輸出的最低熵資訊。
視覺化
馬爾科夫鍊形式下的神經網路還說明:學習發生在隱層之間。一個隱藏層含有預測輸出所需要的全部資訊(包括一些噪聲)。
因此我們可以使用每一層來預測輸出,這幫助我們一窺這潛藏在所謂的黑箱中層與層之間的知識。
此外,這也能夠讓我們獲知準確預測輸出所需要的隱層數目。如果模型在較早的隱層中就已經飽和了,那麼我們就可以裁剪或者丟棄掉接下來的隱層。
這些隱層通常有幾百到幾千不等的維度。受人類視覺系統進化本身所限,我們無法視覺化超過 3 維的內容,因此我們使用了降維技術進行視覺化。
我們有不同的方法來進行降維。Cristopher Olah 有一篇部落格(http://colah.github.io/posts/2014-10-Visualizing-MNIST/)很好地闡釋了這些方法。在這裡我不會展開介紹 t-SNE 的細節,您可以在這篇部落格(https://distill.pub/2016/misread-tsne/)中獲得更多資訊。
簡單來說,t-SNE 試圖通過保留高維空間中點在低維空間中近鄰的方式來進行降維。因此它能夠產生非常準確的二維和三維影象。
如下是一個有 2 個隱層的語言模型的層級影象。
關於這些影象:
挑選出 16 個單詞
用最終的語言模型對每一個上述單詞找到 N 個同義詞(二維中 N=200,三維中 N=50)
得到每一個單詞在每一層的向量表達
使用 t-SNE 得到上述單詞向量的二維和三維的降維表達
畫出降維後的表達
第一層和第二層的二維圖。
第一層和第二層的三維圖。
總結
大多數的深度神經網路的工作原理都類似於解碼器-編碼器架構;
壓縮階段耗費了大部分的訓練時間;
隱層的學習是自底向上的;
經過壓縮階段,神經網路丟棄掉的輸入資訊越多,輸出結果就越準確(清除掉不相關的輸入資訊)。