机器学习 | 回归算法原理——最速下降法(梯度下降法)

Hi,大家好,我是半亩花海。接着上次的最小二乘法继续更新《白话机器学习的数学》这本书的学习笔记,在此分享最速下降法(梯度下降法)这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目,欢迎大家交流学习!

目录

一、最速下降法概述

二、案例分析

1. 设置问题

2. 定义模型

3. 最速下降法


一、最速下降法概述

最速下降法是梯度下降法的一种更具体实现形式,它的原理是:在每次迭代搜索中选择合适的步长 \alpha_k,沿着梯度的反方向,总可以找到一个 x^{(k+1)}=x^k-\alpha_k \cdot \nabla f\left(x^{(k)}\right),使得目标函数值能够得到最大程度的减少,最终在这个方向 f\left(x^{(k+1)}\right) 取到最小值,即\alpha_{(k)}=\operatorname{argmin} f\left(x^k-\alpha \cdot \nabla f\left(x^{(k)}\right)\right)


二、案例分析

在上一节中,我们要让 E(\theta) 越来越小,不过一边随意修改 \theta 的值,一边计算 E(\theta) 并与之前的值相比较的做法实在是太麻烦了。所以我们要使用前面简单提到过的微分来求它。

微分是计算变化的快慢程度时使用的方法。我们在学微分的时候,应该对一个概念比较熟悉,那就是增减表

1. 设置问题

我们简单举一个例子,比如有一个表达式为 g(x) = (x - 1)^2 的二次函数,如下图所示。可以看出,当 x = 1 时,出现最小值是 g(x) = 0

将 g(x) 展开,有 (x-1)^2=x^2-2 x+1,再对函数进行微分,结果如下:

\frac{\mathrm{d}}{\mathrm{d} x} g(x)=2 x-2

为了写出增减表,我们看一下导数的符号(只要看 2x−2 的符号就行):

由上表可以看出,在 x < 1 时,g(x) 的图形向右下方延伸,反之当 x > 1 时,g(x) 的图形向右上方延伸,换句话说就是从左下方开始延伸的。

比如在 x = 3 这一点,如下图所示,为了使 g(x)的值变小,我们需要向左移动 x,也就是必须减小 x同理,如果是在另一侧的 x = −1 这一点,如下图所示,为了使 g(x) 的值变小,我们需要向右移动 x,也就是必须增加 x

2. 定义模型

从上面两个例子可以总结出,我们可以根据导数的符号来决定移动 x 的方向。要向与导数的符号相反的方向移动 xg(x) 就会自然而然地沿着最小值的方向前进了,即自动更新参数

上述内容用表达式展示出来,如下式。这也被称为最速下降法(或称为梯度下降法)。

x:=x-\eta \frac{\mathrm{d}}{\mathrm{d} x} g(x)

其中,A:=B 形式即为通过 B 来定义 A\eta 是学习率(正的常数,读作“伊塔”)。根据学习率的大小(学习率可调节)到达最小值的更新次数也会发生变化。换种说法就是收敛速度会不同。有时候甚至会出现完全无法收敛,一直发散的情况。

从上述两张图可以看出,如果 \eta 较大,那么 x:=x-\eta(2 x-2) 会在两个值上跳来跳去,甚至有可能远离最小值这就是发散状态;而当 \eta 较小时,移动量也变小,更新次数就会增加,但是值确实是会朝着收敛方向而去。

3. 最速下降法

在上一节《机器学习 | 回归算法原理——最小二乘法-CSDN博客》中提到目标函数的表达式是:E(\theta)=\frac{1}{2} \sum_{i=1}^n\left(y^{(i)}-f_\theta\left(x^{(i)}\right)\right)^2

这个目标函数 E(\theta) 和上述问题中的 g(x) 同样是开口向上的形状, 所以刚才讨论的内容也同样适用于它。不过这个目标函数中包含 f_\theta(x),而从 f_\theta(x)=\theta_0+\theta_1 x 这个表达式又可以看出,f_\theta(x) 拥有 \theta_0 和 \theta_1 两个参数。也就是说这个目标函数 E(\theta) 是拥有 \theta_0 和 \theta_1 的双变量函数,所以不能用普通的微分,而要用偏微分。如此一来,更新表达式如下:

