当前位置: 首页 > news >正文

优化算法(五)—梯度下降算法(附MATLAB程序)

梯度下降算法(Gradient Descent)是一种常用的优化算法,用于寻找函数的局部最小值。它通过沿着函数梯度的反方向迭代地调整变量,以逐步找到最优解。梯度下降广泛应用于机器学习和深度学习中,特别是在训练模型时优化损失函数。

一、基本原理

梯度下降算法是一种优化算法,用于最小化目标函数。其基本原理如下:

  1. 目标函数:设定一个需要最小化的函数(例如,损失函数)。

  2. 初始化:随机选择一个初始点(参数值)。

  3. 计算梯度:在当前点计算目标函数的梯度(即偏导数),表示函数在该点的上升方向。

  4. 更新参数:根据梯度调整参数,更新规则为:

其中,θ是参数,α是学习率,∇J是目标函数的梯度。

    5.迭代:重复步骤3和4,直到达到停止条件(如梯度足够小或达到最大迭代次数)。

梯度下降算法的关键在于选择合适的学习率和确保收敛到局部最优解。根据更新的方式,可以分为不同类型,如批量梯度下降、随机梯度下降和小批量梯度下降。

二、公式推导

梯度下降算法的推导主要围绕目标函数的最优化过程。我们以最小化目标函数 J(θ) 为例,下面是详细的推导过程。

1. 定义目标函数

假设我们要最小化的目标函数为 J(θ),其中 θ 是我们需要优化的参数。

2. 计算梯度

梯度是目标函数对参数的偏导数,表示在当前点上,函数最陡的上升方向。梯度的数学表示为:

这里,∇J(θ) 是一个向量,包含了目标函数在各个参数方向的导数。

3. 更新参数

我们希望通过沿着梯度的反方向更新参数,以减小目标函数的值。更新公式如下:

  • \theta _{old} 是当前的参数值。
  • \theta _{new}是更新后的参数值。
  • \alpha 是学习率,控制更新的步长。

4. 迭代过程

通过反复应用更新公式,可以不断调整参数,逐步逼近目标函数的最小值。迭代过程可以表示为:

其中 t表示迭代次数。

5. 收敛条件

迭代过程持续进行,直到满足某个停止条件,例如:

  • 梯度的范数小于某个阈值:
  • 参数的变化小于某个阈值:
  • 达到最大迭代次数。

6. 误差分析

选择合适的学习率α 是关键。过大的学习率可能导致发散,过小的学习率则可能使收敛速度缓慢。因此,有时会使用动态调整学习率的方法。

三、MATLAB仿真

下面是一个简单的MATLAB仿真程序,用于实现梯度下降算法以最小化一个二次目标函数J\left ( \theta \right )=\theta ^{2}

% 梯度下降算法示例
% 最小化目标函数 J(θ) = θ^2% 初始化参数
theta = 10;        % 初始参数值
alpha = 0.1;      % 学习率
num_iterations = 100; % 迭代次数% 存储每次迭代的目标函数值
J_history = zeros(num_iterations, 1);% 梯度下降算法
for iter = 1:num_iterations% 计算目标函数 J(θ)J = theta^2; % 目标函数J_history(iter) = J; % 存储目标函数值% 计算梯度gradient = 2 * theta; % J(θ) 的导数% 更新参数theta = theta - alpha * gradient; % 更新公式% 输出当前迭代的信息fprintf('Iteration %d: theta = %.4f, J(θ) = %.4f\n', iter, theta, J);
end% 绘制目标函数值随迭代次数变化的曲线
figure;
plot(1:num_iterations, J_history, 'b-', 'LineWidth', 2);
xlabel('Iteration');
ylabel('J(θ)');
title('Objective Function Value vs. Iteration');
grid on;

代码说明

  1. 初始化参数

    • theta 是优化的初始值。
    • alpha 是学习率。
    • num_iterations 是迭代次数。
  2. 循环进行梯度下降

    • 计算当前参数的目标函数值 JJJ。
    • 计算梯度(对于 J(θ)=,梯度是 2θ2\theta2θ)。
    • 更新参数 theta
  3. 输出和绘图

    • 在每次迭代中输出当前的参数值和目标函数值。
    • 最后绘制目标函数值随迭代次数变化的图。

如何运行

将以上代码复制到MATLAB的脚本文件中(例如 gradient_descent.m),然后运行即可查看梯度下降的过程及目标函数的收敛情况。

四、总结

梯度下降算法是优化问题中一种强大且有效的工具,通过简单的迭代过程,能够在多种应用中找到合适的解。在实际使用中,选择合适的学习率和优化策略是确保其有效性的关键。

优化算法以往链接:

优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序-CSDN博客

优化算法(二)—粒子群优化算法(附MATLAB程序)-CSDN博客

优化算法(三)—模拟退火算法(附MATLAB程序)_模拟退火算法csdn-CSDN博客

优化算法(四)—蚁群算法(附MATLAB程序)-CSDN博客

http://www.lryc.cn/news/446556.html

相关文章:

  • TypeScript 设计模式之【单例模式】
  • UDP与TCP那个传输更快
  • 如何把PDF样本册转换为网址链接
  • centos7 semanage 离线安装 SELinux
  • 磨具生产制造9人共用一台工作站
  • Qt clicked()、clicked(bool)、toggled(bool)信号的区别和联系
  • nginx实现负载均衡的分发策略
  • 【Python】用代码片段掌握Python核心功能
  • JVM 内存模型
  • Linux2.6* 内核默认支持的文件系统
  • PMP--二模--解题--111-120
  • idea 创建多模块项目
  • redis Redis-Cluster常用命令与Redis性能监控
  • 《C++中的随机数生成器:探索随机之美》
  • 为什么推荐使用英文版LabVIEW
  • 【Moveit2】move_group_interface_tutorial中文注释
  • JavaScript window的open和close用法
  • 经典sql题(十四)炸裂函数的恢复
  • 【vue2】组件写法
  • 5G 扬帆新质跃,技术蝶变开新篇-第七届“绽放杯”5G应用征集大赛 5G应用融合技术专题赛圆满收官
  • 3d gaussian splatting公式推导
  • 金属增材制造咋突破?纳米纹理粉末如何助力金属增材制造?
  • openpnp - 为了防止物料操作混乱,做一张物料分布位置图清晰一些
  • 懒人帮美食系统小程序的设计
  • David律所代理Jose Martin幽默水果版权首发维权,尚未TRO
  • 读构建可扩展分布式系统:方法与实践15可扩展系统的基本要素
  • 解决VisualStudio msvsmon.exe远程调试器未启动问题
  • 如果淘汰是注定的,那么读书还有意义吗?
  • Python 中 三种常用的绘图方式 ! ! !
  • 统一回复OneAPI:failed to get gpt-3.5-turbo token encoder的解决办法