深度学习之embedding层讲解

Embedding

要知道embedding的作用,首先要了解独热编码(one-hot encoding)。假设现在有如下对应编码关系:

0:我
1:是
2:一
3:头
4:猪

那么用来表示一句话比如:“我是猪”表示为:
0,1,4
而one-hot编码中只存在 0 和1,有多少个字要编码,独热编码的每一行长度就会有多长,比如字典中一共有 5 个字 “我是一头猪” 被从 0-4 进行了编码,那么独热编码的每一行就会有5个用 0或1表示的位置,即使可能要表达的语句只有很短的句子,例如:

[1,0,0,0,0] 我-----0
[0,1,0,0,0] 是-----1
[0,0,0,0,1] 猪-----4

在每一句对应的编码位置会被设置成 1,其余的地方都是 0,也就是说,每一行只会有一个1。
one-hot编码的优势是:计算方便快捷、表达能力强。 因为对于这样的稀疏矩阵做矩阵计算的时候,只需要把1对应位置的数相乘求和就可以,但问题也很明显,稀疏矩阵的资源占用太恐怖了,尤其体现在长篇文字的处理中,例如:

简体汉字常用3000个被从0-2999编号,也就是说在这套系统中每个单字的独热编码是3000位,如果你现在有一篇10000字的文章,那么用独热编码的方式编码之后其大小为10000×3000 = 30000000,很恐怖吧,最重要的是,其中很多东西是重复的,只是在文章的不同位置,这样会大量的浪费存储空间。所以如何解决这个问题呢····

embedding应运而生~~~~

深度学习之embedding层讲解_第1张图片
embedding的原理是使用矩阵乘法来进行降维,从而达到节约存储空间的目的。
假设:我们有一个 2 × 6 2 × 6 2×6 的矩阵,然后乘上一个 6 × 3 6 × 3 6×3 的矩阵后,变成了一个 2 × 3 2 × 3 2×3 的矩阵。

先不管它什么意思,这个过程,我们把一个12个元素的矩阵变成6个元素的矩阵,直观上,大小是不是缩小了一半?

而且,值得注意的是,虽然直观上矩阵的大小变小了,但是其实数字蕴藏的信息并没有改变,只是按照某一种映射关系将原本矩阵的信息转换到了一个新的维度的矩阵里面;只要按照逆向的映射关系,对矩阵进行相乘,其又会回到本身的模样!!!从这里来看,embedding是通过某种矩阵乘法来实现矩阵数据的降维

如果你想把数据使用另外一个维度的张量来表示,而不想造成信息的损失,可以使用 embedding 来调整。


那么embedding 除了实现降维之外,还有一个很重要的逆向功能–升维

当矩阵维度很低的时候,有些有效的信息是不能够被很完整地提取出来的,举个不恰当的例子:
在纸上写了一个字
深度学习之embedding层讲解_第2张图片
经过embedding之后相当于把纸折起来或者揉搓了一下,变成了:深度学习之embedding层讲解_第3张图片
所以在提取信息的时候可能无法非常顺理,而通过 embedding 进行升维之后,就相当于将整张纸展开,方便于改变成不同的感受野进行信息的提取。

对低维的数据进行升维时,可能把一些其他特征给放大了,或者把笼统的特征给分开了。同时,这个embedding是一直在学习在优化的,就使得整个过程慢慢形成一个良好的观察点

参考文章:深度学习中 Embedding讲解

你可能感兴趣的:(日常学习,深度学习,python)