首页 > 解决方案 > 如何将神经网络层限制为简单的 n 维旋转层?

问题描述

我正在寻找约束我的神经网络的一层以专门找到其输入的最佳旋转以满足目标。(我的最终目标,R旋转层在哪里,形式为R.transpose() @ f(R @ z))。

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

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

并且theta是一个可学习的参数。但是,我不知道如何为 d 维空间(其中 d>10)实际设置它。我已经尝试查看有关如何制作 d 维旋转矩阵的资源,它在线性代数中变得很重要,并且超出了我的想象。感觉这应该比看起来更容易,所以我觉得我忽略了一些东西(比如 R 应该只是一个普通的线性层,没有任何非线性激活)。

有人有想法么?我提前感谢你:)

标签: neural-networklinear-algebrarotational-matrices

解决方案


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


推荐阅读