4.3 数值微分

梯度法使用梯度的信息决定前进的方向。本节将介绍梯度是什么、有什么性质等内容。

4.3.1 导数

假如你是全程马拉松选手,在开始的10分钟内跑了2千米。如果要计算此时的奔跑速度,则为2/10 = 0.2[千米/分]。也就是说,你以1分钟前进0.2千米的速度(变化)奔跑。

在这个马拉松的例子中,我们计算了“奔跑的距离”相对于“时间”发生了多大变化。不过,这个10分钟跑2千米的计算方式,严格地讲,计算的是10分钟内的平均速度。而导数表示的是某个瞬间的变化量。因此,将10分钟这一时间段尽可能地缩短,比如计算前1分钟奔跑的距离、前1秒钟奔跑的距离、前0.1秒钟奔跑的距离……这样就可以获得某个瞬间的变化量(某个瞬时速度)。

综上,导数就是表示某个瞬间的变化量。它可以定义成下面的式子。

式(4.4)表示的是函数的导数。左边的符号

表示fx)关于x的导数,即fx)相对于x的变化程度。式(4.4)表示的导数的含义是,x的“微小变化”将导致函数fx)的值在多大程度上发生变化。

如果直接实现式(4.4)的话,向h中赋入一个微小值,就可以计算出来了。比如,下面的实现如何?

函数numerical_diff(f, x)的名称来源于数值微分A 的英文numerical differentiation。这个函数有两个参数,即“函数f”和“传给函数f的参数x”。乍一看这个实现没有问题,但是实际上这段代码有两处需要改进的地方。

如上所示,如果用float32类型(32位的浮点数)来表示1e-50,就会变成0.0,无法正确表示出来。也就是说,使用过小的值会造成计算机出现计算上的问题。这是第一个需要改进的地方,即将微小值h改为

。使用

就可以得到正确的结果。

第二个需要改进的地方与函数f的差分有关。虽然上述实现中计算了函数f在x+h和x之间的差分,但是必须注意到,这个计算从一开始就有误差。如图4-5所示,“真的导数”对应函数在x处的斜率(称为切线),但上述实现中计算的导数对应的是(x + h)和x之间的斜率。因此,真的导数(真的切线)和上述实现中得到的导数的值在严格意义上并不一致。这个差异的出现是因为h不可能无限接近0。

数值微分含有误差。为了减小这个误差,我们可以计算函数f在(x + h)和(x − h)之间的差分。因为这种计算方法以x为中心,计算它左右两边的差分,所以也称为中心差分(而(x + h)和x之间的差分称为前向差分)

让我们用一个简单的类比来理解:

想象你开车,想知道在下午3:00整这一瞬间的瞬时速度(这就是“真的导数”)

方法A(前向差分):你记录下3:00的里程表读数,然后开到3:01再记录一次读数,用里程差除以1分钟。你得到的是3:00到3:01这1分钟内的平均速度,而不是3:00整的瞬时速度。这个平均速度可能接近,但绝不等于瞬时速度。

方法B(中心差分):你记录下2:59的里程表读数,然后开到3:01再记录一次读数,用里程差除以2分钟。你得到的是2:59到3:01这2分钟内的平均速度,而这个平均速度的中心点正好是3:00。由于你的速度不太可能在这2分钟内剧烈波动,这个以3:00为中心的平均速度,通常会比方法A得到的那个从3:00开始的平均速度,更能准确地反映3:00整的瞬时速度。

函数定义如下

4.3.2 数值微分的例子

现在我们试着用上述的数值微分对简单函数进行求导。先来看一个由下式表示的2次函数。

用Python来实现式(4.5),如下所示。

接下来,我们来绘制这个函数的图像。画图所用的代码如下

图像如下

我们来计算一下这个函数在x = 5和x = 10处的导数。

这里计算的导数是f(x)相对于x的变化量,对应函数的斜率。另外,f(x) = 0.01x2 + 0.1x 的解析解是

。因 此,在 x = 5 和x = 10处,“真的导数”分别为0.2和0.3。和上面的结果相比,我们发现虽然严格意义上它们并不一致,但误差非常小。实际上,误差小到基本上可以认为它们是相等的。

4.3.3 偏导数

接下来,我们看一下式(4.6)表示的函数。虽然它只是一个计算参数的平方和的简单函数,但是请注意和上例不同的是,这里有两个变量。

这个式子可以用Python来实现,如下所示。

