【发布时间】:2023-03-19 20:49:01
【问题描述】:
我有一篇论文中的目标函数,我想通过梯度下降来最小化它。我还没有“从头开始”做这件事,并且想要一些关于如何手动编码的建议。目标函数为:
T(L) = tr(X.T L^s X) - beta * ||L||。
其中L是要估计的N x N矩阵正半定矩阵,X是N x M矩阵,beta是正则化常数,X.T = X转置,||.||是弗罗贝尼乌斯范数。
另外,L^s 是矩阵指数,其中 L^s = F Λ^s F.T,其中 F 是 L 的特征向量的矩阵,Λ 是 L 的特征值的对角矩阵。
目标函数的导数为:
dT/dL = sum_{从 r = 0 到 r = s - 1} L^r (XX.T) L^(s-r-1) - 2 * beta * L
我已经完成了非常基本的梯度下降问题(例如矩阵分解),其中优化了矩阵的每个元素,或者使用包/库。这种问题我习惯了比较复杂,我希望你们中的一些对这种事情更有经验的人可以帮助我。
非常感谢任何一般性建议以及如何在 python 或 R 中编写代码的具体建议。
这是具有此功能的论文的链接: https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0128136#sec016
非常感谢您的帮助!
保罗
【问题讨论】:
-
问题很广泛,您需要搜索 - SO 和其他地方的大量优化原始/源代码:stackoverflow.com/questions/43217617/…
-
这很公平 - 我想我应该更具体一些。我熟悉如何在更简单的问题上实现梯度下降,例如线性回归。我只是不知道要估计的变量何时是矩阵形式/目标函数是否不像 SSE 那样简单,是否应该采用相同的方法。我很难在 GD 和我正在尝试做的事情之间找到“介于”GD 之间的材料,并且只想要一般指导或示例,无论对回答问题的人来说是最容易的。我将来会尝试更具体。谢谢!
标签: python r gradient-descent objective-function