2017-12-18 179 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解釋。