iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 27
0
Google Developers Machine Learning

Machine Learning with TensorFlow on Google Cloud Platform系列 第 27

鐵人賽Day27 - Art and Science of Machine Learning (5/6)

嵌入(Embedding)

主旨:認識 Embedding

今天我們將會講到:

  • 如何使用 Embedding
    • 處理稀疏的資料
    • 降低資料維度
    • 增加模型泛化能力
    • 資料分群
  • 建造可重複使用的 Embedding

嵌入(Embedding)

Embedding 在介紹特徵組合的時候其實就有用到了,如下圖,那時候我們將兩個特徵組合後,最後壓縮到一個 2 維向量後輸出。

ML模型在學習的過程中,就會學習如何將高維度的資料”嵌入“至低維度向量當中,學習後的 Embedding 將可以某種程度地區分出資料的不同特性

推薦

若考慮現實生活中的例子:電影的推薦,我們手上有每個消費者對他看過電影的評分,如下圖有100萬個消費者、50萬部電影。

根據不同的特徵,喜好電影種類的對應分佈也會不太一樣,例如說年紀、電影的銷量。

而使用 Embedding 的目的,就是將超高維度的消費者資料 (N-維),大幅地降低維度 (d-維),N >>> d

以上面的例子來說,我們將其降低至2維,2個軸分別代表年紀和電影銷量(當然實際在學習 Embedding 時,每個軸代表的意思其實是不知道的),以此低維空間來表示全部消費者喜歡的電影分佈狀況。

當然你可能會疑惑說,為什麼我不直接使用N-維的特徵來做預測,反而要降低至d-維呢?原因是使用較低維度來預測有幾個優點:

  • 較少的記憶體空間需求
  • 較快的運算速度
  • 較高的模型泛化能力

那麼 Embedding 裡面的值是從哪得來的呢?答案是從大量的資料當中學出來的,如下圖,我們會先將資料轉換成一個稀疏的矩陣,然後丟進ML模型中,其中的嵌入層就會學到適當的數值。

而輸入資料的表示方式,會很大程度地影響學習時的運算速度,直觀上,我們會將消費者和電影,建立一個矩陣來表示有沒有看過 (one-hot encoding),不過這樣的表示方式過於密集(Dense),如下圖 (0,1,0,1,...,0,1),會拖累運算和儲存的效率

但若是使用另外一種表示法,直接表示看過電影的索引位置,如下圖 (1, 3, 999999),這樣子的表示法將更有效率:

在ML模型中的嵌入層,其權重的學習是透過反向傳播(Back propagation),本質上和所謂的隱藏層是相同的意思,如下圖示,左邊藍色的輸入資料會先經過一個 3維的嵌入層,將高維的資料特徵降低維度:

這種從高維度的資料特徵降至低維的特徵,有人稱做潛在特徵(Latent features),可以看作是資料更為抽象的表徵:

然而降到d-維,這個 d 的數值該怎麼選擇呢?若 d 選得太高,當然模型可以較為精準,但是也提高過擬合的可能,同時也造成訓練速度變慢,經驗法則上,d 的選擇大約是輸入資料維度的 4 次方根


今天介紹了嵌入,明天我們將介紹如何 “客製化Estimator”。


上一篇
鐵人賽Day26 - Art and Science of Machine Learning (4/6)
下一篇
鐵人賽Day28 - Art and Science of Machine Learning (6/6)
系列文
Machine Learning with TensorFlow on Google Cloud Platform30

尚未有邦友留言

立即登入留言