\begin{aligned} & \theta_0:=\theta_0-\eta \frac{\partial E}{\partial \theta_0} \\ & \theta_1:=\theta_1-\eta \frac{\partial E}{\partial \theta_1} \end{aligned}

我们知道,E(\theta) 中有 f_\theta(x),而 f_\theta(x) 中又有 \theta_0,所以我们可以使用复合函数的微分分别去考虑它们。

\begin{aligned} & u=E(\theta) \\ & v=f_\theta(x) \end{aligned}

对上述两个式子进行阶梯性地微分:

先从 u 对 v 微分的地方开始计算,把函数展开后再分别求微分(可以发现,在最后一行,常数与 \frac{1}{2} 相抵消了,微分后的表达式变简单了吧? 这就是一开始乘以 \frac{1}{2} 的理由。):

\begin{aligned} \frac{\partial u}{\partial v} & =\frac{\partial}{\partial v}\left(\frac{1}{2} \sum_{i=1}^n\left(y^{(i)}-v\right)^2\right) \\ & =\frac{1}{2} \sum_{i=1}^n\left(\frac{\partial}{\partial v}\left(y^{(i)}-v\right)^2\right) \\ & =\frac{1}{2} \sum_{i=1}^n\left(\frac{\partial}{\partial v}\left(y^{(i)^2}-2 y^{(i)} v+v^2\right)\right) \\ & =\frac{1}{2} \sum_{i=1}^n\left(-2 y^{(i)}+2 v\right) \\ & =\sum_{i=1}^n\left(v-y^{(i)}\right) \end{aligned}

下面就是 v 对 \theta_0 进行微分的部分:

\begin{aligned} \frac{\partial v}{\partial \theta_0} & =\frac{\partial}{\partial \theta_0}\left(\theta_0+\theta_1 x\right) \\ & =1 \end{aligned}

接下来,依照复合函数的微分表达式 \frac{\partial u}{\partial \theta_0}=\frac{\partial u}{\partial v} \cdot \frac{\partial v}{\partial \theta_0},将两个微分的结果相乘,就可以得到对 \theta_0 进行微分的结果了,最后,不要忘了把表达式中的 v 替换回 f_\theta(x)

\begin{aligned} \frac{\partial u}{\partial \theta_0} & =\frac{\partial u}{\partial v} \cdot \frac{\partial v}{\partial \theta_0} \\ & =\sum_{i=1}^n\left(v-y^{(i)}\right) \cdot 1 \\ & =\sum_{i=1}^n\left(f_\theta\left(x^{(i)}\right)-y^{(i)}\right) \end{aligned}

接下来,同理,再算一下对 \theta_1 进行微分的结果:

u 对 v 微分的部分与上述完全相同,所以这次只要计算 v 对 \theta_1 微分的部分即可。

\begin{aligned} \frac{\partial v}{\partial \theta_1} & =\frac{\partial}{\partial \theta_1}\left(\theta_0+\theta_1 x\right) \\ & =x \end{aligned}

最终 u 对 \theta_1 微分的结果:

\begin{aligned} \frac{\partial u}{\partial \theta_1} & =\frac{\partial u}{\partial v} \cdot \frac{\partial v}{\partial \theta_1} \\ & =\sum_{i=1}^n\left(v-y^{(i)}\right) \cdot x^{(i)} \\ & =\sum_{i=1}^n\left(f_\theta\left(x^{(i)}\right)-y^{(i)}\right) x^{(i)} \end{aligned}

所以参数 \theta_0\theta_1 的更新表达式如下:

\begin{aligned} & \theta_0:=\theta_0-\eta \sum_{i=1}^n\left(f_\theta\left(x^{(i)}\right)-y^{(i)}\right) \\ & \theta_1:=\theta_1-\eta \sum_{i=1}^n\left(f_\theta\left(x^{(i)}\right)-y^{(i)}\right) x^{(i)} \end{aligned}

