图解梯度下降背后的数学原理

敏捷在软件开发过程中是一个非常著名的术语,它背后的基本思想很简单:快速构建一些东西,然后得到一些反馈,根据反馈做出改变,重复此过程。目标是让产品更贴合用,让用户做出反馈,以获得设计开发出的产品与优秀的产品二者之间误差最小,梯度下降算法背后的原理和这基本一样。

目的

梯度下降算法是一个迭代过程,它将获得函数的最小值。下面的公式将整个梯度下降算法汇总在一行中。

但是这个公式是如何得出的呢?实际上很简单,只需要具备一些高中的数学知识即可理解。本文将尝试讲解这个公式,并以线性回归模型为例,构建此类公式。

机器学习模型

  • 考虑二维空间中的一堆数据点。假设数据与一组学生的身高和体重有关。试图预测这些数量之间的某种关系,以便我们可以预测一些新生的体重。这本质上是一种有监督学习的简单例子。
  • 现在在空间中绘制一条穿过其中一些数据点的任意直线,该直线方程的形如Y=mX+b,其中m是斜率,b是其在Y轴的截距。

预测

给定一组已知的输入及其相应的输出,机器学习模型试图对一组新的输入做出一些预测。


两个预测之间的差异即为错误。


这涉及成本函数或损失函数的概念(cost function or loss function)。

成本函数

成本函数/损失函数用来评估机器学习算法的性能。二者的区别在于,损失函数计算单个训练示例的错误,而成本函数是整个训练集上错误的平均值。

成本函数基本上能告诉我们模型在给定m和b的值时,其预测能“有多好”。

比方说,数据集中总共有N个点,我们想要最小化所有N个数据点的误差。因此,成本函数将是总平方误差,即

为什么采取平方差而不是绝对差?因为平方差使得导出回归线更容易。实际上,为了找到这条直线,我们需要计算成本函数的一阶导数,而计算绝对值的导数比平方值更难。

最小化成本函数

任何机器学习算法的目标都是最小化成本函数。

这是因为实际值和预测值之间的误差对应着表示算法在学习方面的性能。由于希望误差值最小,因此尽量使得那些mb值能够产生尽可能小的误差。

如何最小化一个任意函数?

仔细观察上述的成本函数,其形式为Y=X²。在笛卡尔坐标系中,这是一个抛物线方程,用图形表示如下:


为了最小化上面的函数,需要找到一个x,函数在该点能产生小值Y,即图中的红点。由于这是一个二维图像,因此很容易找到其最小值,但是在维度比较大的情况下,情况会更加复杂。对于种情况,需要设计一种算法来定位最小值,该算法称为梯度下降算法(Gradient Descent)。
 

梯度下降

梯度下降是优化模型的方法中最流行的算法之一,也是迄今为止优化神经网络的最常用方法。它本质上是一种迭代优化算法,用于查找函数的最小值。

表示

假设你是沿着下面的图表走,目前位于曲线'绿'点处,而目标是到达最小值,即点位置,但你是无法看到该最低点。


可能采取的行动:

  • 可能向上或向下;
  • 如果决定走哪条路,可能会采取更大的步伐或小的步伐来到达目的地;

从本质上讲,你应该知道两件事来达到最小值,即走哪条和走多远。

梯度下降算法通过使用导数帮助我们有效地做出这些决策。导数是来源于积分,用于计算曲线特定点处的斜率。通过在该点处绘制图形的切线来描述斜率。因此,如果能够计算出这条切线,可能就能够计算达到最小值的所需方向。

最小值

在下图中,在绿点处绘制切线,如果向上移动,就将远离最小值,反之亦然。此外,切线也能让我们感觉到斜坡的陡峭程度。


蓝点处的斜率比绿点处的斜率低,这意味着从蓝点到绿点所需的步长要小得多。

成本函数的数学解释

现在将上述内容纳入数学公式中。在等式y=mX+b中,mb是其参数。在训练过程中,其值也会发生微小变化,用δ表示这个小的变化。参数值将分别更新为m = m-δm 和b = b-δb。最终目标是找到mb的值,以使得y=mx+b 的误差最小,即最小化成本函数。
重写成本函数:

想法是,通过计算函数的导数/斜率,就可以找到函数的最小值。

学习率

达到最小值或最低值所采取的步长大小称为学习率。学习率可以设置的比较大,但有可能会错过最小值。而另一方面,小的学习率将花费大量时间训练以达到最低点。
下面的可视化给出了学习率的基本概念。在第三个图中,以最小步数达到最小点,这表明该学习率是此问题的最佳学习率。

