局部最小值和全局最小值

    基于梯度得搜索是使用最为广泛得参数寻优方法。在此类方法中,我们从某些初始解出发,迭代寻找最优参数值。每次迭代中,我们先计算误差函数在当前点的梯度,然后根据梯度确定搜索方向。例如,由于负梯度方向是函数值下降最快的方法,因此梯度下降法就是沿着负梯度方向搜索最优解。若误差函数在当前点的梯度为零,则已达到局部极小,更新量将为零,这意味着参数的迭代更新将在此停止。显然,如果误差函数仅有一个局部极小,那么此时找到的局部极小就是全局最小。然后,如果误差函数具有多个局部极小,则不能保证找到的解是全局最小。对后一种情形,我们称参数寻优陷入了局部极小,这显然不是我们所希望的。

    在现实任务中,人们常采用以下策略来试图“跳出”局部极小,从而进一步接近全局最小:

 

  •         以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。这相当于从多个不同的初始点开始搜索,这样就可能陷入不同的局部极小,从中进行选择有可能获得更接近全局最小的结果。
  • 使用“模拟退火”技术。模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小。在每步迭代过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法稳定。
  • 使用随机梯度下降,与标准梯度下降法精确计算梯度不同,随机梯度下降法在计算梯度时加入了随机因素。于是,即便现如局部极小点,它计算出的梯度仍可能不为零,这样就有机会跳出局部极小继续搜索。
### MATLAB 中寻找局部最小值的方法 在 MATLAB 中,存在多种方法用于求解函数的局部最小值。常用的技术包括优化工具箱中的 `fminsearch` 函数以及更高级别的 `fmincon` 其他特定算法。 #### 使用 fminsearch 寻找无约束局部极小值 对于不需要梯度信息的一般情况,可以采用基于 Nelder-Mead 单纯形法实现的 `fminsearch` 来定位多维空间内的局部最优解[^1]: ```matlab % 定义目标函数 fun = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2; % 初始猜测点 x0 = [-1.2, 1]; % 调用 fminsearch 进行最优化计算 [x_min, fval] = fminsearch(fun, x0); disp(['The local minimum is at ', num2str(x_min)]); disp(['with a function value of ', num2str(fval)]); ``` 此代码片段展示了如何定义一个简单的二次测试函数并利用 `fminsearch` 找到其局部最低点及其对应的函数值。 #### 带有约束条件下的局部最小化问题 当面临带有边界或其他形式限制的问题时,则推荐使用更为强大的 `fmincon` 函数来处理这类复杂情形。该命令允许指定线性非线性的不等式/等式的限定范围[^2]: ```matlab A = []; b = []; Aeq = []; beq = []; lb = [0,-Inf]; ub = [Inf, Inf]; nonlcon = @unitdisk; % 自定义非线性约束函数 options = optimset('Display','iter'); [x,fval] = fmincon(@myobj,x0,A,b,Aeq,beq,lb,ub,nonlcon,options); ``` 上述例子说明了设置上下限 (`lb`, `ub`) 及调用自定义的非线性约束函数的方式来进行带约束的局部最小化操作。 #### 其他可能的选择 除了以上提到的基础选项外,MATLAB 的全局优化工具箱还提供了诸如模式搜索(`patternsearch`)、遗传算法(`ga`)等多种适用于不同应用场景下寻优需求的功能模块。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值