機器學習中 embedding層原理

本篇文章主要介紹以下內容:

  • 什麼是 neural network embedding ?
  • 我們爲什麼需要使用 neural network embedding?
  • 以及 embedding 是如何自學習的?

本文中,將談到這樣一個例子,使用 neural network embedding 來表示所有維基百科上的書籍,可以通過這裏訪問到原作者的推薦系統項目。

Figure 1: Neural Network Embedding of all books on Wikipedia.

Embedding 和 One Hot 編碼

上面說了,Embedding 是一個將離散變量轉爲連續向量表示的一個方式。在神經網絡中,embedding 是非常有用的,因爲它不光可以減少離散變量的空間維數,同時還可以有意義的表示該變量。

我們可以總結一下,embedding 有以下 3 個主要目的:

  1. 在 embedding 空間中查找最近鄰,這可以很好的用於根據用戶的興趣來進行推薦。
  2. 作爲監督性學習任務的輸入。
  3. 用於可視化不同離散變量之間的關係。

這也就意味對於上面我們所說的維基百科書籍表示而言,使用 Neural Network Embedding,我們可以在維基百科上獲取到的所有 37,000 本書,對於每一篇,僅僅用一個包含 50 個數字的向量即可表示。此外,因爲 embedding 是可學習的,因此在不斷的訓練過程中,更相似的書籍的表示在 embedding space 中將彼此更接近。

要了解 embedding 的優點,我們可以對應 One-hot 編碼來觀察。One-hot 編碼是一種最普通常見的表示離散數據的表示,首先我們計算出需要表示的離散或類別變量的總個數 N,然後對於每個變量,我們就可以用 N-1 個 0 和單個 1 組成的 vector 來表示每個類別。這樣做有兩個很明顯的缺點:

  1. 對於具有非常多類型的類別變量,變換後的向量維數過於巨大,且過於稀疏。
  2. 映射之間完全獨立,並不能表示出不同類別之間的關係。
# One Hot Encoding Categoricals
books = ["War and Peace", "Anna Karenina", 
          "The Hitchhiker's Guide to the Galaxy"]
books_encoded = [[1, 0, 0],
                 [0, 1, 0],
                 [0, 0, 1]]
Similarity (dot product) between First and Second = 0
Similarity (dot product) between Second and Third = 0
Similarity (dot product) between First and Third = 0

因此,考慮到這兩個問題,表示類別變量的理想解決方案則是我們是否可以通過較少的維度表示出每個類別,並且還可以一定的表現出不同類別變量之間的關係,這也就是 embedding 出現的目的。

# Idealized Representation of Embedding
books = ["War and Peace", "Anna Karenina", 
          "The Hitchhiker's Guide to the Galaxy"]
books_encoded_ideal = [[0.53,  0.85],
                       [0.60,  0.80],
                       [-0.78, -0.62]]
Similarity (dot product) between First and Second = 0.99
Similarity (dot product) between Second and Third = -0.94
Similarity (dot product) between First and Third = -0.97

而爲了更好的表示類別實體,我們還可以是用一個 embedding neural network 和 supervised 任務來進行學習訓練,以找到最適合的表示以及挖掘其內在聯繫。

One-hot 編碼的最大問題在於其轉換不依賴於任何的內在關係,而通過一個監督性學習任務的網絡,我們可以通過優化網絡的參數和權重來減少 loss 以改善我們的 embedding 表示,loss 越小,則表示最終的向量表示中,越相關的類別,它們的表示越相近。

上面給出維基百科的例子中,可能有這樣的一個 supervised 任務,“預測這本書是否是 Leo Tolstoy 寫的”,而我們最終產生的 embedding 則會讓 Tolstory 寫的書之間的表示更接近。因此弄清楚如何創建監督學習任務和產生相關表示是 embedding 表示的關鍵。

Embedding 可視化

Embedding 最酷的一個地方在於它們可以用來可視化出表示的數據的相關性,當然要我們能夠觀察,需要通過降維技術來達到 2 維或 3 維。最流行的降維技術是:t-Distributed Stochastic Neighbor Embedding (TSNE)。

我們可以定義維基百科上所有書籍爲原始 37,000 維,使用 neural network embedding 將它們映射到 50 維,然後使用 TSNE 將它們映射到 2 維,其結果如下:

Figure 2: Embedding of all 37,000 books on Wikipedia

這樣看好像並不能看出什麼,但是如果我們根據不同書籍的特徵着色,我們將可以很明顯的看出結果。

 

Figure 3: Embeddings Colored by Genre

 

我們可以清楚地看到屬於同一類型的書籍的分組。雖然它並不完美,但驚奇的是,我們只用 2 個數字就代表維基百科上的所有書籍,而在這些數字中仍能捕捉到不同類型之間的差異。這代表着 embedding 的價值。

靜態圖的問題在於我們無法真正探索數據並調查變量之間的分組或關係。 爲了解決這個問題,TensorFlow開發了 projector,這是一個在線應用程序,可以讓我們可視化並與 embedding 交互。 結果如下:

Figure 4: Interactive Exploration of Book Embeddings using projector

總結

Embedding 的基本內容如前面介紹所示,然而我想說的是它的價值並不僅僅在於 word embedding 或者 entity embedding,這種將類別數據用低維表示且可自學習的思想更存在價值。通過這種方式,我們可以將神經網絡,深度學習用於更廣泛的領域,Embedding 可以表示更多的東西,而這其中的關鍵在於要想清楚我們需要解決的問題和應用 Embedding 表示我們得到的是什麼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章