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 也经过了类似的几何化处理。