我有一篇论文中的目标函数,我想用梯度下降来最小化。我还没有“从头开始”做这件事,并且想要一些关于如何手动编码的建议。目标函数为:
T(L) = tr(XT L^s X) - beta * ||L||。
其中L是N x N矩阵要估计的正半定矩阵,X是N x M矩阵,beta是正则化常数,XT = X转置,||.|| 是弗罗贝尼乌斯范数。
此外,L^s 是矩阵指数,其中 L^s = F Λ^s FT,其中 F 是 L 的特征向量的矩阵,Λ 是 L 的特征值的对角矩阵。
目标函数的导数是:
dT/dL = sum_{从 r = 0 到 r = s - 1} L^r (XX.T) L^(sr-1) - 2 * beta * L
我已经完成了非常基本的梯度下降问题(例如矩阵分解),其中优化了矩阵的每个元素,或者使用包/库。这种问题我习惯了比较复杂,我希望你们中的一些对这种事情更有经验的人可以帮助我。
非常感谢任何一般性建议以及如何在 python 或 R 中编写代码的具体建议。
这是具有此功能的论文的链接: https ://journals.plos.org/plosone/article?id=10.1371/journal.pone.0128136#sec016
非常感谢您的帮助!
保罗