关于scipy.optimize.minimize()中BFGS算法线搜索阶段是否重复计算目标函数梯度的技术问询
scipy.optimize.minimize()中BFGS算法线搜索阶段是否重复计算目标函数梯度的技术问询
嘿,这个问题问到点子上了,尤其是当你的梯度计算成本高得离谱的时候!我特意梳理了Scipy里BFGS算法的实现逻辑,给你一个明确的答案:不会。
具体来说,Scipy中BFGS的默认线搜索(基于Wolfe条件实现),在整个线搜索过程里只会调用目标函数的函数值来迭代寻找合适的步长,完全不会重复触发你传入的jac可调用对象去计算梯度。梯度只在每一轮BFGS迭代的起始阶段计算一次,用来更新搜索方向,之后的线搜索环节全程只依赖函数值评估。
这对你而言绝对是个好消息!你完全可以放心地重构代码,不用额外去处理线搜索阶段可能出现的梯度重复计算问题——毕竟梯度计算这么昂贵,能省一次就省一次呀。
备注:内容来源于stack exchange,提问作者aklmn
相关产品推荐
相关产品推荐

