深度学习中Embedding的理解

这学期为数不多的精读论文中基本上都涉及到了Embedding这个概念,下面结合自己的理解和查阅的资料对这个概念进行一下梳理。

========================================================

首先了解one-hot(独热)编码

在机器学习算法中,会遇到很多分类的特征,比如颜色中的红橙黄绿、国籍、性别等,这些特征值都是离散的,但是要用算法实现的话,要对这些特征进行特征数字化处理。

也就是对这些特征进行数字化编码,比如把颜色中的红橙黄绿对应为[0,1,2,3],但是这样也存在不合理性,1+2=3,也就是橙+黄变成绿,每个特征值又没有数值叠加的特点,在逻辑上显然是说不通的。

one-hot编码,通过查阅资料,给出的定义是又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都是由其独立的寄存器位,并且在任意时候只有一位有效。是分类变量作为二进制向量的表示,首先要求将分类值映射到整数值,然后每个整数值被表示为二进制向量,除了整数的索引外,都是0。

举个例子,

#今天也要加油鸭
[
[1 0 0 0 0 0 0]
[0 1 0 0 0 0 0]
[0 0 1 0 0 0 0]
[0 0 0 1 0 0 0]
[0 0 0 0 1 0 0]
[0 0 0 0 0 1 0]
[0 0 0 0 0 0 1]
]

那么,每一个字都被表示为一个包含七个元素的数组,每个字都与列表中的唯一一个数组对应,构成了一个稀疏矩阵。

如果将其表示为列表的形式:

#今天也要加油鸭
[0 1 2 3 4 5 6]

one-hot编码形成稀疏矩阵显然更便于计算与理解。

但是如果当这个文本数量变大,不是一句话,而是一本长篇小说,那需要表示成为一个...无法想象的矩阵,那这样的矩阵会过于稀疏,过度占用资源!

===============================

Embedding层的作用

一维列表也不行,二维稀疏矩阵也不行,怎么办呢?

这里就引入了Embedding的概念,由密集向量表示,实现降维!

“并不是每个单词都会被一个向量来代替,而是被替换为用于查找嵌入矩阵中向量的索引”

同时训练神经网络时,每个Embedding向量都会得到更新,即在不断升维和降维的过程中,找到最适合的维度。

===================

参考的博文

https://juejin.im/entry/5acc23f26fb9a028d1416bb3

https://blog.csdn.net/weixin_42078618/article/details/82999906

https://blog.csdn.net/kl1411/article/details/82981955

https://blog.csdn.net/program_developer/article/details/80852710

https://blog.csdn.net/u010412858/article/details/77848878

 

猜你喜欢

转载自www.cnblogs.com/lyeeer/p/10310135.html