这里,我们假定向参数输入了一个NumPy数组。函数的内部实现比较简单,先计算NumPy数组中各个元素的平方,再求它们的和(np.sum(x**2)也可以实现同样的处理)。我们来画一下这个函数的图像。结果如图4-8所示,是一个三维图像。

现在我们来求式(4.6)的导数。这里需要注意的是,式(4.6)有两个变量,所以有必要区分对哪个变量求导数,即对x0和x1两个变量中的哪一个求导数。另外,我们把这里讨论的有多个变量的函数的导数称为偏导数。用数学式表示的话,可以写成

怎么求偏导数呢?我们先试着解一下下面两个关于偏导数的问题。

问题1:求x0 = 3, x1 = 4时,关于x0的偏导数

问题2:求x0 = 3, x1 = 4时,关于x1的偏导数

在这些问题中,我们定义了一个只有一个变量的函数,并对这个函数进行了求导。例如,问题1中,我们定义了一个固定x1 = 4的新函数,然后对只有变量x0的函数应用了求数值微分的函数。从上面的计算结果可知,问题1的答案是6.00000000000378,问题2的答案是7.999999999999119,和解析解的导数基本一致。

像这样,偏导数和单变量的导数一样,都是求某个地方的斜率。不过,偏导数需要将多个变量中的某一个变量定为目标变量,并将其他变量固定为某个值。

在上例的代码中,为了将目标变量以外的变量固定到某些特定的值上,我们定义了新函数。然后,对新定义的函数应用了之前的求数值微分的函数,得到偏导数。

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

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

相关文章

Jenkins 监控方案:Prometheus + Grafana 实践

这两天在运维群里面看到有人说 Jenkins 节点也可以监控,以前没想过搞这个,现在就对公司 Jenkins 搞搞顺便记录下呗。 一、使用 Jenkins Prometheus 插件(推荐方式) 1. 安装插件 在 Jenkins 插件管理里搜索并安装 Prometheus Me…

用博图FB类比c#中sdk的api

我有一个大胆的想法我准备自己做个简单的视觉软件来锻炼自己的c#编程能力,我准备用到海康工业机器人官网下载的mvs软件的sdk,听说sdk的主要作用就是api提供了开放的接口给第三方免费调用。按照我的理解,api接口就像西门子博图的FB块,所谓api接…

【Leetcode】高频SQL基础题--1164.指定日期的产品价格

【Leetcode】高频SQL基础题–1164.指定日期的产品价格 要求:一开始,所有产品价格都为 10。编写一个解决方案,找出在 2019-08-16 所有产品的价格。 以 任意顺序 返回结果表。解题思路: 找到 2019-08-16 前所有有改动的产品及其最新…

Django全局异常处理全攻略

在 Django 中处理全局异常,有几种常见的方式,通常目标是: 捕获项目中未被单独处理的错误统一返回给前端(如 JSON 响应 / 自定义错误页)方便记录日志1. 使用 Django 自带的全局异常处理机制 Django 有一些内置的全局错误…

【开题答辩全过程】以电商数据可视化系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

MyBatis入门到精通:CRUD实战指南

1. MyBatisORM:对象关系映射O(Object):Java虚拟机中的Java对象R(Relational):关系型数据库M(Mapping):将Java虚拟机中的Java对象映射到数据库表中一行记录&am…

WebRTC开启实时通信新时代

摘要:WebRTC(Web实时通信)是一项开源技术,支持浏览器直接进行低延迟音视频通信和数据传输,无需安装插件。其核心技术包括RTCPeerConnection(建立点对点连接)、MediaStream(媒体流处理…

【51单片机8*8点阵显示箭头动画详细注释】2022-12-1

缘由51单片机实现8*8滚动箭头的程序,运行时什么图案都没有,甚至根本不亮 - 24小时必答区 #include<reg52.h> unsigned char code M[]{0xff,0xff,0xfe,0xfd,0xf8,0xfd,0xfe,0xff,0xff,0xff,0xfd,0xfb,0xf0,0xfb,0xfd,0xff,0xff,0xff,0xfb,0xf7,0xe0,0xf7,0xfb,0xff,0xff,0…

手撕Redis底层3-持久化机制与集群化方案

1.Redis持久化机制Redis设计了两种持久化落盘机制&#xff1a;RDB和AOF1.1 RDB持久化RDB持久化是Redis的数据快照&#xff0c;简单来说就是把内存中的所有数据都记录到磁盘中&#xff0c;当Redis实例故障重启后&#xff0c;从磁盘中读取快照文件来恢复数据。快照文件称为RDB文件…

mysql中null值对in子查询的影响

1、场景 有这样一个查询&#xff0c;有些时候是正确的&#xff0c;有些时候没报错但是又查询不到数据&#xff0c;分析数据排查后发现当user_id字段存在null值的时候查询不到数据。select * from table1 where id in (select user_id from talbe2 where status1);2、问题 为什么…

如何在 tortoise-orm 内使用 JSON_EXTRACT

先说结论&#xff1a; # 假设 JsonField 名称为 data&#xff0c;内容为 {"info": {"path": "我的资源创建"}} qs qs.filter(data__filter{"info.path": "我的资源创建"})我查看了 tortoise-orm 官方文档&#xff0c;没有这…

西门子S7-200 SMART PLC:编写最基础的“起保停”程序

一、什么是“起保停”电路&#xff1f;“起保停”是“启动-保持-停止”的简称&#xff0c;也称为“自锁电路”。它是继电器控制系统和PLC程序中最基本、最核心的控制逻辑。启动 (Start): 由一个点动按钮&#xff08;常开触点&#xff09;触发&#xff0c;使设备运行。保持 (H…

漏洞修复 Nginx SSL/TLS 弱密码套件

扫描结果 [rootlocalhost nmap]# docker run --rm -v $(pwd)/results:/results securecodebox/nmap nmap --script ssl-enum-ciphers -p 443 xxx.cn -oX /results/output_0904.xml Starting Nmap 7.80 ( https://nmap.org ) at 2025-09-04 05:02 UTC Nmap scan report for xxx.…

ChartGPT深度体验:AI图表生成工具如何高效实现数据可视化与图表美化?

最近帮运营同事做季度数据报告时&#xff0c;我差点在图表样式上栽跟头 —— 明明数据都算好了&#xff0c;用 Excel 调柱状图的颜色、字体、坐标轴标签&#xff0c;来回改了快半小时&#xff0c;要么字体太大挤在一起&#xff0c;要么颜色搭配显脏&#xff0c;运营催得急&…

深入理解 JVM 字节码文件:从组成结构到 Arthas 工具实践

在 Java 技术体系中&#xff0c;JVM&#xff08;Java 虚拟机&#xff09;是实现 “一次编写&#xff0c;到处运行” 的核心。而字节码文件作为 Java 代码编译后的产物&#xff0c;是 JVM 执行的 “原材料”。今天&#xff0c;我们就从字节码文件的组成结构讲起&#xff0c;再结…

SoundSource for Mac 音频控制工具

SoundSource for Mac 是一款音频控制工具&#xff0c;中文常被称为 音频源管理器。它能够精确控制系统与应用程序的音量、输出设备和音效处理&#xff0c;让用户获得比 macOS 原生更灵活的音频管理体验。SoundSource 既适合音乐发烧友&#xff0c;也适合日常办公和影音娱乐用户…

云平台面试内容(二)

5. VPC、子网、路由、NAT网关、安全组、网络ACL 区别与网络隔离设计 概念区别: VPC(虚拟私有云): VPC是在公有云上划分出的一个用户专属的虚拟网络环境,相当于用户在云上的私有数据中心。用户可以自定义VPC的IP地址段、路由策略等。不同VPC网络隔离,默认互不相通,确保资…

2023 arXiv MapperGPT: Large Language Models for Linking and Mapping Entities

论文基本信息 题目&#xff1a;MapperGPT: Large Language Models for Linking and Mapping Entities作者&#xff1a;Nicolas Matentzoglu, J. Harry Caufield, Harshad B. Hegde, Justin T. Reese, Sierra Moxon, Hyeongsik Kim, Nomi L. Harris, Melissa A Haendel, Christo…

Docker入门到精通:从零基础到生产部署

前言&#xff1a;为什么你需要学习Docker&#xff1f; 想象一下&#xff0c;你开发了一个应用程序&#xff0c;在你的电脑上运行完美&#xff0c;但当你把它交给同事或部署到服务器时&#xff0c;却出现了各种奇怪的问题。这就是著名的"在我机器上能运行"问题。 Do…

HOT100--Day15--98. 验证二叉搜索树,230. 二叉搜索树中第 K 小的元素,199. 二叉树的右视图

HOT100–Day15–98. 验证二叉搜索树&#xff0c;230. 二叉搜索树中第 K 小的元素&#xff0c;199. 二叉树的右视图 每日刷题系列。今天的题目是《力扣HOT100》题单。 题目类型&#xff1a;二叉树。 关键&#xff1a;要深刻理解《递归》 98. 验证二叉搜索树 思路&#xff1a; …