嵌入层和密集层有什么区别?
deep-learning
keras
keras-layer
machine-learning
14
0

Keras中嵌入层的文档说:

将正整数(索引)转换为固定大小的密集向量。例如。 [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]

我相信,也可以通过将输入编码为长度为vocabulary_size单热向量并将其馈入密集层来实现

嵌入层是仅用于此两步过程的便利,还是在幕后进行了一些幻想?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

从数学上来说,区别是:

  • 嵌入层执行选择操作。在喀拉拉邦,此层等效于:

     K.gather(self.embeddings, inputs) # just one matrix 
  • 密集层执行点积运算以及可选的激活:

     outputs = matmul(inputs, self.kernel) # a kernel matrix outputs = bias_add(outputs, self.bias) # a bias vector return self.activation(outputs) # an activation function 

您可以通过一键编码来模拟具有完全连接层的嵌入层,但是密集嵌入的全部目的是避免一键表示。在NLP中,单词词汇量的大小可以为100k(有时甚至是一百万)。最重要的是,通常需要批量处理单词序列。处理单词索引序列的批次将比单热点向量的序列批次的效率高得多。此外,在向前和向后传递中, gather操作本身都比矩阵点积更快。

收藏
评论

嵌入层更快 ,因为它基本上等同于简化假设的密集层。

想象一下一个具有以下权重的词到嵌入层:

w = [[0.1, 0.2, 0.3, 0.4],
     [0.5, 0.6, 0.7, 0.8],
     [0.9, 0.0, 0.1, 0.2]]

Dense层将像对待实际权重一样对待这些权重,以执行矩阵乘法 。嵌入层会将这些权重简单地视为向量列表,每个向量代表一个单词 ;词汇表中的第0个单词是w[0] ,第1个单词是w[1]等。


例如,使用上面的权重和这句话:

[0, 2, 1, 2]

幼稚的基于Dense的网络需要将该句子转换为1-hot编码

[[1, 0, 0],
 [0, 0, 1],
 [0, 1, 0],
 [0, 0, 1]]

然后做一个矩阵乘法

[[1 * 0.1 + 0 * 0.5 + 0 * 0.9, 1 * 0.2 + 0 * 0.6 + 0 * 0.0, 1 * 0.3 + 0 * 0.7 + 0 * 0.1, 1 * 0.4 + 0 * 0.8 + 0 * 0.2],
 [0 * 0.1 + 0 * 0.5 + 1 * 0.9, 0 * 0.2 + 0 * 0.6 + 1 * 0.0, 0 * 0.3 + 0 * 0.7 + 1 * 0.1, 0 * 0.4 + 0 * 0.8 + 1 * 0.2],
 [0 * 0.1 + 1 * 0.5 + 0 * 0.9, 0 * 0.2 + 1 * 0.6 + 0 * 0.0, 0 * 0.3 + 1 * 0.7 + 0 * 0.1, 0 * 0.4 + 1 * 0.8 + 0 * 0.2],
 [0 * 0.1 + 0 * 0.5 + 1 * 0.9, 0 * 0.2 + 0 * 0.6 + 1 * 0.0, 0 * 0.3 + 0 * 0.7 + 1 * 0.1, 0 * 0.4 + 0 * 0.8 + 1 * 0.2]]

=

[[0.1, 0.2, 0.3, 0.4],
 [0.9, 0.0, 0.1, 0.2],
 [0.5, 0.6, 0.7, 0.8],
 [0.9, 0.0, 0.1, 0.2]]

但是, Embedding层仅查看[0, 2, 1, 2] Embedding [0, 2, 1, 2]并采用索引为0、2、1和[0, 2, 1, 2]的权重立即获取

[w[0],
 w[2],
 w[1],
 w[2]]

=

[[0.1, 0.2, 0.3, 0.4],
 [0.9, 0.0, 0.1, 0.2],
 [0.5, 0.6, 0.7, 0.8],
 [0.9, 0.0, 0.1, 0.2]]

所以这是相同的结果,只是希望以更快的方式获得。


Embedding层确实有局限性:

  • 输入必须是[0,vocab_length)中的整数。
  • 没有偏见。
  • 没有激活。

但是,如果您只想将整数编码的单词转换为嵌入,则这些限制都不重要。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题