惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
Spread Privacy
Spread Privacy
T
Threatpost
C
Cisco Blogs
P
Palo Alto Networks Blog
AI
AI
Cyberwarzone
Cyberwarzone
NISL@THU
NISL@THU
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
T
Tor Project blog
Latest news
Latest news
AWS News Blog
AWS News Blog
D
Docker
S
SegmentFault 最新的问题
博客园 - 聂微东
WordPress大学
WordPress大学
Vercel News
Vercel News
S
Securelist
爱范儿
爱范儿
J
Java Code Geeks
Know Your Adversary
Know Your Adversary
S
Schneier on Security
Hugging Face - Blog
Hugging Face - Blog
F
Fortinet All Blogs
Last Week in AI
Last Week in AI
D
DataBreaches.Net
宝玉的分享
宝玉的分享
D
Darknet – Hacking Tools, Hacker News & Cyber Security
MongoDB | Blog
MongoDB | Blog
Engineering at Meta
Engineering at Meta
K
Kaspersky official blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
量子位
博客园_首页
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
Google Online Security Blog
Google Online Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
腾讯CDC
T
Threat Research - Cisco Blogs
雷峰网
雷峰网
有赞技术团队
有赞技术团队
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy International News Feed
S
Security Affairs

博客园 - 立体风

当AI构建自身 nana gui库的回调函数 Nana c++ gui库的对话框函数 -- 理解 nana 的运行机制 介绍 MSVC 的编译命令/ Zc CMake 变量 ${CMAKE_CURRENT_BINARY_DIR} 学习 nana c++ 库 (一) AutoHotkey v2 的源码学习路线 Visual Studio 中行号右边的黄色竖条 大O表示法推导 allocate 中为什么有两个L vs的cl.exe 编译器 c++20 基本配置 IT高频词 address Python Install Manager (PIM,官方安装管理器)简介 debian 中 contrib 软件仓库 debian 版本号及 apt 命令对软件的区分 sysctl的历史及常用命令 极限运算的法则 TeX 的 ctex 宏包的基本用法 XeLaTeX 的基本用法 XeLaTeX 介绍 为什么梯度向量 ∇f 指向函数值增长最快的方向 三角函数的余弦定理的证明 向量点积的几何定义的证明 仿射函数的定义及用途 凸集的定义及证明 在 LaTeX 公式中处理英文单词 梯度下降法 (Gradient Descent)的数学原理。 梯度下降法简介 向量形式表达最小二乘法 线性回归模型的核心数学表达式 risidual 音标和本义 coefficients的音标及本义(线性模型)
方向导数公式的证明
立体风 · 2025-09-08 · via 博客园 - 立体风

方向导数的计算公式

方向导数 \(D_\mathbf{u}f(\mathbf{x})\) 衡量了函数 \(f\) 在点 \(\mathbf{x}\) 处沿单位向量 \(\mathbf{u}\) 方向的变化率。要证明 \(D_\mathbf{u}f(\mathbf{x}) = \nabla f(\mathbf{x}) \cdot \mathbf{u}\),我们可以使用多元函数链式法则

首先,我们用极限来定义方向导数:

\[D_\mathbf{u}f(\mathbf{x}) = \lim_{h \to 0} \frac{f(\mathbf{x} + h\mathbf{u}) - f(\mathbf{x})}{h} \]

这个表达式与单变量函数导数的定义非常相似,它测量的是当自变量从 \(\mathbf{x}\) 沿着 \(\mathbf{u}\) 方向移动一小段距离 \(h\) 时,函数值的变化率。

为了计算这个极限,我们引入一个辅助函数
定义一个单变量函数 \(g(t) = f(\mathbf{x} + t\mathbf{u})\)

  • 这里的 \(t\) 是一个标量,代表沿着 \(\mathbf{u}\) 方向移动的距离。
  • \(t=0\) 时,\(g(0) = f(\mathbf{x})\)
  • \(t=h\) 时,\(g(h) = f(\mathbf{x} + h\mathbf{u})\)

利用这个辅助函数,\(D_\mathbf{u}f(\mathbf{x})\) 的极限定义可以写成:

\[D_\mathbf{u}f(\mathbf{x}) = \lim_{h \to 0} \frac{g(h) - g(0)}{h} \]

这个极限正是函数 \(g(t)\)\(t=0\) 处的导数,即 \(g'(0)\)。$$D_\mathbf{u}f(\mathbf{x}) = g'(0)$$

现在,我们只需计算 \(g'(t)\),然后将 \(t=0\) 代入即可。我们可以使用多元函数链式法则来完成这个任务。

\(\mathbf{y}(t) = \mathbf{x} + t\mathbf{u}\)。这里,\(\mathbf{y}(t)\) 是一个向量函数,它的分量为:
\(\mathbf{y}(t) = (x_1 + tu_1, x_2 + tu_2, \dots, x_n + tu_n)\)
其中 \(\mathbf{x} = (x_1, \dots, x_n)\)\(\mathbf{u} = (u_1, \dots, u_n)\)

根据链式法则,

\[\frac{dg}{dt} = \frac{\partial f}{\partial y_1}\frac{dy_1}{dt} + \frac{\partial f}{\partial y_2}\frac{dy_2}{dt} + \dots + \frac{\partial f}{\partial y_n}\frac{dy_n}{dt} \]

我们计算每个分量对 \(t\) 的导数:
\(\frac{dy_i}{dt} = \frac{d}{dt}(x_i + tu_i) = u_i\)

将这些代入链式法则公式,且由于这里的 \(\frac{\partial f}{\partial y_i}\) ,由于最终求的是 \(g'(0)\) ,所以 \(y(0) = x + 0 u = x\), 故可以把\(\frac{\partial f}{\partial y_i}\) 变为 \(\frac{\partial f}{\partial x_i}\)

\[g'(0) = \frac{dg}{dt} = \frac{\partial f}{\partial x_1}u_1 + \frac{\partial f}{\partial x_2}u_2 + \dots + \frac{\partial f}{\partial x_n}u_n \]

这个和式可以用向量点积的形式简洁地表示:

\[g'(0) = \frac{dg}{dt} = \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \dots, \frac{\partial f}{\partial x_n} \right) \cdot (u_1, u_2, \dots, u_n) \]

左边的向量就是梯度 \(\nabla f(\mathbf{x})\),右边的向量就是方向向量 \(\mathbf{u}\)

所以,我们得到:

\[g'(0) = \frac{dg}{dt} = \nabla f(\mathbf{x}) \cdot \mathbf{u} \]

由于 \(D_\mathbf{u}f(\mathbf{x}) = g'(0)\),且 \(\frac{dg}{dt}\)\(t\) 无关,我们最终证明了:

\[D_\mathbf{u}f(\mathbf{x}) = \nabla f(\mathbf{x}) \cdot \mathbf{u} \]

这个公式的意义在于,它将方向导数(一个关于方向的概念)与梯度(一个固定的向量)联系起来,为计算任意方向上的变化率提供了一个简单、统一的方法。

“滥用符号”的问题

在数学推导中很常见的“符号替换”或“滥用符号”的现象。

1. 我们的目标:计算 \(g'(t)\)

我们的任务是计算单变量函数 \(g(t) = f(\mathbf{y}(t))\) 的导数,其中 \(\mathbf{y}(t) = \mathbf{x} + t\mathbf{u}\)

根据链式法则,我们得到:

\[g'(t) = \frac{dg}{dt} = \sum_{i=1}^{n} \frac{\partial f}{\partial y_i} \frac{dy_i}{dt} \]

这里的 \(\frac{\partial f}{\partial y_i}\) 是函数 \(f\) 对其第 \(i\) 个输入变量的偏导数。

关键点来了:当我们写出 \(\frac{\partial f}{\partial y_i}\) 时,它是在函数 \(f\) 的自变量是向量 \(\mathbf{y}\) 时计算的。具体来说,这个偏导数是在点 \(\mathbf{y}(t)\) 处计算的。所以,更严谨的写法应该是:

\[\frac{\partial f}{\partial y_i} \bigg|_{\mathbf{y}=\mathbf{y}(t)} = \frac{\partial f}{\partial y_i} (\mathbf{y}(t)) \]

2. 为什么可以“替换”?

我们再看一眼 \(\mathbf{y}(t)\) 的定义:\(\mathbf{y}(t) = \mathbf{x} + t\mathbf{u}\)
这意味着 \(\mathbf{y}\) 的分量是:\(y_i = x_i + tu_i\)

在我们的证明中,\(\mathbf{x}\) 是一个固定的点,而 \(\mathbf{y}\) 是一个\(\mathbf{x}\)出发,沿着方向 \(\mathbf{u}\) 运动的点
当我们在讨论 \(f(\mathbf{y})\) 的偏导数时,我们是在讨论函数 \(f\) 在任意点 \(\mathbf{y}\) 处的偏导数。
而当我们在讨论 \(f(\mathbf{x})\) 的偏导数时,我们是在讨论函数 \(f\) 在特定点 \(\mathbf{x}\) 处的偏导数。

在最终的推导中,我们需要的其实是 \(g'(0)\),也就是 \(t=0\) 时的导数。

\[g'(0) = \sum_{i=1}^{n} \frac{\partial f}{\partial y_i} \bigg|_{t=0} \frac{dy_i}{dt} \bigg|_{t=0} \]

\(t=0\) 时:
由于 \(\mathbf{y}\) 的分量是:\(y_i = x_i + tu_i\)。带入 \(t=0\) 后可知 \(y_i = x_i + 0*u_i = x_i\)
即 当 \(t=0\) 时,\(y_i = x_i\)

所以,整理后得:

\[D_\mathbf{u}f(\mathbf{x}) = g'(0) = \sum_{i=1}^{n} \frac{\partial f}{\partial x_i} u_i = \nabla f(\mathbf{x}) \cdot \mathbf{u} \]

3. “滥用符号”的解释

在数学写作中,尤其是在一些教科书或推导中,为了简化符号,人们常常会省略对自变量的显式标记

  • 严谨的写法\(\frac{\partial f}{\partial y_i}(\mathbf{y}(t))\),明确表示偏导数是在 \(\mathbf{y}(t)\) 点计算的。
  • 简化的写法\(\frac{\partial f}{\partial y_i}\),没有明确指出是在哪个点计算的。

当推导进行到 \(\frac{dg}{dt} = \sum_{i=1}^{n} \frac{\partial f}{\partial y_i} \frac{dy_i}{dt}\) 时,作者知道最终我们关心的是 \(t=0\) 时的值。而当 \(t=0\) 时,\(\mathbf{y}(0) = \mathbf{x}\)。所以,这里的 \(\frac{\partial f}{\partial y_i}\) 实际上就是在点 \(\mathbf{x}\)计算的偏导数。

因此,“这里的 \(\frac{\partial f}{\partial y_i}\) 已经根据链式法则的规则被视为 \(\frac{\partial f}{\partial x_i}\)” 实际上是一种符号上的简化。它意味着,因为我们最终关心的就是 \(t=0\) 的情况(也就是在 \(\mathbf{x}\) 点),所以我们可以把符号 \(\frac{\partial f}{\partial y_i}\) 视为与 \(\frac{\partial f}{\partial x_i}\) 是同一个东西,因为它都代表了函数 \(f\) 在点 \(\mathbf{x}\) 对其第 \(i\) 个自变量的偏导数。

简而言之,虽然在推导过程中我们使用了辅助变量 \(\mathbf{y}\),但由于最终的求导是在 \(\mathbf{x}\) 点进行的,所以这些偏导数本质上就是函数 \(f\) 在点 \(\mathbf{x}\) 处的偏导数。