从上图可以看到,当学习率太低时,需要花费很长训练时间才能收敛。而另一方面,当学习率太高时,梯度下降未达到最小值,如下面所示:

11

导数

机器学习在优化问题中使用导数。梯度下降等优化算法使用导数来决定是增加还是减少权重,进而增加或减少目标函数。
如果能够计算出函数的导数,就可以知道在哪个方向上能到达最小化。
主要处理方法源自于微积分中的两个基本概念:

  • 指数法则
    指数法则求导公式:

  • 链式法则
    链式法则用于计算复合函数的导数,如果变量z取决于变量y,且它本身也依赖于变量x,因此y和z是因变量,那么z对x的导数也与y有,这称为链式法则,在数学上写为:

举个例子加强理解:


使用指数法则和链式发规,计算成本函数相对于m和c的变化方式。这涉及偏导数的概念,即如果存在两个变量的函数,那么为了找到该函数对其中一个变量的偏导数,需将另一个变量视为常数。举个例子加强理解:

计算梯度下降

现在将这些微积分法则的知识应用到原始方程中,并找到成本函数的导数,即mb。修改成本函数方程:


为简单起见,忽略求和符号。求和部分其实很重要,尤其是随机梯度下降(SGD)与批量梯度下降的概念。在批量梯度下降期间,我们一次查看所有训练样例的错误,而在SGD中一次只查看其中的一个错误。这里为了简单起见,假设一次只查看其中的一个错误:


现在计算误差对m和b的梯度:


将值对等到成本函数中并将其乘以学习率:


其中这个等式中的系数项2是一个常数,求导时并不重要,这里将其忽略。因此,最终,整篇文章归结为两个简单的方程式,它们代表了梯度下降的方程。


其中是下一个位置的参数;m⁰b⁰是当前位置的参数。

因此,为了求解梯度,使用新的mb值迭代数据点并计算偏导数。这个新的梯度会告诉我们当前位置的成本函数的斜率以及我们应该更新参数的方向。另外更新参数的步长由学习率控制。

结论

本文的重点是展示梯度下降的基本概念,并以线性回归为例讲解梯度下降算法。通过绘制最佳拟合线来衡量学生身高和体重之间的关系。但是,这里为了简单起见,举的例子是机器学习算法中较简单的线性回归模型,读者也可以将其应用到其它机器学习方法中。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

mysql数据迁移neo4j_neo4j数据库迁移---------Neo4j数据库导入导出的方法

Neo4j数据进行备份、还原、迁移的操作时,首先要关闭neo4j;/usr/share/neo4j/binneo4j stop如果出现Neo4j not running出现这种情况, Neo4j没有运行, 但是浏览器仍然可以访问neo4j数据库的情况, 直接执行导入数据后,是无法看到导入的数据库,其实这种情况下Neo4j仍在运…

rabbitmq配置文件字段spring.rabbitmq.publisher-confirms过时

spring.rabbitmq.publisher-confirms过时解决 在properties文件中确认消息报红 因为源码中过时配置级别设置了Error 新版本jar包配置换了就可以了 spring.rabbitmq.publisher-confirm-typecorrelated

如何利用 Webshell 诊断 EDAS Serverless 应用

本文主要介绍 Serverless 应用的网络环境以及 Serverless 应用容器内的环境,了解背景知识以及基本的运维知识后可以利用 Webshell 完成基本的运维需求。 Webshell 简介 用户可以通过阿里云控制台直接获取 ECS 的 Shell,从而完成自己的运维需求。如果 E…

刚刚,阿里云上线六大“战疫情”项目

作者 | Just出品 | CSDN云计算(CSDNcloud)抗击新冠肺炎,一线互联网大厂在行动。疫情发生以来,诸多科技公司都在思考如何利用技术来帮助抗击疫情,其中,阿里巴巴也是首当其冲。今天,阿里云上线了“…

MSSQL - 最佳实践 - 如何打码隐私数据列

摘要 在SQL Server安全系列专题月报分享中,我们已经分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥加密方式实现SQL Server列加密、使用混合密钥实现SQL Server列加密技术、列加密技术带来的查询性能问题以及相应解决方案和行级别安…

手把手教你使用TF服务将TensorFlow模型部署到生产环境

介绍 将机器学习(ML)模型应用于生产环境已成为一个火热的的话题,许多框架提供了旨在解决此问题的不同解决方案。为解决这一问题,谷歌发布了TensorFlow(TF)服务,以期待解决将ML模型部署到生产中的问题。 本…

一次搞定各种数据库SQL执行计划

