Scipy Optimize(L-BFGS-B)输出中变量M代表什么含义?
L-BFGS-B运行日志中参数M的含义
运行Scipy Optimize的L-BFGS-B算法时输出的日志内容如下:
RUNNING THE L-BFGS-B CODE
Machine precision = 2.220D-16
N = 425 M = 10
At X0 0 variables are exactly at the bounds
日志中参数的具体技术含义:
- N是已知的可训练参数总维度,即优化问题的决策变量总个数,本次任务中为425维。
- M是L-BFGS算法的有限记忆长度,对应Scipy接口里的
maxcor超参数,默认值就是10。
L-BFGS作为有限内存版本的拟牛顿优化算法,不会像原版BFGS那样存储完整的N×N大小的海森逆矩阵——当参数维度较高时,全量存储海森矩阵的内存开销会随维度平方级增长,成本极高。它只会保留最近M轮迭代过程中计算得到的曲率校正向量对,用这M组历史信息近似构造海森逆矩阵,进而计算每一步的迭代搜索方向。 - 该参数的取值直接影响算法效率和收敛表现:
- M设得越大,对海森矩阵的近似精度越高,单步迭代的内存占用、计算量也同步升高,在损失曲面不光滑、曲率变化大的场景下,适当调大M可能提升收敛稳定性
- M设得越小,单步迭代速度越快、内存开销越低,但海森近似的精度会下降,可能需要更多迭代步才能收敛,部分场景下还可能出现迭代震荡
- 本次日志中M=10是算法默认配置,对于425维参数的优化场景属于通用合理取值,大部分场景下不需要额外调整。
内容的提问来源于stack exchange,提问作者tonygrey
相关产品推荐
相关产品推荐

