CS229: 0

机器学习的多元微积分基础

数学基础

偏导和梯度

考虑f(x1,x2,...,xn):Rn→Rf(x_1,x_2,...,x_n):\mathbb{R}^n\rightarrow \mathbb{R},对某一个自变量xix_i求导,其余参数视为常数,记为

∂f(x)∂xi\frac {\partial f(x)}{\partial x_i}

而f(x)f(x)的梯度就是每一维偏导构成的向量,表示是ff在xx这一点的“导数”的方向的推广,也就是在该点附近,用线性空间中的一组基来近似,沿着梯度方向走,f(x)f(x)增长最快。几何意义,就是该点等高线的切线的方向。

如何理解这个东西呢?

在一维的时候你很难联想到导数的正负和往哪边走函数会变大这回事,如果非要这样理解,高维的时候每一维的长度又会对方向起作用,这是不能合理外推的,更迷糊了。

但是微积分的核心思想还是线性化,可以这么考虑,每一维的梯度是对函数这一维的“切片”的线性近似,梯度就是在一点将函数近似为了一个高维立方体,偏导大小指示了这一维的变换速度,就相当于把函数简化到了一个高维立方体里面考虑,就自然多了。

可以用nabla算子∇\nabla来表示梯度。

∇f(x)=[∂f(x)∂x1∂f(x)∂x2...∂f(x)∂xn]\nabla f(x)=\left[\begin{matrix} \frac {\partial f(x)}{\partial x_1} \\ \frac {\partial f(x)}{\partial x_2} \\ ... \\ \frac {\partial f(x)}{\partial x_n} \end{matrix}\right]

更广义的nabla算子定义是∇=(∂∂x1,∂∂x2,...∂∂xn)\nabla=(\frac{\partial{}}{\partial{x_1}},\frac{\partial{}}{\partial{x_2}},...\frac{\partial{}}{\partial{x_n}}),可以用来表示旋度散度。

像叉积一样,都是非常自由的记号。

散度(divergence)

表示向量场的发散强度。

divF=∇⋅F=∂Fx∂x+∂Fy∂y+∂Fz∂zdiv \mathbf F=\nabla\cdot \mathbf F=\frac{\partial{F_x}}{\partial{x}}+\frac{\partial{F_y}}{\partial{y}}+\frac{\partial{F_z}}{\partial{z}}

旋度(curl)

表示向量场对微元的旋转强度。

curlv=(∂vz∂y−∂vy∂z)i+(∂vx∂z−∂vz∂x)j+(∂vy∂x−∂vx∂y)kcurl \mathbf v=(\frac{\partial{v_z}}{\partial{y}}-\frac{\partial{v_y}}{\partial{z}})\mathbf i+(\frac{\partial{v_x}}{\partial{z}}-\frac{\partial{v_z}}{\partial{x}})\mathbf j+(\frac{\partial{v_y}}{\partial{x}}-\frac{\partial{v_x}}{\partial{y}})\mathbf k

∇×F=∣ijk∂∂x∂∂y∂∂zFxFyFz∣\nabla\times F=\left|\begin{matrix} \mathbf i & \mathbf j & \mathbf k \\ \frac{\partial{}}{\partial{x}} & \frac{\partial{}}{\partial{y}} & \frac{\partial{}}{\partial{z}} \\ F_x & F_y & F_z \end{matrix}\right|

有一个性质,梯无旋,旋无散。

二阶导与海森矩阵

而f(x)f(x)的二阶导的推广到xx是向量的情况,类似地,是一个矩阵(考虑每个维度两两求偏导),而一个事实是

∂f(x)∂xi∂xj=∂f(x)∂xj∂xi\frac {\partial f(x)}{\partial x_i \partial x_j}=\frac {\partial f(x)}{\partial x_j \partial x_i}

学了数学会知道如果二者都连续的话是成立的,机器学习里面一般不会有太特殊的函数。

所以二阶导是一个实对称的矩阵,称为海森矩阵∇2=H\nabla ^2=H

Hi,j=∂f(x)∂xi∂xjH_{i,j}=\frac {\partial f(x)}{\partial x_i \partial x_j}

如果H(x0)H(x_0)是半正定的,那么ff在x0x_0是凸的。

