Tensorflow 嵌入层内部的网络结构是什么?

What is the network structure inside a Tensorflow Embedding Layer?

Tensoflow 嵌入层 (https://www.tensorflow.org/api_docs/python/tf/keras/layers/Embedding) 易于使用, 并且有大量文章在谈论 “如何使用”嵌入 (https://machinelearningmastery.com/what-are-word-embeddings/, https://www.sciencedirect.com/topics/computer-science/embedding-method) . 但是,我想知道 Tensorflow 或 Pytorch 中非常“嵌入层”的实现。 是word2vec吗? 是Cbow吗? 是特殊的Dense Layer吗?

结构方面,Dense层和Embedding层都是隐藏层,里面有神经元。区别在于它们对给定输入和权重矩阵的操作方式。

A Dense 层通过乘以输入、添加偏置并应用激活函数来对给定的权重矩阵执行操作。而 Embedding 层使用权重矩阵作为查找字典。

最好将嵌入层理解为将整数索引(代表特定单词)映射到密集向量的字典。它以整数作为输入,在内部字典中查找这些整数,然后 returns 关联向量。它实际上是一个字典查找。

from keras.layers import Embedding

embedding_layer = Embedding(1000, 64)

这里1000表示字典中的单词数,64表示这些单词的维度。直观上,嵌入层就像任何其他层一样,将尝试为任何单词找到 64 维 [ n1, n2, ..., n64] 的向量(实数)。该向量将表示该特定单词的语义。它将像任何其他层一样在使用反向传播进行训练时学习此向量。

When you instantiate an Embedding layer, its weights (its internal dictionary of token vectors) are initially random, just as with any other layer. During training, these word vectors are gradually adjusted via backpropagation, structuring the space into something the downstream model can exploit. Once fully trained, the embedding space will show a lot of structure—a kind of structure specialized for the specific problem for which you’re training your model.

-- F. Chollet Python 的深度学习


编辑 - “反向传播”如何用于训练 Embedding Layer 的查找矩阵?

Embedding层类似于没有任何激活函数的线性层。理论上,Embedding 层也执行矩阵乘法,但不会通过使用任何类型的激活函数为其添加任何非线性。因此 Embedding 层中的反向传播类似于任何线性层。但实际上,我们不在嵌入层中进行任何矩阵乘法,因为输入通常是一个热编码的,并且权重与一个热编码向量的矩阵乘法就像查找一样简单。