neural-network - 如何将神经网络层限制为简单的 n 维旋转层?
问题描述
我正在寻找约束我的神经网络的一层以专门找到其输入的最佳旋转以满足目标。(我的最终目标,R
旋转层在哪里,形式为R.transpose() @ f(R @ z)
)。
我希望通过梯度下降来训练这个(+其他组件)。如果z只是二维的,那么我可以说
R = [ cos(theta) -sin(theta)
sin(theta) cos(theta)]
并且theta
是一个可学习的参数。但是,我不知道如何为 d 维空间(其中 d>10)实际设置它。我已经尝试查看有关如何制作 d 维旋转矩阵的资源,它在线性代数中变得很重要,并且超出了我的想象。感觉这应该比看起来更容易,所以我觉得我忽略了一些东西(比如 R 应该只是一个普通的线性层,没有任何非线性激活)。
有人有想法么?我提前感谢你:)
解决方案
QR 分解可以帮助解决这个问题(因为 Q 是正交的),方法是让 W 成为一个不受约束的可学习矩阵(没有偏置项)并求解 W = QR,然后实际使用 Q 作为您的正交。如果您使用pytorch QR,那么反向传播将能够从 QR 分解中返回并更新 W。
推荐阅读
- reactjs - 在 React 中成功调用操作后如何从组件重定向?
- python - 做BeautifulSoup(source_code,'html.parser')时“html.parser”是什么意思?
- r - 如何防止我的 ggplot2 时间线图上的信息被截断
- c# - 如何解决 Quartz.NET (C#) 中的休眠问题?
- flutter - 使用用户的偏好来计算
- python - 使用抓取的图像名称创建链接
- amazon-web-services - 如何在火花中加载存储在ec2单节点hadoop集群中的数据集
- java - Mockito 验证方法如何工作?
- javascript - 您如何使用 GraphQL 和 Mongoose 处理多个验证错误?
- javascript - 关闭弹出窗口?