4

简单说说神经网络中的Embedding

 2 years ago
source link: https://allenwind.github.io/blog/6498/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Mr.Feng Blog

NLP、深度学习、机器学习、Python、Go

简单说说神经网络中的Embedding

Embedding在序列建模中是标配组件,在NLP任务中更是不可或缺,那么Embedding是什么呢?

这里以NLP作为背景来谈谈Embedding,其他领域也是可以这样迁移理解。

什么是Embedding?

Embedding是一个没有激活函数和偏置项的Dense网络,也就是一个矩阵W∈R|V|×mW∈R|V|×m​​,

W=⎡⎢ ⎢ ⎢ ⎢ ⎢⎣w1,1w1,2…w1,mw2,1w2,2…w2,m⋮⋮⋮⋮w|V|,1w|V|,2…w|V|,m⎤⎥ ⎥ ⎥ ⎥ ⎥⎦∈R|V|×mW=[w1,1w1,2…w1,mw2,1w2,2…w2,m⋮⋮⋮⋮w|V|,1w|V|,2…w|V|,m]∈R|V|×m

对于词wiwi表示词表中的第ii个词,用one-hot表示有,

one-hot(wi)=[0,…,1,…,0]∈R1×|V|one-hot⁡(wi)=[0,…,1,…,0]∈R1×|V|

位置ii为1,其他为00​。Embedding要做的事情就是把词wiwi的onehot离散表示转变为稠密的向量,

xi=one-hot(wi)×W=[0,…,1,…,0]×W=[wi1,wi2,…,wim]xi=one-hot⁡(wi)×W=[0,…,1,…,0]×W=[wi1,wi2,…,wim]

也就相当于取矩阵WW的第ii行作为词wiwi的稠密表示,也就是说对于onehot与矩阵相乘,结果直接取矩阵相应行即可,而避免复杂的矩阵乘积过程。这就是Embedding的原理和作用,可以简单表示为,

xi=Embedding(i)xi=Embedding⁡(i)

词wiwi在字表V中对应编码ii输入Embedding,获得该词的稠密表示。于是,对于句子(词ID序列)i,j,k,…i,j,k,…,有

[xi,xj,xk,…]=Embedding([i,j,k,…])[xi,xj,xk,…]=Embedding⁡([i,j,k,…])

再多说一点,有了这样的词向量序列之后,就可以直接计算它们的背景向量,如

h=1C(xi+xj+…)h=1C(xi+xj+…)

然后就可以送入一个分类器完成简单的分类任务。

本文用十分简洁的语言解释了Embedding的本质就是不带偏置项、激活函数的Dense层,即全连接层,由于输入为one-hot,因此用查表的方式来替代矩阵乘积。

转载请包括本文地址:https://allenwind.github.io/blog/6498
更多文章请参考:https://allenwind.github.io/blog/archives/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK