从变化率的角度认识一下梯度及在自变量的角度上认识梯度下降

2023-11-03 22:59

本文主要是介绍从变化率的角度认识一下梯度及在自变量的角度上认识梯度下降,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文内容

  • 函数的回顾
  • 方向导数的回顾
  • 从变化率的角度认识一下向量
  • 从变化率的角度认识一下梯度
  • 梯度下降的另一种认识

一直以来我对于梯度这个更多是几何概念的物体和偏导数(变化率)的联系充满了困惑,最近重新学习线性回归,在复习梯度下降的时候,查阅了一些资料,重新在变化率的角度上认识了向量,充分理解了梯度和偏导数的联系。故根据一些感悟,书写此文,供大方之家批评指导

写在最前

最近在看《西学门径》,其中有朱光潜大师说过的一句话:“做学问光读不写不行。写就是要读得更认真一点,要把所读的在自己头脑里整理一番,思索一番,就会懂得较透些,使作者的思想经过消化,变成自己的精神营养”。 简单的语言,道出了深刻的道理,传授了宝贵的经验。做事必要踏踏实实,读完几篇晦涩的文章,一知半解是常有的事情,表面上很用功,然而,内心的收获却是非常微妙的,这个时候,很容易用表明上的功夫来安慰内心的空泛,造成欺骗自己,欺骗内心。这是读书没有用心。我觉得,朱光潜大师给出的这种方法是非常实用的一种方法。从研学上看,给了我们一种切实的方法;从做人做事上看,给了我们务实的精神和修心的原则。所谓务实,不肤浅于表面,所谓修心,不做违心事,不欺心。
在写这篇博客之前偶尔看到华为总裁任正非先生的一段话:“年轻人要扎实,做事才可能成功。年轻人要合作,每一个人的力量都是单薄的,只有合作才能共赢。年轻人要持续不断的努力,不要以为自己很聪明,今天搞这样,明天搞那样,这样可能青春就荒废了,扎扎实实做一件事情,可能很成功。” 青春短暂,我们能输的起,我们能踏踏实实做一件事,不怕输,无畏风雨。在这美好的年华里,我们应该不负韶光,不负生命,踏踏实实的敢做敢为。

读书偶有摘录和心得,写在最前,勉励自己。与下文无关

函数的重述

严谨而漂亮的数学公式是一种表达工具,短小精悍的公式携带了大量的信息和深邃的思想。然而,它便于流通,可不一定便于理解。我习惯于用自然语言表达数学概念的核心思想。

函数描述的是一个变量如何随另外其他变量变化,然后还要考虑变化快慢的问题,实际是怎么变的问题,这便是变化率。 无论是一元函数还是多元函数,无论是一阶导数还是高阶导数,都尽在这一句话中。
一元函数描述的是一个变量随另外一个变量的变化,这就是因变量和自变量,两个变量。变化率就是当自变量变化一定大小时,因变量应该以怎样的倍数变化。
多元函数描述的是一个变量随另外几个变量的变化,这时自变量有多个。我们仍然想要看一看变化率,就是某个自变量发送变化时,因变量该以怎样的倍数变化。这就是因变量对于该自变量的偏导数。在一元中,我们有因变量关于全部自变量的变化率。在多元中,我们仍然有希望找到因变量关于全部自变量的变化率,这就是方向导数。方向导数中有一个非常特殊的方向,那就是梯度的方向,梯度是一个向量,是一个非常特别的向量,在这个方向上,自变量发生变化时,因变量会发生最大的变化。其实梯度是所有的变化率的直接线性组合,没有进行缩放,后面会说明。
而一阶导数和高阶导数,都可以放在函数及其导数的概念上来认识。将 n − 1 n-1 n1阶导数作为一个多元函数,那么 n n n阶导数就是该多元函数的导数。这方面的研究并不多。

方向导数回顾

现在,我们已经知道了多元函数在不同轴方向上的变化率,也就是因变量关于自变量的变化率。现在想要知道在任意方向上的变化率。任意方向可以通过轴方向进行线性组合得到,而变化率直接乘上去即可,因为如果将变化率看成是向量的长度的话,那么将变化率直接乘上去是正确的,在下一部分在详细介绍。现在以二元函数为例,如下图:
在这里插入图片描述
考虑一个单位圆,在单位圆中,我们可以用 [ c o s θ s i n θ ] \begin{bmatrix}cos\theta \\ sin\theta \end{bmatrix} [cosθsinθ]来表示任意方向。同样的,在这里,我们依然可以用这个向量来表示,有了任意方向,我们再乘上变化率,就得到了方向导数:
D u f ( x , y ) = f x ( x , y ) c o s θ + f y ( x , y ) s i n θ D_uf(x,y)=f_x(x,y)cosθ+f_y(x,y)sin\theta Duf(x,y)=fx(x,y)cosθ+fy(x,y)sinθ对它进行向量化:令 A = [ f x ( x , y ) f y ( x , y ) ] , H = [ c o s θ s i n θ ] A=\begin{bmatrix}f_x(x,y)\\f_y(x,y)\end{bmatrix},H=\begin{bmatrix}cos\theta \\ sin\theta\end{bmatrix} A=[fx(x,y)fy(x,y)],H=[cosθsinθ]于是我们得到: D u f ( x , y ) = A T H = ∣ A ∣ ∣ H ∣ c o s α D_uf(x,y)=A^TH=|A||H|cos\alpha Duf(x,y)=ATH=AHcosα其中 α \alpha α表示向量 A A A与向量 H H H的夹角。当方向导数取最大值的时候,也就是变化率最大的时候, α = 0 \alpha=0 α=0 A A A H H H平行,此时 ∣ H ∣ = 1 |H|=1 H=1,所以此时的最大值就是 ∣ A ∣ |A| A,方向就是向量 A = [ f x ( x , y ) f y ( x , y ) ] A=\begin{bmatrix}f_x(x,y)\\f_y(x,y)\end{bmatrix} A=[fx(x,y)fy(x,y)]的方向,我们重新给这个向量一个名称:梯度。

从变化率的角度认识一下向量

最常见的认识方式:分量
以二维平面为例:在平面 x o y xoy xoy中,在 x x x轴上,有单位向量 i i i,在 y y y轴上有单位向量 j j j。那么由这两个单位向量任意进行线性组合就可以得到平面内的所有向量。比如,在 x x x轴上有分量 2 i 2i 2i,在 y y y轴上有分量 3 j 3j 3j,那么得到的向量就是 2 i + 3 j 2i+3j 2i+3j,可以记作 a = [ 2 , 3 ] a=[2,3] a=[2,3]

基于分量的一种方式:变化率
在一元函数中 y = 2 x y=2x y=2x的变化率是2。在上面的分量中, x = 2 i , y = 3 j x=2i,y=3j x=2i,y=3j,实际上 i , j i,j i,j都是表示是一种同样大小的"元",只不过是方向不同,它在一定程度上类似于参数方程 x = x ( t ) , y = y ( t ) x=x(t),y=y(t) x=x(t),y=y(t)。类比于一元函数, x x x对于 i i i的变化率是 2 2 2 y y y对于 j j j是变化率是 3 3 3(先忽略对矢量的考虑)。那么向量 a = [ 2 , 3 ] a=[2,3] a=[2,3]中的数据就是变化率向量在不同轴上的变化率。变化率本来就是基于分量考虑的,变化率也可以看做是分量的长度,如果这样的话,那么前面说到的直接乘上去是正确的。

可以这么认为:每个方向上的元向量的大小是同时变化,变化同等大小的。对于每个方向上的元向量,当其发生变化时,向量 a a a x x x方向上以变化率 2 2 2变化,在 y y y方向上以变化率 3 3 3变化。或者可以认为,向量 a a a是由元向量在 x x x方向上以变化率 2 2 2变化,在 y y y方向上以变化率 3 3 3变化而生成的。

从变化率的角度认识梯度

当在变化率的角度上看向量的时候,那么很自然就会认为梯度这个向量应该也是元向量在不同的轴上以该轴上的变化率变化而生成的。例如: F = 2 x + 3 y + 4 z = 0 F=2x+3y+4z=0 F=2x+3y+4z=0 在不同轴上的变化率: F x = 2 , F y = 3 , F z = 4 F_x=2,Fy=3,F_z=4 Fx=2,Fy=3,Fz=4。记不同轴上的元向量: i , j , k i,j,k i,j,k。那么梯度 ∇ = 2 i + 3 j + 4 k \nabla=2i+3j+4k =2i+3j+4k,即: ∇ = [ 2 , 3 , 4 ] \nabla=[2,3,4] =[2,3,4]

