1. 程式人生 > >「嵌入」(Embedding)如何更好地理解?

「嵌入」(Embedding)如何更好地理解?

0?wx_fmt=gif&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

圖:unsplash

原文來源:arxiv

作者:Krishna

「雷克世界」編譯:嗯~阿童木呀

0?wx_fmt=png眾所周知,一直以來嵌入都是非常受歡迎的,原因是什麼呢?接下來,就讓我們從相關背景中窺探一二。所有機器學習模型都要求輸入資料是數字。不幸的是,實際中的資料都是數值和分類值的混合(考慮結構化資料)。

分類資料的示例如下所示:

0?wx_fmt=png

原始資料

其中,我們有兩個分類變數(此處忽略使用者Id),最喜歡的顏色(FC)和T恤大小(TS)。我們可以使用以下方法來表示我們的輸入資料:

標籤編碼(Label Encoding)

將FC表示為整數值是不正確的。為什麼呢?如果我把red相加兩次(1 + 1),它的相加結果會是blue(2)嗎?不,這是沒有意義的,這樣做,只會將有關這個變數的完整資訊稀釋掉。

將TS表示為數值也是不正確的。為什麼呢?如果我將small和medium相加(1 + 2),它的相加結果會是large(3)嗎?不,再次這樣做將會導致丟失關於這個變數的資訊。

0?wx_fmt=png

標籤編碼

獨熱編碼(One Hot Encoding)

使用獨熱編碼可能算是一個更好的注意。它是一種將分類資料表示為稀疏向量的簡單方法。 例如下面的這個示例:

0?wx_fmt=png

獨熱編碼

用獨熱編碼來表示FC是一個好主意。我們將Red表示為{1,0,0},Blue表示為{0,1,0},Green表示為{0,0,1}。這意味著每個等級(Red、Green和Blue)彼此之間距離相等。

但是用同樣的方式來表示TS並不是一個好主意,我們都知道,small<medium<large。如果這樣做的話,訂購資訊將會丟失。這個變數中的所有等級都被處理為彼此之間距離相等。另外,如果我們有1000個等級而不是3個,將會發生什麼呢?這將使我們的矩陣大而稀疏。

嵌入(Embedding)

可以說,我們想用將具有三個等級的輸入變量表示為二維資料。使用嵌入層,底層自微分引擎(the underlaying automatic differentiation engines,例如Tensorflow或PyTorch)將具有三個等級的輸入資料減少為二維資料。

0?wx_fmt=png

輸入資料

0?wx_fmt=png

用標籤編碼表示輸入資料

0?wx_fmt=png

嵌入式資料

輸入資料需要用索引表示。這一點可以通過標籤編碼輕鬆實現。這是你的嵌入層的輸入。

最初,權重是隨機初始化的,它們使用隨機梯度下降得到優化,從而在二維空間中獲得良好的資料表示。可以說,當我們有100個等級時,並且想要在50個維度中獲得這個資料的表示時,這是一個非常有用的主意。

羅斯曼挑戰賽

這個策略已經被很多Kaggle參賽者使用,用以使得他們的分類資料集能夠獲得好的表示。(提出此想法的隊伍在本次比賽中排名第三)。

你可以觀察到,在對輸入資料進行一次獨熱編碼之後,他們將其嵌入到來自不同分類變數的較低維度中。

這些嵌入的輸出被連線並饋送到兩層神經網路中。

0?wx_fmt=png

0?wx_fmt=png

變數狀態的嵌入表示

0?wx_fmt=png

 周變數的嵌入表示

從上面我們可以看到,在二維環境下,周變數的嵌入表示。

令人驚訝的是,嵌入是如何設法找出週末的銷售與工作日的銷售之間的不同的。

狀態變數的嵌入表示幾乎等同於世界地圖上的實際表示。

 歡迎個人分享,媒體轉載請後臺回覆「轉載」獲得授權,微信搜尋「BOBO_AI」關注公眾號

中國人工智慧產業創新聯盟於2017年6月21日成立,超200家成員共推AI發展,相關動態:

640.png點選下圖加入聯盟

0.png

0?wx_fmt=gif

關注“雷克世界”後不要忘記置頂

我們還在搜狐新聞、雷克世界官網、騰訊新聞、網易新聞、一點資訊、天天快報、今日頭條、雪球財經……

↓↓↓點選閱讀原文檢視中國人工智慧產業創新聯盟手冊