sg_min
是由一些相当基础的优化代码构建而成,这些代码经过了几何化处理,使其能够在施蒂费尔流形上运行。几何化的基本要素包括内积的规则、如何将无约束微分转化为受约束梯度、如何协变地微分梯度场,以及如何在流形上移动。
sg_min
程序解析参数并设置默认值。最后,它会调用 sg_newton
、sg_dog
、sg_frcg
或 sg_prcg
。
以下是 sg_newton
和 sg_frcg
(作为示例)的伪代码。
这些是相当通用的优化程序。在这个描述层面,人们不一定能将它们与无约束程序区分开来(参见[170,192,368,338])。将它们置于施蒂费尔流形上的关键在于 grad
、dgrad
、ip
(点积)和 move
的定义,这些定义确保了施蒂费尔流形的约束得到遵守。同样,sg_dog
和 sg_prcg
也经过了类似的几何化处理。