Tensorflow 为什么嵌入查找比使用线性变换的热编码更好?

Tensorflow 为什么嵌入查找比使用线性变换的热编码更好?,tensorflow,deep-learning,Tensorflow,Deep Learning,我想我在这里遗漏了一些明显的东西,但我希望能得到一些帮助来解决这个问题 假设我有一百万个单词,并希望将它们嵌入到我的模型中。 使用TF,我可以进行嵌入查找,不过我需要提供一个大小为[1m*space\u size]的矩阵。因此,对于50个尺寸,得出50M的可训练参数。 另一方面,我可以用20维向量对一百万个单词进行热编码。我可以把它嵌入到一个50维的空间中,用[20*50]矩阵表示1K参数。便宜多了。由于这个矩阵的权重仍然是可训练的,所以我希望了解一些关于单词的知识,如果我需要更多的容量,我可以

我想我在这里遗漏了一些明显的东西,但我希望能得到一些帮助来解决这个问题

假设我有一百万个单词,并希望将它们嵌入到我的模型中。 使用TF,我可以进行嵌入查找,不过我需要提供一个大小为[1m*space\u size]的矩阵。因此,对于50个尺寸,得出50M的可训练参数。 另一方面,我可以用20维向量对一百万个单词进行热编码。我可以把它嵌入到一个50维的空间中,用[20*50]矩阵表示1K参数。便宜多了。由于这个矩阵的权重仍然是可训练的,所以我希望了解一些关于单词的知识,如果我需要更多的容量,我可以增加空间的大小

这在理论上,在实践中我尝试过,但模型没有学到任何东西。所以我的问题是,为什么?
多亏了

为了学习,随机梯度下降似乎需要显著的过参数化,这里有一篇文章就是这样写的--

确实可以用20位二进制数对一百万个单词进行编码。但有一种热编码不是二进制的。这意味着整个向量中只有一个数字可以是一,其余数字为零。那个数字表示这个词的索引。所以你需要一个200万长度的向量来编码200万个单词。然后,需要一个200万x 50的矩阵作为模型参数


使用20位二进制表示法是有问题的,因为在20维空间中,您任意指定某些单词彼此更接近。最好让模型学习这些关联,而不是预先定义它们。

我将从摘要中看一看,我不确定情况是否如此。我通过进一步增加网络中的层的大小来补偿较小的嵌入层。第一部分对我来说是有意义的。第一部分对我来说是有意义的。谢谢关于第二段。我不理解通过嵌入在空间中分配随机向量和分配固定的、小的编码以及学习从编码到嵌入空间的转换之间的区别。有什么线索吗?输入中的相似向量将映射到输出中的相似向量。当您使用一个热编码时,所有向量都相同/不同。当您使用固定编码时,您已经预先确定,如果某些单词具有相似的二进制编码,则它们必须彼此相似。这不是你不会做的事。另外,20x50参数太小,无法编码有关语言的有用信息。你需要更多的参数来记忆这些信息,这很有意义。感谢使用嵌入时,请确保一百万个单词形成一个有意义的文本,而不仅仅是某个字典中任意/排序的单词列表。