從資訊理論的角度理解與可視化神經網路
選自TowardsDataScience,作者:Mukul Malik,機器之心編譯。
資訊理論在機器學習中非常重要,但我們通常熟知的是資訊理論中交叉熵等模型度量方法。最近很多研究者將資訊理論作為研究深度方法的理論依據,而本文的目標不是要去理解神經網路背後的數學概念,而是要在資訊理論的視角下可視化與解讀深度神經網路。
「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 得到上述單詞向量的二維和三維的降維表達
- 畫出降維後的表達
總結
- 大多數的深度神經網路的工作原理都類似於解碼器-編碼器架構;
- 壓縮階段耗費了大部分的訓練時間;
- 隱層的學習是自底向上的;
- 經過壓縮階段,神經網路丟棄掉的輸入信息越多,輸出結果就越準確(清除掉不相關的輸入信息)。
推薦閱讀:
※先睹為快:神經網路頂會ICLR 2018論文接受結果速覽
※受限制玻爾茲曼機(RBM)的能量函數及其梯度求解
※【可解釋 AI 重大突破】DeepMind 構建心智理論神經網路讓機器互相理解
※深度學習之人工神經網路及優化
※譯文:如何使用TensorFlow實現神經網路(上)