数值优化(Numerical Optimization)学习系列-信赖域方法

本文深入探讨数值优化中的信赖域方法,包括基本形式、柯西点算法、Dogleg算法及其二维子空间优化。信赖域方法在迭代过程中,通过选择合适的模型和步长,动态调整可信赖区域,实现高效优化。通过对参数的选择和调整,如Δk的选取,确保算法的全局收敛性。同时,文章介绍了如何解决非凸函数优化问题,展示了在实际问题中的应用和优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信赖域方法和线搜索类似都是迭代方法,与其不同的是,每次迭代时,在一个选定的可信赖区域内,选择当前迭代点的近似模型 m k m_k mk ,然后计算最优步长;如果步长不合适,可以对区域进行缩放。该小结主要介绍:

  1. 信赖域方法的基本形式
  2. 求解信赖域的基础方法
  3. 信赖域方法的收敛性和收敛速度
  4. 信赖域方法的扩展

信赖域方法的基本形式

在信赖域方法中,可信赖的区域(Region)的选择很重要,一般都会根据上一步结果进行动态变化;如果上一步太大则缩小,否则进行扩大。
在模型最优化问题中,选择TR方法比LS方法能够较快的收敛,例如这里写图片描述
在该例子中,在非凸函数F中,当前步骤TR方法要优于LS。
信赖域方法有几个参数需要选择:

  1. 近似模型 m k m_k mk
  2. 可信赖区域 Δ k \Delta_k Δk
  3. 求解参数 p k p_k pk

基本形式

在本节中模型选择为二次近似模型,采用函数二阶泰勒展开,即 f ( x k + p ) = f k + g k T p + 1 2 p T ∇ 2 f k p f(x_k+p)=f_k + g_k^Tp + \frac 12 p^T \nabla^2 f_k p f(xk+p)=fk+gkTp+21pT2fkp一般情况下会用 B k B_k Bk 去近似Hessian矩阵,即 m k = f k + g k T + 1 2 p T B k p m_k = f_k + g_k^T + \frac 12 p^T B_k p mk=fk+gkT+21pTBkp其中 B k B_k Bk为对称矩阵。

信赖域的基本形式为: m i n   m k ( p ) = f k + g k T + 1 2 p T B k p s . t   ∣ ∣ p ∣ ∣ ≤ Δ k min \ m_k(p)=f_k + g_k^T + \frac 12 p^T B_k p \quad s.t \ ||p|| \le \Delta_k min mk(p)=fk+gkT+21pTBkps.t pΔk
该问题为关于p的带约束的最优化问题,参数p被限制在一个球形区域内。如果 B k B_k Bk选择为Hessian,则为TR的牛顿方法。
如果 ∣ ∣ B k − 1 g k ∣ ∣ ≤ Δ k ||B_k^{-1}g_k|| \le \Delta_k Bk1gkΔk p k = − B k − 1 g k p_k=-B_k^{-1}g_k pk=Bk1gk完全步(Full Step),即球形约束没有作用。

Δ k \Delta_k Δk的选择

参数 Δ k \Delta_k Δk的选择一般会根据上一步的结果进行调整,定义 ρ k = f k − f ( x k + p k ) m k ( 0 ) − m k ( p k ) \rho_k=\frac{f_k-f(x_k+p_k)}{m_k(0)-m_k(p_k)} ρk=mk(0)mk(pk)fkf(xk+pk)其中分子表示函数实际减小的值;分母表示近似模型减少的值。分析 ρ k \rho_k ρk:

  1. 如果 ρ k \rho_k ρk 小于0,一般情况下分母不可能小于0,因为目标函数求解的是最小值;此时说明分子小于0,即下一个目标点比上一步大,此时需要舍弃。
  2. 如果 ρ k \rho_k ρk 大于0并且接近1,说明模型和实际的预期比较相符合,此时可以考虑扩大 Δ k \Delta_k Δk
  3. 如果 ρ k \rho_k ρk大于0但是明显小于1,此时可以不用调整
  4. 如果 ρ k \rho_k ρk大于0,但是接近0,说明模型变化范围比较大,但是实际改变比较小,此时应该收缩或者减少 Δ k \Delta_k Δ