一些常见的梯度

∇x(xTAx)=2Ax∇x(vTx)=v∇A∣A∣=∣A∣(A−1)T\begin{aligned} &\nabla_{x} (x^TAx)=2Ax\\ &\nabla_{x} (v^Tx)=v\\ &\nabla_A|A|=|A|(A^{-1})^T \end{aligned}

AA是一堆数字到一个数字的映射。梯度就是泛函∣A∣|A|对每个变量求导的结果。

考虑现在对a11a_{11}求偏导

∂∣A∣∂ai,j=lim⁡h→0∣a1,1+ha1,2...a1,na2,1a2,2...a2,n...an,1an,2...an,n∣−∣a1,1a1,2...a1,na2,1a2,2...a2,n...an,1an,2...an,n∣h=lim⁡h→0hMh=M\begin{aligned} \frac{\partial{|A|}}{\partial{a_{i,j}}}&=\lim_{h\rightarrow 0}\frac{\left|\begin{matrix} a_{1,1}+h & a_{1,2} & ... & a_{1,n}\\ a_{2,1} & a_{2,2} & ... & a_{2,n}\\ & &... & \\ a_{n,1} & a_{n,2} & ... & a_{n,n} \end{matrix}\right|-\left|\begin{matrix} a_{1,1} & a_{1,2} & ... & a_{1,n}\\ a_{2,1} & a_{2,2} & ... & a_{2,n}\\ & &... & \\ a_{n,1} & a_{n,2} & ... & a_{n,n} \end{matrix}\right|}{h}\\ &=\lim_{h\rightarrow 0}\frac{hM}{h}\\ &=M\\ \end{aligned}

所以

∇A∣A∣=(A∗)T=∣A∣(A−1)T\nabla_A|A|=(A^{*})^T=|A|(A^{-1})^T

雅可比矩阵

考虑更广泛的函数y=f(x):Rn→Rmy=f(x):\mathbb{R}^n \rightarrow\mathbb{R}^m,则记广义的梯度为雅可比矩阵

[∂y1∂x1∂y1∂x2...∂y1∂xn∂y2∂x1∂y2∂x2...∂y2∂xn...∂ym∂x1∂ym∂x2...∂ym∂xn]m×n\left[\begin{matrix} \frac{\partial{y_1}}{\partial{x_1}} & \frac{\partial{y_1}}{\partial{x_2}} & ... & \frac{\partial{y_1}}{\partial{x_n}}\\ \frac{\partial{y_2}}{\partial{x_1}} & \frac{\partial{y_2}}{\partial{x_2}} & ... & \frac{\partial{y_2}}{\partial{x_n}}\\ ...\\ \frac{\partial{y_m}}{\partial{x_1}} & \frac{\partial{y_m}}{\partial{x_2}} & ... & \frac{\partial{y_m}}{\partial{x_n}}\\ \end{matrix}\right]_{m\times n}

注意这里yy一个梯度变成行了。

然后还要定义对矩阵求导y=f(A):Rn,n→Ry=f(A):\mathbb{R}^{n,n} \rightarrow\mathbb{R}

∇A=[∂y∂a1,1∂y∂a1,2...∂y∂a1,n∂y∂a2,1∂y∂a2,2...∂y∂a2,n...∂y∂an,1∂y∂an,2...∂y∂an,n]\nabla_{A}=\left[\begin{matrix} \frac{\partial{y}}{\partial{a_{1,1}}} & \frac{\partial{y}}{\partial{a_{1,2}}} & ... & \frac{\partial{y}}{\partial{a_{1,n}}}\\ \frac{\partial{y}}{\partial{a_{2,1}}} & \frac{\partial{y}}{\partial{a_{2,2}}} & ... & \frac{\partial{y}}{\partial{a_{2,n}}}\\ ...\\ \frac{\partial{y}}{\partial{a_{n,1}}} & \frac{\partial{y}}{\partial{a_{n,2}}} & ... & \frac{\partial{y}}{\partial{a_{n,n}}}\\ \end{matrix}\right]

拉格朗日乘子之类的东西放到后面写。


CS229: 0
http://llz3724.github.io/2025/04/21/2025-04-21-cs229_0/
作者
llz3724
发布于
2025年4月21日
许可协议