为什么PyTorch中的嵌入实现为Sparse Layers?在PyTorch

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

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

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

回答:

在上曲面嵌入仔细检查稀疏梯度是可选的,并且可以在被打开或关闭与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解释。

以上是 为什么PyTorch中的嵌入实现为Sparse Layers?在PyTorch 的全部内容, 来源链接: utcz.com/qa/263252.html

回到顶部