NN嵌入层

数据挖掘 机器学习 深度学习 张量流 词嵌入 向量空间模型
2021-10-01 06:39:27

一些神经网络库(例如 tensorflow 和 pytorch)提供了嵌入层。在过去实现了 word2vec 之后,我理解想要低维表示背后的原因。

然而,嵌入层似乎只是一个线性层。在所有其他条件相同的情况下,嵌入层不仅会学习与等效线性层相同的权重吗?如果是这样,那么使用嵌入层有什么好处?

在 word2vec 的情况下,低维表示可以用于其他任务(臭名昭著的国王/王后示例)。但是,如果您的嵌入层永远不会用于替代任务,那么它的目的是什么?

2个回答

在理论上,嵌入层是一个线性层,没有任何区别。然而,在实践中,如果你正在构建一个深度学习软件,你必须在它们之间做出改变。这是因为使用传统的矩阵乘法来应用嵌入层是没有意义的,因为输入矩阵非常稀疏。出于这个原因,进行查找会更快,尽管从理论上讲它相当于进行矩阵乘法。

嵌入层将您的词汇索引输入映射到一个密集向量,因此它充当查找层,并且(如果设置为可训练)将仅受一些权重的影响,受一批训练数据中出现的单词的影响。具有线性层,它将由所有数据批次按顺序训练,并且不会提供查找功能(输入的每个单词将共享相同的权重)。

另外,您以不同的方式考虑 word2vec 是正确的。当使用自定义的可训练嵌入层时,密集向量将针对您正在考虑的任务进行优化(通过 SGD),而 word2vec 等模型的作用类似于语言建模,并在嵌入中找到语义最佳表示。

因此,根据数据大小,训练期间找到的表示可能比中性word2vec 或其他模型找到的更适合您的任务。