只要根据这个表达式来更新 \theta_0\theta_1 ,就可以找到正确的一次函数 f_\theta(x) ,进而得出最终符合图像规律的f_\theta(x)=\theta_0+\theta_1 x。此时,我们输入任意的广告费(即横坐标),就可以得到相应的点击量(即纵坐标),于是我们就能根据广告费预测点击量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/49770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 AntV G2 绘制折线图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用 AntV G2 绘制折线图 应用场景介绍 AntV G2 是一款基于 Vue 的数据可视化框架&#xff0c;可用于创建交互式图表。本代码展示了如何使用 AntV G2 绘制折线图&#xff0c;以可视化时间序列数据。 代码基本…

数据结构——队列(java实现)及相应的oj题

文章目录 前言队列队列的概念队列的实现队列的链表实现实现的方法与属性内部类实现节点入队列出队列获取队头元素但不删除判空获取队列元素个数 队列的数组实现循环队列方法属性实现&#xff1a;构造方法向循环队列插入一个元素&#xff0c;成功插入则为真。从循环队列中删除一…

Axivion Suite 7.8现已发布

现已实现100%覆盖MISRA规则&#xff0c;并加入了高级功能来提高代码分析能力。 我们很高兴地宣布Axivion Suite 7.8发布。全新版本的Axivion Suite对编译器、配置、分析、仪表板 (WebUI)和IDE插件的架构验证和静态代码分析功能均进行了升级。 100%覆盖所有可测试的MISRA规则 …

昇思25天学习打卡营第15天|K近邻算法实现红酒聚类

这个实验是关于如何使用MindSpore框架在红酒数据集上实现K近邻&#xff08;KNN&#xff09;算法来进行聚类分析的。KNN是一种简单但非常有效的机器学习算法&#xff0c;它通过计算样本之间的距离来决定其分类KNN算法的核心思想是&#xff0c;一个样本的类别可以通过它与训练集中…

Pytorch使用教学1-Tensor的创建

0 导读 在我们不知道什么是深度学习计算框架时&#xff0c;我们可以把PyTorch看做是Python的第三方库&#xff0c;在PyTorch中定义了适用于深度学习的张量Tensor&#xff0c;以及张量的各类计算。就相当于NumPy中定义的Array和对应的科学计算方法&#xff0c;正是这些基本数据…

【Nacos安装】

这里写目录标题 Nacos安装jar包启动Docker单体Docker集群 Nacos相关配置日志配置 Nacos安装 jar包启动 下载jar包 在官方下载链接&#xff0c;根据需求选择相应的版本下载。 解压 tar -zxvf nacos-server-2.4.0.1.tar.gz或者解压到指定目录 tar -zxvf nacos-server-2.4.0…

HarmonyOS Next原生应用开发-从TS到ArkTS的适配规则(九)

一、需要显式标注泛型函数类型实参 规则&#xff1a;arkts-no-inferred-generic-params 级别&#xff1a;错误 如果可以从传递给泛型函数的参数中推断出具体类型&#xff0c;ArkTS允许省略泛型类型实参。否则&#xff0c;省略泛型类型实参会发生编译时错误。 禁止仅基于泛型函数…

Perl脚本学习(一)-- 基础语法

系列文章目录 第一章 Perl脚本学习&#xff08;一&#xff09;-- 基础语法 一、Perl Perl 程序由声明与语句组成&#xff0c;程序自上而下执行&#xff0c;包含了循环&#xff0c;条件控制&#xff0c;每个语句以分号 ; 结束。Perl 语言没有严格的格式规范。 二、Perl简单使用…

TikTok达人合作中的消费者行为研究:精准营销新趋势

随着全球社交媒体技术的飞速发展&#xff0c;TikTok作为短视频领域的佼佼者&#xff0c;其独特的达人带货模式不仅成为驱动消费市场发展的新力量&#xff0c;还深刻改变了消费者的购买行为。本文Nox聚星将和大家探讨TikTok达人合作过程中消费者的行为模式和偏好变化。 一、消费…

SkyWalking入门搭建【apache-skywalking-apm-10.0.0】

