标准梯度下降法

标准梯度下降法

梯度下降法用于解无约束问题,是一种迭代算法,每一步要求解目标函数的梯度向量,具有实现简单的优点。

一阶泰勒展开

f ( x ) f(x) f(x)具有一阶连续偏导数,若第k次的迭代值为 x ( k ) x^{(k)} x(k),则在 x ( k ) x^{(k)} x(k)处的一阶泰勒展开为
f ( x ) = f ( x ( k ) ) + g k T ∗ ( x − x ( k ) ) f(x)=f(x^{(k)})+g_{k}^{T}*(x-x^{(k)}) f(x)=f(x(k))+gkT(xx(k))
这里, g k = g ( x ( k ) ) = ∇ f ( x ( k ) ) g_{k}=g(x^{(k)})=\nabla f(x^{(k)}) gk=g(x(k))=f(x(k)),即 f ( x ) f(x) f(x) x ( k ) x^{(k)} x(k)的梯度。

第k+1次的迭代值 x ( k + 1 ) x^{(k+1)} x(k+1)

x ( k + 1 ) = x ( k ) + λ k p k x^{(k+1)}=x^{(k)}+\lambda _{k}p_{k} x(k+1)=x(k)+λkpk
其中 p k p_{k} pk是搜索方向,取负梯度方向 p k = − ∇ f ( x k ) p_{k}=-\nabla f(x^{k}) pk=f(xk)

λ k \lambda _{k} λk的确定

λ k \lambda _{k} λk是搜索步长,可由一维搜索确定,即 p k p_{k} pk方向的最优步长。
f ( x k + λ k p k ) = min ⁡ λ ≥ 0 f ( x k + λ p k ) f(x^{k}+\lambda _{k}p_{k})=\min_{\lambda \geq0}f(x^{k}+\lambda p_{k}) f(xk+λkpk)=λ0minf(xk+λpk)

算法步骤

input:目标函数 f ( x ) f(x) f(x),梯度函数 g ( x ) = ∇ f ( x ) g(x)=\nabla f(x) g(x)=f(x),计算精度 ε \varepsilon ε;
ooutput: f ( x ) f(x) f(x)的极小点 x ∗ x^* x
(1)取初值 x ( 0 ) ∈ R n x^{(0)}\in \R^{n} x(0)Rn,置k=0;
(2)j计算 f ( x ( k ) ) f(x^{(k)}) f(x(k))
(3)计算梯度 g k = g ( x ( k ) ) g_{k}=g(x^{(k)}) gk=g(x(k)),当 ∥ g k ∥ &lt; ε \|g_k\|&lt;\varepsilon gk<ε时,停止迭代,令 x ∗ = x ( k ) x^*=x^{(k)} x=x(k);否则,令 p k = − g ( x ( k ) ) p_k=-g(x^{(k)}) pk=g(x(k)),求 λ k \lambda _k λk,使
f ( x k + λ k p k ) = min ⁡ λ ≥ 0 f ( x k + λ p k ) f(x^{k}+\lambda _{k}p_{k})=\min_{\lambda \geq0}f(x^{k}+\lambda p_{k}) f(xk+λkpk)=λ0minf(xk+λpk)
(4)置 x ( k + 1 ) = x ( k ) + λ k p k x^{(k+1)}=x^{(k)}+\lambda _{k}p_{k} x(k+1)=x(k)+λkpk, 计算 f ( x ( k + 1 ) ) ) f(x^{(k+1)})) f(x(k+1))
∥ f ( x ( k + 1 ) ) − f ( x ( k ) ) ∥ &lt; ε \|f(x^{(k+1)})-f(x^{(k)})\| &lt; \varepsilon f(x(k+1))f(x(k))<ε ∥ x ( k + 1 ) − x ( k ) ∥ &lt; ε \|x^{(k+1)}-x^{(k)}\| &lt; \varepsilon x(k+1)x(k)<ε时,停止迭代,令 x ∗ = x ( k + 1 ) x^*=x^{(k+1)} x=x(k+1)
(5)否则,置k = k+1,转(3)。

注意

当目标函数是凸函数时,梯度下降法的解一定是全局最优。否则,容易陷入局部最优解。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 MATLAB 中实现扰动梯度下降可以按照以下步骤进行: 1. 定义目标函数:首先需要定义你要优化的目标函数,例如 `f(x)`。 2. 初始化参数:选择一个初始参数向量 `x0`。 3. 计算梯度:计算目标函数在当前参数向量处的梯度,使用 MATLAB 的 `gradient` 函数可以自动计算梯度。 4. 添加扰动:为了引入随机性,可以在计算梯度时添加一个小的扰动。可以使用 MATLAB 的 `randn` 函数生成服从标准正态分布的随机数,并将其乘以一个较小的常数,例如 `epsilon`。 5. 更新参数:使用梯度下降更新参数向量。可以根据需要选择不同的学习率,例如 `alpha`。更新公式为:`x = x - alpha * (gradient + epsilon)`。 6. 重复迭代:重复执行步骤 3-5,直到达到停止条件(例如达到最大迭代次数或梯度变化很小)。 下面是一个简单的 MATLAB 代码示例: ```matlab % 定义目标函数 f = @(x) x^2; % 初始化参数 x0 = 1; % 设置参数 alpha = 0.1; % 学习率 epsilon = 0.01; % 扰动因子 max_iterations = 100; % 最大迭代次数 % 迭代更新参数 x = x0; for i = 1:max_iterations % 计算梯度 gradient = gradient(f, x); % 添加扰动 perturbation = epsilon * randn(); gradient = gradient + perturbation; % 更新参数 x = x - alpha * gradient; end % 输出最终结果 disp(x); ``` 请注意,这只是一个简单的示例代码,实际应用中可能需要根据具体情况进行调整和改进。另外,扰动梯度下降的效果可能会受到参数选择的影响,因此需要进行实验和调优。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值