我希望通过奇异值分解来反向传播渐变以用于正则化目的。 PyTorch目前不支持通过奇异值分解进行反向传播。
我知道我可以编写自己的自定义函数来操作变量;取其.data张量,将torch.svd应用于它,将变量包裹在其奇异值周围并在前向传递中返回,在后向传递中将适当的雅可比矩阵应用于传入的渐变。
然而,我想知道是否有更优雅(并且可能更快)的解决方案,我可以覆盖"类型变量不会实现无状态方法svd"直接出错,请致电Lapack等?
如果有人可以指导我完成我需要查看的相应步骤和源文件,我将非常感激。我认为这些步骤同样适用于当前没有相关后向方法的其他线性代数运算。
非常感谢
答案 0 :(得分:1)
torch.svd
:
http://pytorch.org/docs/master/torch.html#torch.svd
您需要从源代码安装Pytorch: https://github.com/pytorch/pytorch/#from-source
答案 1 :(得分:0)
PyTorch 的 torch.linalg.svd
操作支持梯度计算,但注意:
如果输入不是满秩或具有非唯一奇异值,则使用 U
和 Vh
计算的梯度可能不稳定。