作者 | 董旭阳TonyDong出品 | CSDN 博客执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等。如果 SQL 语…

阿里云MVP北京闭门会圆满落幕 多把“利剑”助力开发者破阵蜕变

3月21日,北京国家会议中心,阿里云北京峰会吸引了全球计算机行业的目光。十年时间,阿里云开创中国云时代,研发了属于自己的云操作系统和城市AI平台,云普惠各行各业数百万客户。下一个十年,在阿里云战略升级为…

python3 django开发_python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)...

自己独立写一个学员管理系统表结构:班级表:-id-grade_name学生表:-id-student_name-grade 关联外键班级表老师表:-id-teacher_name-grades (多对多 关联班级表)在写小项目之前我们先复习一下小知识:1、 form表单提交数…

“云原生全家桶“KubeSphere 如何让企业从容迈进云原生时代?

作者 | 刘丹来源 | CSDN云计算(ID:CSDNcloud)最近两年,云原生大火。究其原因,“数字化转型”几乎成为所有企业当下最迫切的需求,在这样的趋势下,恰逢新旧IT架构升级的契机,容器、微服…

Kubernetes Ingress 日志分析与监控的最佳实践

Ingress 主要提供 HTTP 层(7 层)路由功能,是目前 K8s 中 HTTP/HTTPS 服务的主流暴露方式。为简化广大用户对于 Ingress 日志分析与监控的门槛,阿里云容器服务和日志服务将 Ingress 日志打通,只需要应用一个 yaml 资源即…

SpringBoot之AOP详解

面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP)。 OOP中模块化的关键单元是类,而在AOP中,模块化单元是方面。 文章目录准备工作1. Pointcut 切入点2.Before前置通知3.After 后…

HUAWEI华为笔记本电脑MateBook D 14 2022款 i5 集显 非触屏(NbDE-WFH9)原装出厂Windows11系统21H2

链接:https://pan.baidu.com/s/1-tCCFwZ0RggXtbWYBVyhFg?pwdmcgv 提取码:mcgv 华为MageBookD14原厂WIN11系统自带所有驱动、出厂状态主题壁纸、Office办公软件、华为电脑管家、华为应用市场等预装软件程序 文件格式:esd/wim/swm 安装方式…

远程办公首日企业通讯软件崩溃、紧急扩容,云办公怎么了?

作者 | 阿文责编 | 伍杏玲来源 | 程序人生(ID:coder_life)受新型冠状病毒性肺炎的疫情影响,各地实施了严格的控制手段:封村、封路、封小区、暂停省际、县级、村级班车等措施。1月27日,国务院办公厅发布关于…

我在阿里云做前端

前言 今年是我毕业的第10个年头,半路出家做了前端,title一直是前端,你可以说我很专注,有时候也有些遗憾。一直以来,当别人问起你是做什么的,我说前端或者全栈,别人说:哦&#xff0c…

Mybatis-Plus的SQL语句组拼原理

前言:记录查找自动组拼SQL语句的过程 首先在BaseMapper其中的一个方法下打个断点 在断点显示的值栏找到相关的SQL 发现SQL语句在MappedStatement对象中,而sqlSource存的就是相关的sql语句 然后在MappedStatement这个对象打断点,看看到底是…

云漫圈 | 什么是字符串匹配算法?

作者 | 程序员小灰来源 | 程序员小灰(ID:chengxuyuanxiaohui )————— 第二天 —————什么意思呢?让我们来举一个例子:在上图中,字符串B是A的子串,B第一次在A中出现的位置下标是2&#…

MSSQL实践-数据库备份加密

摘要 在SQL Server安全系列专题月报分享中,我们已经分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥实现SQL Server列加密、使用混合密钥实现SQL Server列加密技术、列加密技术带来的查询性能问题以及相应解决方案、行级别安全解决方…

Kubernetes 如何打赢容器之战?

Kubernetes 近几年很热门,在各大技术论坛上被炒的很火。它提供了强大的容器编排能力,与此同时 DevOps 的概念也来到大家身边,广大的开发同学也能简单地运维复杂的商业化分布式系统,打破了传统开发和运维之间的界限。 本文会以初学…

一行Python代码能干什么?有意思!

我下班最大的乐趣就是刷抖音一开始刷的都是一些无聊小剧场后来看看能不能刷一些技术上的内容因为本人觉得Java是世界上最好的编程语言可是我在刷抖音的时候刷到了一行Python代码能干什么我突然觉得爱上Python了之前是听说Python比较简单同样的内容Java、C语言需要十几行Python只…