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

梯度、梯度下降、最小二乘法

        在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降是最常采用的方法之一,另一种常用的方法是最小二乘法。

1. 梯度和梯度下降

        在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。

        那么这个梯度向量求出来有什么意义呢?他的意义从几何意义上讲,就是函数变化增加最快的地方。

        沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,梯度减少最快,也就是更加容易找到函数的最小值。

        在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数,和模型参数值。

        梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

在使用梯度下降时,需要进行调优。哪些地方需要调优呢?

  1. 算法的步长选择。实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。

    1. 步长太大,会导致迭代过快,甚至有可能错过最优解。

    2. 步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。

  2. 算法参数的初始值选择。 初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。

2. 最小二乘法

        最小二乘法是用来做函数拟合或者求函数极值的方法。在机器学习,尤其是回归模型和数据拟合中,经常可以看到最小二乘法.

最常见的应用是 线性回归,即拟合一条直线:y=ax+b

目标是找到 最佳的斜率 a 和截距 b,使得误差平方和最小, 通过求导,可以得到:a和b

这就是一元线性回归的最小二乘解

最小二乘法的俩种表达方式

1. 代数表达

2. 矩阵表达

梯度下降法和最小二乘法比较 ? 

        梯度下降法需要选择步长,而最小二乘法不需要。梯度下降法是迭代求解,最小二乘法是计算解析解。如果样本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有优势,计算速度很快。

        但是如果样本量很大,用最小二乘法由于需要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度下降法比较有优势。

最小二乘法的局限性和适用场景  

        最小二乘法适用简洁高效,比梯度下降这样的迭代法似乎方便很多。但是这里我们就聊聊最小二乘法的局限性。

1. 最小二乘法需要计算X^{T}X}的逆矩阵,有可能它的逆矩阵不存在,这样就没有办法直接用最小二乘法了,此时梯度下降法仍然可以使用。

2. 当样本特征n非常的大的时候,计算X^{T}X}的逆矩阵是一个非常耗时的工作(nxn的矩阵求逆),甚至不可行。此时以梯度下降为代表的迭代法仍然可以使用。

3. 如果拟合函数不是线性的,这时无法使用最小二乘法,需要通过一些技巧转化为线性才能使用,此时梯度下降仍然可以用。


http://www.kler.cn/a/531447.html

相关文章:

  • 进阶数据结构——双向循环链表
  • 【汽车电子软件架构】AutoSAR从放弃到入门专栏导读
  • Vue 3 30天精进之旅:Day 13 - 路由守卫
  • Apache Hudi数据湖技术应用在网络打车系统中的系统架构设计、软硬件配置、软件技术栈、具体实现流程和关键代码
  • nodejs:express + js-mdict 网页查询英汉词典,能播放声音
  • 新站如何快速获得搜索引擎收录?
  • 快速上手mybatis教程
  • XCCL、NCCL、HCCL通信库
  • 算法基础——一致性
  • 强化学习笔记(5)——PPO
  • c++ 定点 new 及其汇编解释
  • 数据结构之栈和队列(超详解)
  • 使用 Kotlin 将 Vertx 和 Springboot 整合
  • C++类的初始化列表是怎么一回事?哪些东西必须放在初始化列表中进行初始化,原因是什么?
  • MySQL(高级特性篇) 13 章——事务基础知识
  • Docker 部署 ClickHouse 教程
  • 搜索插入位置(35)
  • SpringBoot整合Mybatis|入门级增删改查|2025
  • Chromium132 编译指南 - Android 篇(五):获取源码
  • 八. Spring Boot2 整合连接 Redis(超详细剖析)
  • 自动化软件测试的基本流程
  • Ubuntu20安装docker
  • 【DeepSeek论文精读】6. DeepSeek R1:通过强化学习激发大语言模型的推理能力
  • coze扣子新一代AI应用开发平台
  • 利用matlab寻找矩阵中最大值及其位置
  • 详解分布式锁