gpt4 book ai didi

machine-learning - 嵌入层和密集层有什么区别?

转载 作者:行者123 更新时间:2023-11-30 08:21:26 24 4
gpt4 key购买 nike

Embedding Layer 的文档在 Keras 中说:

Turns positive integers (indexes) into dense vectors of fixed size. eg. [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]

我相信这也可以通过将输入编码为长度为 vocabulary_size 的 one-hot 向量,并将它们输入 Dense Layer 来实现。 .

嵌入层仅仅是为了这两个步骤的过程提供便利,还是在幕后发生了一些更奇特的事情?

最佳答案

嵌入层速度更快,因为它本质上相当于进行简化假设的密集层。

想象一下具有这些权重的单词到嵌入层:

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]]

密集层会将这些视为用于执行矩阵乘法的实际权重。嵌入层将简单地将这些权重视为向量列表,每个向量代表一个单词;词汇表中的第 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] 并获取索引为 0、2、1 和 1 处的层的权重。两个立即得到

[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]]

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

<小时/>

嵌入层确实有局限性:

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

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

关于machine-learning - 嵌入层和密集层有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47868265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com