天天看點

【轉】embedding概念了解1、分類資料矢量化2、Embedding3、Obtaining Embeddings(擷取embedding)

原文來自google developer的機器學習入門課程。主要覺得有幾個點,很能說明embedding的本質,以及為什麼要用embedding來做矢量化。以下我對原文做了我需要的資訊的摘錄,需要閱讀原文的請自行去google developer上檢視。

1、分類資料矢量化

分類資料是指表示來自有限選擇集的一個或多個離散項的輸入特征。分類資料最直接的是通過稀疏張量(sparse tensors)表示,即one-hot編碼實作矢量化。

但one-hot編碼實作的分類資料向量化,有兩個問題使得機器學習不能有效學習。主要問題是構造的ont-hot vector太大以及vector之間距離刻畫問題。

問題一one-hot vector太大,在深度學習中,巨大的輸入向量意味着神經網絡的超大數量的權重。 如果你的詞彙表中有M個單詞,并且輸入上的網絡的第一層中有N個節點,則您需要使用MxN個權重來訓練該層。 大量的權重會導緻進一步的問題:

  1. 資料量:模型中的權重越多,有效訓練需要的資料就越多。
  2. 計算量:權重越多,訓練和使用模型所需的計算量就越多。 很容易超出硬體的能力。

問題二向量間缺少有意義的關系。如果将RGB通道的像素值提供給圖像分類器,那麼談論“相近”值是有意義的。 略帶紅色的藍色接近純藍色,無論是在語義上還是在向量之間的幾何距離方面。 但是對于索引1247的1的向量表示的“馬”,與索引50,430為1的向量表示的“羚羊”的關系不比索引238為1表示的向量“電視”的更接近。

我們需要足夠大的次元來編碼豐富的語義關系,同時又想要一個足夠小的向量空間,以便能夠更快地訓練系統。

解決方案:embedding

這些問題的解決方案是使用embedding,embedding将大型稀疏向量轉換為保留語義關系的低維空間。 我們将在本單元的以下部分中直覺地、概念上地和程式設計式地探索embedding。

2、Embedding

将高維資料映射到較低維空間來解決稀疏輸入資料的核心問題。即第一解決了向量空間高次元的問題,第二賦予了單詞間幾何空間距離大小的實際意義。

向量空間中的位置(距離和方向)可以把語義編碼到一個好的embedding中。 例如,以下真實的embedding可視化顯示了捕獲的語義關系,如國家與其首都之間的幾何關系:

【轉】embedding概念了解1、分類資料矢量化2、Embedding3、Obtaining Embeddings(擷取embedding)

這種有意義的空間為機器學習系統提供了檢測可能有助于學習任務的機會。

Embeddings as lookup tables(embedding看作查表)

embedding是一種矩陣,其中每列是與詞彙表中的item對應的向量。 要擷取單個詞彙item的稠密向量,就檢索與該item對應的列。可以參照tensorflow中的tf.nn.embedding_lookup函數。

但你怎麼轉換一堆稀疏的詞袋(bag of words)向量? 要獲得表示多個詞彙item(例如句子或段落中的所有單詞)的稀疏向量的稠密向量,可以檢索每個單獨item的embedding,然後将它們相加。

如果稀疏向量包含詞彙項的計數,則可以将每個embedding乘以其相應項的計數,然後再相加。

Embedding lookup as matrix multiplication(查找看作矩陣乘法)

我們剛才描述的查找、乘法和加法過程等同于矩陣乘法。 給定1×N稀疏表示S和N×M的embedding表E,矩陣乘法S X E給出1×M稠密向量。

但是你怎麼在第一時間得到E? 我們将在下一節中介紹如何擷取embedding。

3、Obtaining Embeddings(擷取embedding)

有許多方法可以實作embedding,包括在Google建立的最先進的算法。

Standard Dimensionality Reduction Techniques(标準降維技術)

有許多用于捕獲低維空間中的高維空間的重要結構的現有數學技術。 理論上,這些技術中的任何一種都可用于為機器學習系統建立embedding。

例如,主成分分析(PCA)已用于建立單詞embedding。 給定一組像詞袋向量一樣的執行個體,PCA試圖找到可以折疊成單個次元的高度相關的次元。

Word2vec

Word2vec是Google發明的用于訓練單詞embedding的算法。 Word2vec依賴于分布假設(distributional hypothesis)來将語義相似的詞映射到幾何上相近的embedding向量。

word2vec參考https://www.tensorflow.org/tutorials/word2vec/index.html

Training an Embedding as Part of a Larger Model(當作訓練網絡的一部分)

您還可以通過作為目标任務的神經網絡的一部分來學習embeeding。 這種方法可以為特定系統定制良好的embedding,但可能需要比單獨訓練embedding花更長的時間。

通常,當有稀疏資料(或您想要作embedding的稠密資料)時,你可以建立一個embedding單元,它隻是一種特殊類型的大小為d的隐藏單元。 該embedding層可以與任何其他特征和隐藏層組合。 與任何DNN一樣,最後一層将是優化的損失函數。

【轉】embedding概念了解1、分類資料矢量化2、Embedding3、Obtaining Embeddings(擷取embedding)

Figure 5. A sample DNN architecture for learning movie embeddings from collaborative filtering data.

當學習d維embedding時,每個item被映射到d維空間中的點,使得相似的item在該空間中是相近的。 圖6有助于說明embedding層中學習的權重與幾何視圖之間的關系。 輸入節點和d維embedding層中的節點之間的邊權重對應于每個d軸的坐标值。

【轉】embedding概念了解1、分類資料矢量化2、Embedding3、Obtaining Embeddings(擷取embedding)

Figure 6. A geometric view of the embedding layer weights.

繼續閱讀