机器学习 day04(梯度下降算法,学习率,偏导数,执行过程示意图)

news/2024/12/29 8:44:09/

1. 梯度下降
在这里插入图片描述

  • 我们可以用一种更系统的方法,来找到一组w,b,使成本函数的值最小。这个方法叫梯度下降算法,它可用于最小化任何函数,不仅仅包括线性回归的成本函数,也包括两个以上参数的其他成本函数
  • 在线性回归中,w和b的初始值是多少并不重要,所以通常将他们的初始值设为0。
  • 成本函数并不总是弓形或吊床行的函数,这代表他可能有两个及以上的最小值
  • 梯度下降算法的步骤:
    a. 初始化w和b的值,通常设为0
    b. 继续更改w和b的值,来降低J函数的值
    c. 直到J函数到达,或接近J函数的最小值

2. 例如:深度学习模型的成本函数
在这里插入图片描述

  • 梯度下降算法形象化的步骤:
    a. 选取一组w和b作为初始位置
    b. 站在初始位置上,旋转360°,找到一个最高效下到这些山谷之一的底部的方向,并迈出一小步。从数学上来讲,这个方向是最陡下降方向
    c. 站在迈出一小步后的位置上,并重复上一步的过程
    d. 站在下一个位置上,重复上一步的过程

    e. 直到发现自己站在山谷的底部,而这个J函数的局部最小值就在这

3. 梯度下降算法
在这里插入图片描述

  • 梯度下降函数中有两个关键点:学习率和偏导数
  • α:学习率,通常是介于0和1之间的一个很小的正数,如0.001。它控制下坡时迈多大的步子
  • ∂J(w,b)/∂w 和 ∂J(w,b)/∂b:成本函数J对w求偏导,成本函数J对b求偏导。它控制下坡时朝哪个方向迈步子
  • 梯度下降算法的步骤:
    a. 更新w的值为,w - α × ∂J(w,b)/∂w
    b. 更新b的值为,b - α × ∂J(w,b)/∂b
    c. 重复更新w和b的值,直到w和b不随着继续更新而发生很大的变化,即偏导数趋于0,J函数趋于局部最小值,算法收敛
  • 左边的方法是,在程序中正确的,同时更新两个参数的方法,因为他更新完w的值后,没有立即覆盖w,而是继续用旧w来更新b的值
  • 右边的方法是,错误的,非同时更新两个参数的方法,因为他更新完w的值后,立即覆盖w,转而用新w来更新b的值
  • 建议使用左边的正确的,同时更新两个参数的方法

4. 梯度下降算法中的偏导数
在这里插入图片描述

  • 为了简化理解,我们将b设为0,J函数就变成一元函数,偏导数也就变成导数,我们可以用二维图来演示
  • 导数的作用是在确定w的初始值后,决定w的变化方向,即确保J函数的值是在往J函数的局部最小值移动
  • J函数上某点的导数为J函数在该点上的切线斜率。当w初始值在J函数最小值的右侧,切线斜率为正,该点导数为正,w减正数,w减小,即J函数值向局部最小值移动。当w初始值在J函数最小值的左侧,切线斜率为负,该点导数为负,w减负数为w加正数,w增加,即J函数值向局部最小值移动

5. 梯度下降算法中的学习率
在这里插入图片描述

  • 当学习率α过小时,梯度下降算法会执行的很慢,即要许多步才能到达J函数的局部最小值
  • 当学习率α过大时,梯度下降算法每一步都会迈的很大。在这个例子中,当下一步的w超过了,前一步w关于J函数局部最小值的对称点时,J函数就会持续增大,那么该算法就达不到J函数的局部最小值,即算法不会收敛,反而会发散。

6. 梯度下降算法的特性

  • 当我们更改w和b的初始值后,会得到一个不同的局部最小值,如图:
    在这里插入图片描述
  • 当w到达某点,使J函数取局部最小值时,导数为0,梯度下降算法会保持w的值,不会让他继续改变,如图:
    在这里插入图片描述
  • 即使学习率固定,梯度下降算法也能让J函数到达局部最小值,如图:
    在这里插入图片描述
  • 越靠近J函数的局部最小值,导数就越小,下一步迈的就越小,w值的变化就越小