Java学习文档 视频讲解 文章目录 一、准备二、服务启动2-1、Nacos启动2-2、SkyWalking服务端启动2-3、SkyWalking控制台启动2-4、自定义服务接入 SkyWalking 三、常用监控3-1、服务请求通过率3-2、服务请求拓扑图3-3、链路 四、日志配置五、性能剖析六、数据持久化6-1、MySQL持…

认识R与数据库连接和网络爬虫,学会在R中使用SQL语言

R语言作为一种强大的统计计算和数据分析工具,不仅在数据处理和可视化方面表现出色,还在与数据库连接和网络爬虫方面具备强大功能。本文将介绍如何在R中进行数据库连接和网络爬虫,并展示如何使用SQL语言在R中进行数据操作。 一、R与SQL数据库 1、认识SQL数据库 SQL(Struc…

企业怎么才能用上大语言模型?

题图&#xff5c;视觉中国 以ChatGPT为起点&#xff0c;大语言模型&#xff08;LLM&#xff09;用全面的技术创新&#xff0c;以及在用户和产业中的应用落地&#xff0c;再次掀起了一个AI新浪潮。 与它的前辈们相比&#xff0c;大语言模型因为打通了语言这一人类沟通中介&…

【并发编程】-4.Lock接口与AQS

Lock接口概念 概念&#xff1a;JDK1.5时&#xff0c;在Java.uitl.concurrent并发包中添加了Lock锁接口&#xff0c;其中定义了lock()、unLock()、tryLock()、lockInterruptibly()、newCondition()等一系列接口&#xff0c;它属于是JAVA语言层面的内置锁&#xff1b;特性&#…

47、PHP实现机器人的运动范围

题目&#xff1a; PHP 实现机器人的运动范围 描述&#xff1a; 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动&#xff0c;每一次只能向左&#xff0c;右&#xff0c;上&#xff0c;下四个方向移动一格&#xff0c;但是不能进入行坐标和列坐标的数位之和大于k…

探索云计算的未来:边缘计算如何重塑IT格局

目录 一、引言 二、边缘计算的基本概念与特性 1. 基本概念 2. 技术特性 三、边缘计算如何重塑IT基础设施 1. 分布式计算架构的兴起 2. 边缘节点的部署与管理 3. 数据流与业务逻辑的重新设计 4. 安全性与隐私保护的加强 四、边缘计算在关键行业的应用实践 1. 智能制造…

关联查询(xml)

多对多&#xff1a;数据库中需要有中间表&#xff0c;在两个实体类中都加入对方的List集合&#xff0c;在写查询语句时写三张表

MySQL第一阶段:多表查询、事务

继续我的MySQL之旅&#xff0c;继续上篇的DDL、DML、DQL、以及一些约束&#xff0c;该到了多表查询和事务的学习总结&#xff0c;以及相关的案例实现&#xff0c;为未来的复习以及深入的理解做好知识储备。 目录 多表查询 连接查询 内连接 外连接 子查询 事务 事务简介…

RTK高精度定位终端的功能跟用途

RTK高精度定位终端是一种集成了高精度定位技术的手持或便携式设备&#xff0c;其功能和用途广泛且重要。以下是RTK高精度定位终端的主要功能和用途&#xff1a; 一、功能 高精度定位&#xff1a; RTK技术通过接收卫星信号和地面基站的差分修正数据&#xff0c;实现厘米级甚至…

开源安全信息和事件管理(SIEM)平台OSSIM

简介 OSSIM&#xff0c;开源安全信息和事件管理&#xff08;SIEM&#xff09;产品&#xff0c;提供了经过验证的核心SIEM功能&#xff0c;包括事件收集、标准化和关联。 OSSIM作为一个开源平台&#xff0c;具有灵活性和可定制性高的优点&#xff0c;允许用户根据自己的特定需…

Java Linux操作系统

1、操作系统是协助用户调度硬件工作&#xff0c;充当用户和计算机硬件之间的桥梁 2、Linux内核 提供了linux系统的主要功能 3、发行版Centos&#xff1a;内核应用程序 4、快照&#xff1a;保存虚拟机的状态&#xff0c;当虚拟机出现问题的时候&#xff0c;可以恢复原始的状态…