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

news2024/9/20 16:54:55

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.coloradmin.cn/o/1947549.html

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

相关文章

大文件分片上传(前端TS实现)

大文件分片上传 内容 一般情况下&#xff0c;前端上传文件就是new FormData,然后把文件 append 进去&#xff0c;然后post发送给后端就完事了&#xff0c;但是文件越大&#xff0c;上传的文件也就越长&#xff0c;如果在上传过程中&#xff0c;突然网络故障&#xff0c;又或者…

opencascade AIS_InteractiveContext源码学习9 obsolete methods

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

鸿蒙SDK开发能力

什么是鸿蒙SDK&#xff1a;HarmonyOS(Software Development Kit)是面向应用和服务开发的开放能力合集,本质就是工具集&#xff0c;与JDK、AndroidSDK在逻辑上有相似之处 18N&#xff1a;1指的是手机&#xff0c;8指的是车机、音箱、耳机、手表/手环、平板、大屏、PC、AR/VR&am…

Python——使用Seaborn钻石数据可视化分析(2)

续 Python——使用Seaborn钻石数据可视化分析(1) 目录 📈 4、非数值变量描述性统计分析 1️⃣ 柱状图——分析钻石切工的情况 📍 sns.countplot —— 绘制柱状图、条形图 2️⃣ 箱线图——分析不同切工的钻石的价格情况 📍 sns.barplot —— 不同分类变量之间的数…

用这些宝藏AI工具打造副业!实现被动收入!

前言 大家好&#xff0c;我是月月&#xff01;今天我们来梳理一下在目前的形势下&#xff0c;如何用AI工具打造一个躺赚的副业&#xff0c;实现被动收入&#xff1f;有哪些方法和途径&#xff1f;在本篇文章我主要提供一些已有的AI工具&#xff0c;后面我们再根据具体的AI工具…

国家自然灾害防治研究院专家莅临国信华源公司指导调研

7月16日&#xff0c;应急管理部国家自然灾害防治研究院党委书记杨思全与中关村科技园区丰台园管理委员会副主任王成玉一行莅临北京国信华源公司进行调研指导。我司总经办及相关部门负责人陪同座谈&#xff0c;并详细汇报了企业的运营情况和技术成果。 在我司高层的陪同下&#…

数字孪生:变电站监测和运维的智能化实践

随着夏季高温天气的到来&#xff0c;我国用电也迎来了高峰。用电负荷持续走高&#xff0c;对全国各地电网运维也迎来了挑战。电力系统作为现代社会的基础设施&#xff0c;其稳定性和可靠性至关重要&#xff0c;变电站则是实现电力系统电力互联互通的枢纽。 在传统变电站中&…

VLC输出NDI媒体流

目录 1. 下载安装VLC Play 2. 首先在电脑上安装NDI Tools 3. 运行VLC进行输出配置 4. 播放视频 5. 验证 (1)用Studio Monitor验证 (2)用OBS验证 NDI(Network Device Interface)即网络设备接口,是由美国 NewTek 公司开发的免费标准,它可使兼容的视频产品以高质量…

新书速览|PyTorch深度学习与计算机视觉实践

《PyTorch深度学习与计算机视觉实践》 本书内容 在人工智能的浩瀚星空中&#xff0c;深度学习犹如一颗耀眼的明星&#xff0c;引领着计算机视觉技术的发展。《PyTorch深度学习与计算机视觉实践》带领读者领略深度学习在计算视觉领域的魅力&#xff0c;详解使用PyTorch 2.0进行…

Spring Bean配置文件创建对象

类型&#xff1a; 1、值类型 2、null &#xff08;标签&#xff09; 3、特殊符号 &#xff08;< -> < &#xff09; 4、CDATA <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/bea…

【Python】成功解决conda创建虚拟环境时出现的CondaHTTPError: HTTP 000 CONNECTION FAILED错误

【Python】成功解决conda创建虚拟环境时出现的CondaHTTPError: HTTP 000 CONNECTION FAILED错误 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&a…

乐鑫 Matter 技术体验日回顾|全面 Matter 解决方案驱动智能家居新未来

日前&#xff0c;乐鑫信息科技 (688018.SH) 在深圳成功举办了 Matter 方案技术体验日活动&#xff0c;吸引了众多照明电工、窗帘电机、智能门锁、温控等智能家居领域的客户与合作伙伴。活动现场&#xff0c;乐鑫产研团队的小伙伴们与来宾围绕 Matter 产品研发、测试认证、生产工…

elmentui this.$confirm使用模板字符串构建HTML结构

tip(){const checkingList [];const findList[入会1,入会2,入会3] //数组const sueccList [{name:入会,suecc:1000,numcot:1000},{name:aaaaa,suecc:222,numcot:3333}] //数组对象var message// 使用模板字符串构建HTML结构if(sueccList.length>0){message <div>…

【系统架构设计】数据库系统(二)

数据库系统&#xff08;二&#xff09; 数据库模式与范式数据库设计数据库设计的方法数据库设计的基本步骤 事务管理并发控制故障和恢复 备份与恢复分布式数据库系统数据仓库数据挖掘NoSQL大数据 数据库模式与范式 数据库设计 数据库设计的方法 目前已有的数据库设计方法可分…

Matlab 命令行窗口默认输出(异常)

目录 前言Matlab 先验知识1 异常输出的代码2 正常输出的代码 前言 在单独调试 Matlab 写的函数时出现不想出现的异常打印值&#xff0c;逐个注释排查才找到是 if elseif else 代码块的问题&#xff0c;会默认打印输出 else 部分第一个返回值的值&#xff08;下方代码中的 P值&…

【linux】Shell脚本三剑客之grep和egrep命令的详细用法攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

【MySQL进阶之路 | 高级篇】简谈redo日志

1. 前言 事务有四种特性&#xff1a;原子性&#xff0c;一致性&#xff0c;隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢&#xff1f; 事务的隔离性由锁机制实现。而事务的原子性&#xff0c;一致性和持久性由事务的redo日志和undo日志来保证。 REDO LOG称为…

Mysql或MariaDB数据库的用户与授权操作——实操保姆级教程

一、问题描述 在日常的工作中,我们需要给不同角色的人员创建不同的账号,他们各自可访问的数据库或权限不一样,这时就需要创建用户和赋予不同的权限内容了。 二、问题分析 1、创建不同的角色账号; 2、给这些账号授予各自可访问数据库的权限。 三、实现方法 Centos8安装…

多层感知机(神经网络)

目录 一、感知机&#xff08;逻辑回归、二分类&#xff09;定义&#xff1a;二、感知机不能解决XOR问题&#xff1a;三、多层感知机定义&#xff1a;四、训练过程&#xff1a;1.参数维度&#xff1a;2.常用激活函数&#xff1a;2.1Sigmoid激活函数&#xff1a;2.2Tanh激活函数&…

排序XXXXXXXXX

信息学奥赛&#xff5c;常见排序算法总结&#xff08;C&#xff0b;&#xff09; - 腾讯云开发者社区-腾讯云 (tencent.com) https://cloud.tencent.com/developer/news/975232 常用序号层级排序 一、序号 序号Sequence Number&#xff0c;有顺序的号码&#xff0c;如数字序号…