轉(zhuǎn)載:深度學(xué)習(xí)中 Embedding層兩大作用的個人理解
前一個月接觸到一個概念宅楞,Embedding層慕匠。今天跟大家分享一下個人心得煮剧。
首先鹦赎,我們有一個one-hot編碼的概念傍菇。
假設(shè)猾瘸,我們中文,一共只有10個字。牵触。淮悼。只是假設(shè)啊,那么我們用0-9就可以表示完
比如揽思,這十個字就是“我從哪里來袜腥,要到何處去”
其分別對應(yīng)“0-9”,如下:
我? 從? 哪? 里? 來? 要? 到? 何? 處? 去
0??? 1??? 2??? 3?? 4??? 5?? 6??? 7??? 8 ? 9
那么钉汗,其實我們只用一個列表就能表示所有的對話
如:我? 從? 哪? 里? 來? 要? 到? 何? 處? 去? ——>>>[0 1 2 3 4 5 6 7 8 9]
或:我? 從? 何? 處? 來? 要? 到? 哪? 里? 去? ——>>>[0 1 7 8 4 5 6 2 3 9]
但是羹令,我們看看one-hot編碼方式(詳見:https://blog.csdn.net/tengyuan93/article/details/78930285)
他把上面的編碼方式弄成這樣
# 我從哪里來,要到何處去
[
[1 0 0 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0 0]
[0 0 0 0 1 0 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0]
[0 0 0 0 0 0 1 0 0 0]
[0 0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 1 0]
[0 0 0 0 0 0 0 0 0 1]
]
# 我從何處來损痰,要到哪里去
[
[1 0 0 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 1 0]
[0 0 0 0 1 0 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0]
[0 0 0 0 0 0 1 0 0 0]
[0 0 1 0 0 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 1]
]
即:把每一個字都對應(yīng)成一個十個(樣本總數(shù)/字總數(shù))元素的數(shù)組/列表福侈,其中每一個字都用唯一對應(yīng)的數(shù)組/列表對應(yīng),數(shù)組/列表的唯一性用1表示卢未。如上肪凛,“我”表示成[1。辽社。伟墙。。]爹袁,“去”表示成[远荠。。失息。譬淳。1],這樣就把每一系列的文本整合成一個稀疏矩陣盹兢。
那問題來了,稀疏矩陣(二維)和列表(一維)相比绎秒,有什么優(yōu)勢浦妄。
很明顯,計算簡單嘛见芹,稀疏矩陣做矩陣計算的時候剂娄,只需要把1對應(yīng)位置的數(shù)相乘求和就行,也許你心算都能算出來玄呛;而一維列表阅懦,你能很快算出來?何況這個列表還是一行徘铝,如果是100行耳胎、1000行和或1000列呢惯吕?
所以,one-hot編碼的優(yōu)勢就體現(xiàn)出來了怕午,計算方便快捷废登、表達(dá)能力強(qiáng)。
然而郁惜,缺點也隨著來了堡距。
比如:中文大大小小簡體繁體常用不常用有十幾萬,然后一篇文章100W字扳炬,你要表示成100W X 10W的矩陣吏颖?搔体?恨樟?
這是它最明顯的缺點。過于稀疏時疚俱,過度占用資源劝术。
比如:其實我們這篇文章,雖然100W字呆奕,但是其實我們整合起來养晋,有99W字是重復(fù)的,只有1W字是完全不重復(fù)的梁钾。那我們用100W X 10W的豈不是白白浪費了99W X 10W的矩陣存儲空間绳泉。
那怎么辦?姆泻?零酪?
這時,Embedding層橫空出世拇勃。
插張圖片休息下四苇。
OK, keep going方咆!
接下來給大家看一張圖
鏈接:https://spaces.ac.cn/archives/4122
假設(shè):我們有一個2 x 6的矩陣月腋,然后乘上一個6 x 3的矩陣后,變成了一個2 x 3的矩陣瓣赂。
先不管它什么意思胎源,這個過程,我們把一個12個元素的矩陣變成6個元素的矩陣流译,直觀上宛裕,大小是不是縮小了一半?
也許你已經(jīng)想到了Q揽薄V翱摇所禀!對!7徘铡色徘!不管你想的對不對,但是embedding層操禀,在某種程度上褂策,就是用來降維的,降維的原理就是矩陣乘法颓屑。在卷積網(wǎng)絡(luò)中斤寂,可以理解為特殊全連接層操作,跟1x1卷積核異曲同工>镜搿1楦恪!484很神奇F饕浮O场!
復(fù)習(xí)一下纫塌,矩陣乘法需要滿足一個條件诊县。
A X B時,B的行數(shù)必須等于A的列數(shù)
得出的結(jié)果為A的行數(shù) X B的列數(shù)的一個矩陣
也就是說措左,假如我們有一個100W X10W的矩陣依痊,用它乘上一個10W X 20的矩陣,我們可以把它降到100W X 20怎披,瞬間量級降了胸嘁。。钳枕。10W/20=5000倍=稍ā!鱼炒!
這就是嵌入層的一個作用——降維衔沼。
然后中間那個10W X 20的矩陣,可以理解為查詢表昔瞧,也可以理解為映射表指蚁,也可以理解為過度表,whatever自晰。
--------
--------
--------
接著凝化,既然可以降維,當(dāng)然也可以升維酬荞。為什么要升維搓劫?
這也是很神奇的瞧哟。咱們再舉一個例子:
這張圖,我要你在10米開外找出五處不同枪向!勤揩。。秘蛔。What陨亡?煩請出題者走近兩步,我先把我的刀拿出來深员,您再說一遍題目我沒聽清负蠕。
當(dāng)然,目測這是不可能完成的倦畅。但是我讓你在一米外遮糖,也許你一瞬間就發(fā)現(xiàn)衣服上有個心是不同的,然后再走近半米滔迈,你又發(fā)現(xiàn)左上角和右上角也是不同的止吁。再走近20厘米被辑,又發(fā)現(xiàn)耳朵也不同燎悍,最后,在距離屏幕10厘米的地方盼理,終于發(fā)現(xiàn)第五個不同的地方在耳朵下面一點的云谈山。
但是,其實無限靠近并不代表認(rèn)知度就高了宏怔,比如奏路,你只能距離屏幕1厘米遠(yuǎn)的地方找,找出五處不同臊诊。鸽粉。。出題人你是不是腦袋被門擠了抓艳。触机。。
由此可見玷或,距離的遠(yuǎn)近會影響我們的觀察效果儡首。同理也是一樣的,低維的數(shù)據(jù)可能包含的特征是非称眩籠統(tǒng)的蔬胯,我們需要不停地拉近拉遠(yuǎn)來改變我們的感受野,讓我們對這幅圖有不同的觀察點位他,找出我們要的茬氛濒。
embedding的又一個作用體現(xiàn)了产场。對低維的數(shù)據(jù)進(jìn)行升維時,可能把一些其他特征給放大了舞竿,或者把籠統(tǒng)的特征給分開了涝动。同時,這個embedding是一直在學(xué)習(xí)在優(yōu)化的炬灭,就使得整個拉近拉遠(yuǎn)的過程慢慢形成一個良好的觀察點醋粟。比如:我來回靠近和遠(yuǎn)離屏幕,發(fā)現(xiàn)45厘米是最佳觀測點重归,這個距離能10秒就把5個不同點找出來了米愿。
回想一下為什么CNN層數(shù)越深準(zhǔn)確率越高,卷積層卷了又卷鼻吮,池化層池了又升育苟,升了又降,全連接層連了又連椎木。因為我們也不知道它什么時候突然就學(xué)到了某個有用特征违柏。但是不管怎樣,學(xué)習(xí)都是好事香椎,所以讓機(jī)器多卷一卷漱竖,多連一連,反正錯了多少我會用交叉熵告訴你畜伐,怎么做才是對的我會用梯度下降算法告訴你馍惹,只要給你時間,你遲早會學(xué)懂玛界。因此万矾,理論上,只要層數(shù)深慎框,只要參數(shù)足夠良狈,NN能擬合任何特征。
總之笨枯,它類似于虛擬出一個關(guān)系對當(dāng)前數(shù)據(jù)進(jìn)行映射薪丁。這個東西也許一言難盡吧,但是目前各位只需要知道它有這些功能的就行了猎醇。
想具體理解其作用窥突,建議大家去探究探究卷積神經(jīng)網(wǎng)絡(luò)的各種中間過程,以及反向傳播理論硫嘶。到時候大家再來深入理解嵌入層時阻问,那就一通百通了。