Embedding 原理與代碼實戰(zhàn)

embedding 的原理

embedding 層做了個什么呢弊决?它把我們的稀疏矩陣胀糜,通過一些線性變換(在CNN中用全連接層進(jìn)行轉(zhuǎn)換观蜗,也稱為查表操作)咧栗,變成了一個密集矩陣逆甜,這從稀疏矩陣到密集矩陣的過程,叫做 embedding致板,很多人也把它叫做查表交煞,因為它們之間也是一個一一映射的關(guān)系。

對 one-hot 向量的 embedding斟或,相當(dāng)于查表素征,embedding 直接用查表作為操作,而不是矩陣乘法運算缕粹,這大大降低了運算量稚茅,所以降低運算量不是因為id的embedding 向量的出現(xiàn),而是因為把 one-hot 的 embedding 矩陣乘法運算簡化為了查表操作平斩。

如下圖所示亚享,embedding 過程就是將 one-hot 向量輸入到全連接層輸出2個3維的稠密向量,這個(6, 3)的全連接層參數(shù)绘面,就是一個 id 向量表欺税,對應(yīng) 6 種 id 的 embedding 稠密向量侈沪。又例如,假設(shè)不同 id 的個數(shù)為 100(即 one-ho t向量長度為100)晚凿,設(shè)定 embedding 稠密向量的維度為 10亭罪,則全連接層的參數(shù)矩陣為100*10(這個矩陣就是 id 向量表,每個 id 特征都有一個 10 維的稠密向量表示它)歼秽。

image.png

embedding 代碼實現(xiàn)(Pytroch版本)

首先定義一個 embedding

import torch.nn as nn
 # 5 輸入類別數(shù)目, 即One-hot長度,  3 輸出 embedding 稠密向量維度
my_embedding = nn.Embedding(5, 3)

查看一下embedding初始化的 weight

my_embedding.weight 
image.png

從這可以看到 embedding 生成了一個5*3的矩陣应役,其實也就是 embedding 全連接層的參數(shù)。
這里以[0,1,2,3,4]為例, 假設(shè)有以下4條數(shù)據(jù)燥筷,具體特征值如下 (注意因為定義的 embedding 類別數(shù)目為5箩祥,所以輸入值不能超過4)

test = [0, 1, 2, 4]
embed = my_embedding(torch.LongTensor(test))
embed
image.png

從計算結(jié)果可以看到,embedding 之后得到的是一個4*3的矩陣肆氓,即原始特征每一個值用一個3維稠密向量表示袍祖。看到這里可能會有朋友疑問谢揪,這個4*3的矩陣具體是怎么生成的蕉陋,或者生成的依據(jù)是什么?

帶著這個問題拨扶,我們不妨回到計算之前凳鬓,如果沒有 embedding 我們該如何對一個類別型特征 one-hot, 答案很顯然,用0屈雄、1表示〈迨樱現(xiàn)在我們使用 one-hot 對上面的數(shù)據(jù)處理,可以想到酒奶,one-hot 之后預(yù)期結(jié)果如下:

test = [0,1,2,4]
one_hot(test) #這里是偽代碼蚁孔,具體 one_hot 計算邏輯不再展示
image.png

這里one-hot之后生成了一個4*5的矩陣。很顯然惋嚎,這個結(jié)果很好理解并且符合我們預(yù)期杠氢。那么這個結(jié)果和上面embedding生成的4*3矩陣有什么關(guān)系呢?

embedding 可用性理解

其實另伍,前文已經(jīng)說明過鼻百,embedding 相當(dāng)于查表。所以這里查的到底是什么表摆尝?細(xì)心的朋友可以發(fā)現(xiàn)温艇,其實查的就是我們最初定義 embedding 層的時候生成的 weight 矩陣(5*3),現(xiàn)在再回顧一下embedding 對 input 數(shù)據(jù)的計算過程堕汞,“查表”結(jié)果顯而易見勺爱。


image.png

最后為了加深我們對embedding查表邏輯的理解,我們可以嘗試對這個全連接層的參數(shù)讯检,使用矩陣乘法來計算一下琐鲁,看一下最后的計算結(jié)果:

test2 = [[1, 0, 0, 0, 0],
        [0, 1, 0, 0, 0],
        [0, 0, 1, 0, 0],
        [0, 0, 0, 0, 1],
        ]
torch.matmul(torch.FloatTensor(test2), my_embedding.weight.data)
image.png

結(jié)果和 embedding 計算結(jié)果一致卫旱!這里也是文章最開始提到的,embedding 直接用查表作為操作围段,而不是矩陣乘法運算顾翼,這大大降低了運算量。


image.png

以上就是 embedding 在對稀疏類別特征的計算過程奈泪,這里有一點要注意适贸,最初 embedding 產(chǎn)生的 weight 可以理解為隨機的,并且整個過程并沒有進(jìn)行訓(xùn)練段磨,所以此時的 embedding 本質(zhì)僅僅是一種低維的表示向量取逾,不具有其他數(shù)據(jù)信息。
embedding 之所以強大苹支,在于 weight 本身是一個可訓(xùn)練的張量,可以接入各種網(wǎng)絡(luò)結(jié)構(gòu)误阻。所以往往 embeddin 作為網(wǎng)絡(luò)結(jié)構(gòu)的第一層债蜜,經(jīng)過中間 n 層網(wǎng)絡(luò)結(jié)構(gòu)處理(n可以為0),最后到輸出層究反。這樣在網(wǎng)絡(luò)的訓(xùn)練過程中寻定,weight 會得到更新,此時 embedding 才具有數(shù)據(jù)信息精耐,直接用這個全連接層的權(quán)重參數(shù)作為特征表達(dá)狼速。代表某一個 id,或者作為 id 的特征表達(dá)(向量的夾角余弦能夠在某種程度上表示不同id間的相似度)卦停。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末向胡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惊完,更是在濱河造成了極大的恐慌僵芹,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件小槐,死亡現(xiàn)場離奇詭異拇派,居然都是意外死亡,警方通過查閱死者的電腦和手機凿跳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門件豌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人控嗜,你說我怎么就攤上這事茧彤。” “怎么了躬审?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵棘街,是天一觀的道長蟆盐。 經(jīng)常有香客問我,道長遭殉,這世上最難降的妖魔是什么石挂? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮险污,結(jié)果婚禮上痹愚,老公的妹妹穿的比我還像新娘。我一直安慰自己蛔糯,他們只是感情好拯腮,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚁飒,像睡著了一般动壤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淮逻,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天琼懊,我揣著相機與錄音,去河邊找鬼爬早。 笑死哼丈,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筛严。 我是一名探鬼主播醉旦,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼桨啃!你這毒婦竟也來了车胡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤优幸,失蹤者是張志新(化名)和其女友劉穎吨拍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體网杆,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡羹饰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了碳却。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片队秩。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昼浦,靈堂內(nèi)的尸體忽然破棺而出馍资,到底是詐尸還是另有隱情,我是刑警寧澤关噪,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布鸟蟹,位于F島的核電站乌妙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏建钥。R本人自食惡果不足惜藤韵,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熊经。 院中可真熱鬧泽艘,春花似錦、人聲如沸镐依。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽槐壳。三九已至然低,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間务唐,已是汗流浹背脚翘。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绍哎,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓鞋真,卻偏偏與公主長得像崇堰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涩咖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容