首页 > 解决方案 > Tensorflow 嵌入层内部的网络结构是什么?

问题描述

Tensoflow Embedding Layer ( https://www.tensorflow.org/api_docs/python/tf/keras/layers/Embedding ) 好用,还有海量文章讲“如何使用” Embedding ( https://machinelearningmastery .com/what-are-word-embeddings/https://www.sciencedirect.com/topics/computer-science/embedding-method)。但是,我想知道 Tensorflow 或 Pytorch 中“嵌入层”的实现。是word2vec吗?是弓箭吗?它是一个特殊的密集层吗?

标签: tensorflowword2vecembedding

解决方案


在结构方面,Dense层和Embedding层都是隐藏层,其中包含神经元。不同之处在于它们对给定输入和权重矩阵的操作方式。

一个Dense层通过将输入相乘、向其添加偏差并对其应用激活函数来对赋予它的权重矩阵执行操作。而Embeddinglayer 使用权重矩阵作为查找字典。

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

from keras.layers import Embedding

embedding_layer = Embedding(1000, 64)

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

当你实例化一个嵌入层时,它的权重(它的内部标记向量字典)最初是随机的,就像任何其他层一样。在训练期间,这些词向量通过反向传播逐渐调整,将空间结构化为下游模型可以利用的东西。一旦完全训练,嵌入空间将显示大量结构——一种专门针对您正在训练模型的特定问题的结构。

-- F. Chollet 用 Python 进行深度学习


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

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


推荐阅读