機器學習入門17 - 嵌套 (Embedding)


原文鏈接:https://developers.google.com/machine-learning/crash-course/embeddings/

嵌套是一種相對低維的空間,可以將高維矢量映射到這種低維空間里。
通過使用嵌套,可以讓在大型輸入(比如代表字詞的稀疏矢量)上進行機器學習變得更加容易。
在理想情況下,嵌套可以將語義上相似的不同輸入映射到嵌套空間里的鄰近處,以此來捕獲輸入的語義。
一個模型學習到的嵌套,也可以被其他模型重用。

1- 協同過濾的目的

協同過濾是一項可以預測用戶興趣(根據很多其他用戶的興趣)的任務。

以影片推薦的任務為例,首先要確定哪些影片是相似的。
可以通過將影片嵌套到低維空間(使得相似的影片彼此鄰近)來實現這個目標。
也就是說,將這些影片映射到一個嵌套空間,其中的每個字詞都由一組二維坐標來表示。
通常情況下,在學習 d 維嵌套時,每部影片都由 d個實值數字表示,其中每個數字都分別表示在一個維度中的坐標。

可以為每個維度指定了名稱。
在學習嵌套時,每個維度的學習跟它們的名字無關。
通常,每個此類維度都稱為一個潛在維度,因為它代表的特征沒有明確顯示在數據中,而是要根據數據推斷得出。
最終,真正有意義的是嵌套空間中各個影片之間的距離,而不是單個影片在任意指定維度上的坐標。

2- 分類輸入數據

繼續以影片推薦的任務為例,分類數據可以是某用戶觀看過的一組影片,某文檔中使用的一系列單詞,或某人從事的職業。
如果要構建一個影片推薦模型,可以為每部可能的影片分別分配一個唯一的 ID,然后通過用戶已觀看影片的稀疏張量來表示每位用戶。
由此可知,分類數據是指用於表示一組有限選項中的一個或多個離散項的輸入特征,通常使用稀疏張量(一種含有極少非零元素的張量)來表示。
為了能夠在機器學習系統中使用這類表示法,需要將每個稀疏矢量表示為數字矢量,從而使語義上相似的項(影片或字詞)在矢量空間中具有相似的距離。

如何將字詞表示為數字矢量呢?

  • - 獨熱編碼(one-hot encoding,只有一個索引具有非零值)
  • - 詞袋”(bag of words) 表示法:使用一個包含各個單詞在大塊文本中出現次數的向量

不過,無論如何確定非零值,若將節點與字詞一一對應,得到的輸入矢量就會比較稀疏 - 即:矢量很大,但非零值相對較少。

稀疏表示法存在多項問題可能會致使模型很難高效地學習。

網絡的對應權重數目過大
巨型輸入矢量意味着神經網絡的對應權重數目會極其龐大,會進一步引發以下問題:

  • 數據量:模型中的權重越多,高效訓練所需的數據就越多。
  • 計算量:權重越多,訓練和使用模型所需的計算就越多。這很容易就會超出硬件的能力范圍。

矢量之間缺乏有意義的聯系

3- 轉換到低維度空間

通過使用嵌套(將高維度數據映射到低維度空間)可以解決上述稀疏輸入數據的核心問題,
也就是將大型稀疏矢量映射到一個保留語義關系的低維空間。
即便是小型多維空間,也能自由地將語義上相似的項歸到一起,並將相異項分開。   
借助這種多維空間(嵌套),機器學習系統能夠檢測出對學習任務可能有幫助的模式:

  • 收縮網絡:以更小的嵌套空間來更快速地訓練系統。實用嵌套的量級大致有數百個維度。
  • 嵌套充當查詢表
  • 嵌套查詢充當矩陣乘法

4- 獲取嵌套

可以通過多種方式來獲取嵌套:
標准降維技術

目前有很多在低維空間捕獲高維空間重要結構的數學技術。
理論上,這些技術都可以用來創建用於機器學習系統的嵌套。
例如,主成分分析 (PCA) 已用於創建字詞嵌套。
在給定一組實例的情況下,例如字詞矢量包,PCA 會嘗試查找高度相關且可以合並的維度。

Word2vec

Word2vec 是 Google 為了訓練字詞嵌套而研發的一種算法。
Word2vec 基於分布假設,將語義上相似的字詞映射到在幾何圖形上鄰近的嵌套矢量。
分布假設指出經常具有相同相鄰字詞的字詞往往在語義上相似。
Word2Vec 通過訓練神經網絡來區分實際共同出現的多組字詞與隨機出現在一起的字詞,從而充分利用此類上下文信息。
字詞的向量表示法-word2vec模型:https://www.tensorflow.org/tutorials/word2vec/index.html

將嵌套訓練為大型模型的一部分

也可以將嵌套作為目標任務的神經網絡的一部分進行學習。
通過這個方法,可以為自己的特定系統量身定制嵌套,不過耗費的時間可能要比單獨訓練嵌套的時間長。

5- 練習

xxx

6- 關鍵詞

輸入層 (input layer)
神經網絡中的第一層(接收輸入數據的層)。

獨熱編碼 (one-hot encoding)
一種稀疏向量,其中:
一個元素設為 1。
所有其他元素均設為 0。
獨熱編碼常用於表示擁有有限個可能值的字符串或標識符。
例如,假設某個指定的植物學數據集記錄了 15000 個不同的物種,其中每個物種都用獨一無二的字符串標識符來表示。
在特征工程過程中,您可能需要將這些字符串標識符編碼為獨熱向量,向量的大小為 15000。

稀疏特征 (sparse feature)
一種特征向量,其中的大多數值都為 0 或為空。
例如,某個向量包含一個為 1 的值和一百萬個為 0 的值,則該向量就屬於稀疏向量。
再舉一個例子,搜索查詢中的單詞也可能屬於稀疏特征 - 在某種指定語言中有很多可能的單詞,但在某個指定的查詢中僅包含其中幾個。
與密集特征相對。

嵌套 (embeddings)
一種分類特征,以連續值特征表示。
通常,嵌套是指將高維度向量映射到低維度的空間。
例如,您可以采用以下兩種方式之一來表示英文句子中的單詞:

1- 表示成包含百萬個元素(高維度)的稀疏向量,其中所有元素都是整數。
向量中的每個單元格都表示一個單獨的英文單詞,單元格中的值表示相應單詞在句子中出現的次數。
由於單個英文句子包含的單詞不太可能超過 50 個,因此向量中幾乎每個單元格都包含 0。
少數非 0 的單元格中將包含一個非常小的整數(通常為 1),該整數表示相應單詞在句子中出現的次數。

2- 表示成包含數百個元素(低維度)的密集向量,其中每個元素都存儲一個介於 0 到 1 之間的浮點值。這就是一種嵌套。

在 TensorFlow 中,會按反向傳播損失訓練嵌套,和訓練神經網絡中的任何其他參數一樣。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM