如何将神经网络层约束为 n 维旋转层?

3

我希望限制神经网络中的一层,以特定方式寻找其输入的最佳旋转,以满足某个目标。 (我的最终目标,其中R是旋转层,形式为R.transpose() @ f(R @ z))。

我希望通过梯度下降来训练这个(+其他组件)。如果z只有二维,那么我可以这样说

R = [ cos(theta)   -sin(theta)
      sin(theta)    cos(theta)]

我希望 theta 可以成为一个可学习的参数。但是,对于 d 维空间(其中 d>10),我不知道如何实际设置它。我尝试查阅有关如何制作 d 维旋转矩阵的资源,但这涉及到线性代数并且超出了我的能力范围。感觉这应该比看起来更容易,所以我觉得我可能忽略了什么(比如 R 是否应该只是一个普通的线性层,没有任何非线性激活)。

有人有任何想法吗?提前感谢您:)


一个跨站点的帖子:https://stats.stackexchange.com/q/546220/144441 - OmG
抱歉,我不确定这个问题应该放在StackOverflow还是交叉验证上发布,所以我在两个地方都发布了。我认为交叉验证的答案很好,所以我应该将其复制到这里(并注明出处),还是应该删除此帖子? - Sean K
1个回答

1
QR分解可以帮助解决这个问题(因为Q是正交的),通过将W作为一个无约束可学习矩阵(没有偏置项)并解决W = QR,然后实际使用Q作为您的正交矩阵。如果您使用pytorch QR,则反向传播将能够从QR分解中返回并更新W。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接