2017-12-18 309 views
1

Embedding图层“图层疏”中列出的限制:为什么PyTorch中的嵌入实现为Sparse Layers?在PyTorch

请记住,只有优化的数量有限支持稀疏梯度:目前它的optim.SGD(CUDA和CPU),和Optim .Adagrad(cpu)

这是什么原因?例如在Keras中,我可以使用任何优化器来训练带有嵌入层的体系结构。

+0

最好在[PyTorch论坛](https://discuss.pytorch.org/)上提出这样的问题。 – jdhao

+0

好主意!事实上,我很快就能够在搜索PyTorch论坛后立即回答我的问题! – Imran

+0

你的回答并没有真正回答你的问题,即为什么嵌入实现为稀疏层。 – jdhao

回答

1

在上曲面嵌入仔细检查稀疏梯度是可选的,并且可以在被打开或关闭与sparse参数:

类torch.nn.Embedding(num_embeddings,embedding_dim,padding_idx =无,max_norm =无, norm_type = 2,scale_grad_by_freq =假,稀疏=假

其中:

sparse(布尔值,可选) - 如果为True,渐变w.r.t.权重矩阵 将是一个稀疏张量。有关稀疏 渐变的更多详细信息,请参阅注释。

,并提到了“注意事项”是我在这个问题引述有关优化的数量有限,而支持稀疏梯度。

更新:

这在理论上是可能的,但在技术上很难实现稀疏梯度一些优化方法。 PyTorch repo中有一个open issue可以添加对所有优化器的支持。

关于原来的问题,我相信,因为它是能够对输入索引操作,而不是直接将它们转换为一个热的编码为输入到致密层曲面嵌入可被视为稀疏。这在@Maxim's解答我的related question解释。