为什么embedding_lookup比使用线性变换的热编码更好?

时间:2016-12-24 16:08:12

标签: tensorflow deep-learning

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

假设我有一百万字,并希望将它们嵌入我的模型中。 使用TF我可以进行嵌入查找,但我需要提供一个大小为[1m * space_size]的矩阵。因此对于50个可训练参数的50个维度。 另一方面,我可以使用尺寸为20的向量对一百万个单词进行热编码。我可以将其嵌入到尺寸为50的空间中,其中[20 * 50]矩阵用于1K参数。便宜得多。由于这个矩阵的权重仍然是可训练的,我期望学习一些关于单词的东西,如果我需要更多的容量,我可以增加空间的大小。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:-1)

随机梯度下降似乎需要显着的过度参数化以便学习,这里有一篇论文 - "Big Neural Networks Waste Capacity"