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

我想我在这里遗漏了一些明显的东西,但是我会喜欢一些帮助来解决这个问题.

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

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

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

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

点赞