从这个角度看待梯度,我们能够将变化率和向量联系在一起,这样更容易去接受一个几何上的图形是由偏导数组成。

梯度下降的另一种认识

基于变化率认识了向量之后,我们更容易接受梯度跟偏导数的密切关系。梯度是一个向量,这个向量是对于因变量而言的,因为梯度的方向是因变量下降最快的方向,这个概念是立足于因变量的,如果我们立足于自变量重新命名这个概念的话,不妨叫做:极值点移动。

  • 极值点是在函数取得局部最小值的时候对应的自变量的值。
  • 之所以叫做是极值点而不是最值点,是因为梯度下降是会找到局部解,而不一定找到最优解。
  • 移动是说自变量都移向这个值。

基于变化率对向量的认识,解决了我一直以来的困惑:为什么一个几何上的图形是有代数上的变化率组成,它们之间究竟有什么关系。

参考

[1] https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==&mid=2247483704&idx=1&sn=8f0c6e33ef84c26823e562be16bce684&chksm=ebb439ecdcc3b0fa4e9571deb33ccea62e42034c88db4e190633588307dce4a1e0c91ed2635c&scene=21#wechat_redirect
[2] https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/2.-partial-derivatives/part-b-chain-rule-gradient-and-directional-derivatives/session-35-gradient-definition-perpendicular-to-level-curves

这篇关于从变化率的角度认识一下梯度及在自变量的角度上认识梯度下降的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/341468

相关文章

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理

AI学习指南深度学习篇——带动量的随机梯度下降法的基本原理 引言 在深度学习中,优化算法被广泛应用于训练神经网络模型。随机梯度下降法(SGD)是最常用的优化算法之一,但单独使用SGD在收敛速度和稳定性方面存在一些问题。为了应对这些挑战,动量法应运而生。本文将详细介绍动量法的原理,包括动量的概念、指数加权移动平均、参数更新等内容,最后通过实际示例展示动量如何帮助SGD在参数更新过程中平稳地前进。

SpringMVC-1.认识及配置

SpringMVC是一个基于请求驱动的Web框架,和structs一样是目前最优秀的基于MVC框架,现在的项目一般都使用SpringMVC代替Structs。 MVC模式中,Model是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象在数据库中存取数据。View是应用程序中处理数据显示的部分,通常视图是依据模型数据创建。Controller是应用程序中处理用户交互的部分。通常控制器负责从视

【H2O2|全栈】关于HTML(1)认识HTML

HTML相关知识 目录 前言 准备工作 WEB前端是什么? HTML是什么? 如何运行HTML文件? 标签 概念 分类 双标签和单标签 行内标签和块标签 HTML文档结构 预告和回顾 UI设计相关 Markdown | Md文档相关  项目合作管理相关  后话 前言 本系列的博客将分享前端HTML的相关知识点。 本篇作为本系列的第一期博客,主要讲解H

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中,优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率,还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化,传统的优化算法在许多领域逐渐暴露出其不足之处。带动量的随机梯度下降法(Momentum SGD)应运而生,并被广泛应用于各类深度学习模型中。 在本篇文章中,我们将深入探讨带动量的随

认识鬼火引擎

一、Irrlicht简介 (1)概念Irrlicht引擎是一个用C++书写的高性能实时3D引擎,可以应用于C++程序或者.NET语言中。通过使用Direct3D(Windows平台)、OpenGL 或它自己的软件着色程序,可以实现该引的完​全跨平台。尽管是开源的,该Irrlicht库提供了可以在商业级的3D引擎上具有的艺术特性,例如动态的阴影,粒子系统,角色动画,室内和室外技术以及碰撞检测等。(

Jenkins--pipeline认识及与RF文件的结合应用

什么是pipeline? Pipeline,就是可运行在Jenkins上的工作流框架,将原本独立运行的单个或多个节点任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。 为什么要使用pipeline? 1.流程可视化显示 2.可自定义流程任务 3.所有步骤代码化实现 如何使用pipeline 首先需要安装pipeline插件: 流水线有声明式和脚本式的流水线语法 流水线结构介绍 Node: