PyTorch 线性代数梯度

Posted

技术标签:

【中文标题】PyTorch 线性代数梯度【英文标题】:PyTorch Linear Algebra Gradients 【发布时间】:2017-12-03 09:47:30 【问题描述】:

我希望通过奇异值分解来反向传播梯度以进行正则化。 PyTorch 目前不支持通过奇异值分解进行反向传播。

我知道我可以编写自己的自定义函数来操作变量;获取它的 .data 张量,将 torch.svd 应用于它,将一个变量包裹在其奇异值周围并在前向传递中返回它,并在后向传递中将适当的雅可比矩阵应用于传入的梯度。

但是,我想知道是否有更优雅(并且可能更快)的解决方案,我可以直接覆盖“类型变量不实现无状态方法 svd”错误,调用 Lapack 等?

如果有人可以指导我完成我需要查看的适当步骤和源文件,我将不胜感激。我想这些步骤同样适用于目前没有关联反向方法的其他线性代数运算。

【问题讨论】:

【参考方案1】:

torch.svd 现在可以在 Pytorch 主控器中使用前向和后向传递:

http://pytorch.org/docs/master/torch.html#torch.svd

您需要从源代码安装 Pytorch: https://github.com/pytorch/pytorch/#from-source

【讨论】:

【参考方案2】:

PyTorch 的torch.linalg.svd 操作支持梯度计算,但注意:

如果输入不是满秩或具有非唯一奇异值,则使用 UVh 计算的梯度可能会不稳定。

【讨论】:

以上是关于PyTorch 线性代数梯度的主要内容,如果未能解决你的问题,请参考以下文章

PyTorch-线性回归_SGD_动量梯度下降

PyTorch深度学习:用PyTorch实现线性回归

线性回归(Linear Regression)——原理均方损失小批量随机梯度下降PyTorch实现

Pytorch实现线性回归(API完成)

Pytorch实现线性回归(手动完成)

翻译: 3.3. 线性回归的简明实现 pytorch