信赖方法是一类求解无约束最优化问题的优化算法。下面是一个MATLAB代码示例,用于实现信赖方法: ```matlab function [x, fval, exitflag] = trustregion(fun, x0, options) % TRUSTREGION Trust region method for unconstrained optimization % [X, FVAL, EXITFLAG] = TRUSTREGION(FUN, X0, OPTIONS) finds the minimum % point X of the function FUN starting from the point X0 using trust % region method. FUN is a function handle to the objective function that % accepts a vector input X and returns a scalar objective function value % F. X0 is the initial point and OPTIONS is a structure created using the % OPTIMSET function. The field names in the OPTIONS structure correspond % to parameter names for the TRUSTREGION function. Default values for % parameters not specified in OPTIONS are: % OPTIONS.tol = 1e-6; % OPTIONS.maxIter = 1000; % OPTIONS.maxFunEvals = Inf; % OPTIONS.radius = 1; % OPTIONS.eta = 0.1; % OPTIONS.verbose = false; % % X is the solution found by TRUSTREGION, FVAL is the objective function % value at X, and EXITFLAG is an integer identifying the reason for % termination: % 1 - Function converged to a solution X satisfying the tolerance % criterion. % 0 - Maximum number of iterations or function evaluations reached. % % Example: % fun = @(x) (x(1)-1)^2 + (x(2)-2.5)^2; % x0 = [0 0]; % options = optimset('tol', 1e-8, 'maxIter', 500); % [x, fval, exitflag] = trustregion(fun, x0, options); % % References: % [1] Nocedal, J., & Wright, S. J. (2006). Numerical optimization % (2nd ed.). Springer. % Set default options if not specified by user defaultOptions.tol = 1e-6; defaultOptions.maxIter = 1000; defaultOptions.maxFunEvals = Inf; defaultOptions.radius = 1; defaultOptions.eta = 0.1; defaultOptions.verbose = false; if nargin < 3 options = defaultOptions; else % Fill in missing values of options with defaults optionNames = fieldnames(defaultOptions); for i = 1:length(optionNames) if ~isfield(options, optionNames{i}) options.(optionNames{i}) = defaultOptions.(optionNames{i}); end end end % Initialize variables x = x0; fval = fun(x); grad = gradient(fun, x); Hess = hessian(fun, x); iter = 0; funEvals = 1; % Main loop while true % Compute the Cauchy point [pk, mk] = cauchy(fun, x, grad, Hess, options.radius); % Compute the actual reduction actualReduction = fval - fun(x + pk); % Compute the predicted reduction predictedReduction = -mk + fun(x); % Compute the ratio of actual to predicted reduction rho = actualReduction / predictedReduction; % Update the trust region radius if rho < 0.25 options.radius = options.radius / 4; elseif rho > 0.75 && abs(norm(pk) - options.radius) < options.tol options.radius = min(2 * options.radius, options.maxRadius); end % Update x and fval if the predicted reduction is good if rho > options.eta x = x + pk; fval = fun(x); grad = gradient(fun, x); Hess = hessian(fun, x); funEvals = funEvals + 1; end % Check termination criteria iter = iter + 1; if norm(grad) < options.tol || iter >= options.maxIter || ... funEvals >= options.maxFunEvals break; end % Output iteration information if verbose option is true if options.verbose fprintf('Iteration %d: fval = %g, radius = %g, norm(grad) = %g\n', ... iter, fval, options.radius, norm(grad)); end end % Set exit flag based on termination reason if norm(grad) < options.tol exitflag = 1; else exitflag = 0; end end function [pk, mk] = cauchy(fun, x, grad, Hess, radius) % Compute the Cauchy point for trust region method g = grad(:); H = Hess(:); alpha = norm(g)^3 / (radius * g' * H * g); pk = -alpha * min(radius, norm(g)) * g; mk = fun(x) + g' * pk + 0.5 * pk' * Hess * pk; end function grad = gradient(fun, x) % Compute the gradient of the objective function using central difference n = length(x); grad = zeros(n, 1); h = 1e-6; for i = 1:n xplus = x; xplus(i) = x(i) + h; xminus = x; xminus(i) = x(i) - h; grad(i) = (fun(xplus) - fun(xminus)) / (2 * h); end end function Hess = hessian(fun, x) % Compute the Hessian of the objective function using central difference n = length(x); Hess = zeros(n, n); h = 1e-6; for i = 1:n xplus = x; xplus(i) = x(i) + h; xminus = x; xminus(i) = x(i) - h; gradplus = gradient(fun, xplus); gradminus = gradient(fun, xminus); Hess(:, i) = (gradplus - gradminus) / (2 * h); end end ``` 上述代码实现了信赖方法的主循环,以及计算梯度、海森矩阵和 Cauchy 点的函数。要使用此代码,您需要提供一个函数句柄 `fun`,该函数计算目标函数值,一个初始点 `x0`,以及一个选项结构 `options`,该结构包含有关算法的各种参数设置。请注意,此代码使用中心差分来估计梯度和海森矩阵,因此可能不适用于计算资源受限的问题。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值