7. 用于一个变量的线性回归的梯度下降算法
在这里插入图片描述

  • 注意:f w,b (xⁱ) = w × xⁱ + b 是一个变量的线性回归模型,且在每一步要同时更新w和b的值
  • 简化公式的过程,如图:
    在这里插入图片描述
  • 成本函数是非凸函数时,J函数会有多个局部最小值。例如深度学习模型的成本函数,如图:
    在这里插入图片描述
  • 成本函数是凸函数时,J函数具有碗型功能,且只有一个全局最小值,除此之外没有其他局部最小值。例如线性回归的平方误差成本函数,如图:
    在这里插入图片描述
    8. 批量梯度下降算法
    在这里插入图片描述
  • 当梯度下降的每一步(w和b每一次变化),我们都在查看所有的训练示例(i都是从1到训练集的最后一个数,m=47),该梯度下降称为批量梯度下降

9. 梯度下降算法的执行过程示意图
在这里插入图片描述

  • 左上角为一个变量的线性回归模型图,包含训练集(❌)
  • 右上角为成本函数(J函数)的等高线图
  • 下方为成本函数(J函数)的曲面图

http://www.ppmy.cn/news/46172.html

相关文章

如何使用ref和reactive你必须要知道的场景和差异

在Vue 3中,ref和reactive是两种不同的数据响应式处理方式。本文将介绍它们的使用场景和差异,并提供相关代码示例。 ref的使用场景 ref通常用于处理简单的数据类型,例如数字、布尔值、字符串等。它可以让我们在模板中直接使用数据&#xff0…

Chrome-mojo The Service Manager Services

https://chromium.googlesource.com/chromium/src//312b6bf/services/service_manager/README.md Chromium Mojo & IPC | 柯幽 概述 Service Manager是一个组件,像 Chromium 这样的大型应用程序可以使用它来支持跨平台、多进程、面向服务、连字符形容词负载的…

论:开发者信仰之“天下IT是一家“(Java .NET篇)

比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代。 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁。 2013年他与微软做了最后的道别。 2013年以后,我才真正看到了微软的变化。尤其是它的“云优先,移…

LeetCode 2409. 统计共同度过的日子数

原题链接:2409. 统计共同度过的日子数 Alice 和 Bob 计划分别去罗马开会。 给你四个字符串 arriveAlice ,leaveAlice ,arriveBob 和 leaveBob 。Alice 会在日期 arriveAlice 到 leaveAlice 之间在城市里(日期为闭区间&#xff0…

hashCode 如何计算?这一篇就够了!

介绍 hashCode 中文‘散列码’,存在的意义是加快查找速率,可以在常数时间内进行寻址操作。 存在意义 它被定义在 Object 中,而 Object 类是一切类的父类,所以所有的方法都具有这个方法。 Java 中 hashCode 计算方式如下&#x…

Celery使用教程完整版【从安装到启用】

Celery是一个基于Python开发的异步任务队列,可以实现任务的异步调度和处理。 以下是Celery使用教程的基本步骤: 安装Celery库 使用pip命令安装Celery库: pip install celery 创建Celery实例 在项目的Python文件中创建Celery实例&#x…

浅谈兼容性测试

兼容性测试的概念 兼容性测试是一种软件测试,用于确保构建的系统/应用程序/网站与其他各种对象(如其他网络浏览器、硬件平台、用户、操作系统等)的兼容性。这种类型的测试有助于了解产品在特定环境中的表现。 为了方便理解,可以…

ESP32设备驱动-BME680环境传感器驱动

BME680环境传感器驱动 文章目录 BME680环境传感器驱动1、BME680介绍2、硬件准备3、软件准备4、驱动实现1、BME680介绍 BME680 是一款集成环境传感器,专为尺寸和低功耗是关键要求的移动应用和可穿戴设备而开发。 BME680 扩展了 Bosch Sensortec 现有的环境传感器系列,首次集成…