CoderXL's Blog

Back

1. 向量 y\boldsymbol{y} 对标量 xx 求导#

y=f(x)\boldsymbol{y}=\boldsymbol{f}(x),其中 y=(y1,,ym)T\boldsymbol{y}=(y_1,\cdots, y_m)^T,那么

dydx=[dy1dxdymdx]{\mathrm{d}\boldsymbol{y}\over \mathrm{d}x} = \left[ \begin{matrix} {\mathrm{d}y_1\over \mathrm{d}x}\\ \vdots\\ {\mathrm{d}y_m\over \mathrm{d}x} \end{matrix} \right]

即,y\boldsymbol{y} 的每个分量各自对 xx 求导。

举例:

y=f(x)=[x23x]\boldsymbol{y}=\boldsymbol{f}(x) = \left[ \begin{matrix} x^2\\ 3x \end{matrix} \right]

那么

dydx=[2x3]{\mathrm{d} \boldsymbol{y}\over \mathrm{d}x} = \left[ \begin{matrix} 2x\\ 3 \end{matrix} \right]

2. 标量 yy 对向量 x\boldsymbol{x} 求导#

y=f(x)y=f(\boldsymbol{x}),其中 x=(x1,,xn)T\boldsymbol{x}=(x_1,\cdots, x_n)^T,那么

yx=fx=f=[yx1yxn]{\partial y \over \partial \boldsymbol{x}}={\partial f \over \partial \boldsymbol{x}}=\nabla f = \left[ \begin{matrix} {\partial y \over \partial x_1}\\ \vdots\\ {\partial y \over \partial x_n} \end{matrix} \right]

该向量称为梯度,其每个分量表示多元数量值函数 ff 在该方向上的变化速率,而梯度向量的方向就是 ff 数值变化最快的方向。

注意,为了保持微分的“线性近似”意义,有些地方将 yx{\partial y \over \partial \boldsymbol{x}} 定义为行向量(即上述向量的转置),以便支持 dy=yxdx\mathrm{d}y = {\partial y \over \partial \boldsymbol{x}}\mathrm{d}x 的乘法(行向量乘列向量得到一个数);但是,在机器学习中,求梯度更多是为了梯度下降,此时更适合保持梯度向量与原向量形状一致,即都定义为列向量。
两种定义只差了一个转置,其余没有区别。

梯度还可以用来求方向导数(ff 在某一个方向上的变化速率)。比如,取方向 u ( u=1 )\boldsymbol{u}~(~||\boldsymbol{u}||=1~),那么 ff 在点 x\boldsymbol{x} 附近,沿着方向 u\boldsymbol{u} 的变化速率为 Duf(x)=f(x)TuD_{\boldsymbol{u}}f(\boldsymbol{x})=\nabla f(\boldsymbol{x})^T\boldsymbol{u},这可以通过 limh0f(x+hu)f(x)h\displaystyle{\lim_{h\to 0}{f(\boldsymbol{x}+h\boldsymbol{u})-f(\boldsymbol{x})\over h}} 结合偏导的线性近似意义得到。

举例:

f(x1,x2)=x12+3x2f(x_1,x_2)=x_1^2+3x_2

那么

f=[2x13]\nabla f = \left[ \begin{matrix} 2x_1\\ 3 \end{matrix} \right]
常用公式汇总#

其中 aa 不是 x\boldsymbol{x} 的函数,0\boldsymbol{0}1\boldsymbol{1} 是向量,<u,v>\left< \boldsymbol{u} , \boldsymbol{v} \right> 表示内积。

yaausum(x)x2u+vuv<u,v>yx0Taux1T2xTux+vxuxv+vxuuTvx+vTux\begin{array}{c|c|c} y & a & au & \mathrm{sum}(\boldsymbol{x}) & ||\boldsymbol{x}||^2 & u+v & uv & \left<\boldsymbol{u}, \boldsymbol{v}\right>\\ \hline \displaystyle{\partial y \over \partial \boldsymbol{x}} & \boldsymbol{0}^T & \displaystyle{a{\partial u \over \partial \boldsymbol{x}}} & \boldsymbol{1}^T & 2\boldsymbol{x}^T & \displaystyle{{\partial u \over \partial \boldsymbol{x}}+{\partial v \over \partial \boldsymbol{x}}} & \displaystyle{{\partial u \over \partial \boldsymbol{x}}v+{\partial v \over \partial \boldsymbol{x}}u} & \displaystyle{\boldsymbol{u}^T{\partial \boldsymbol{v} \over \partial \boldsymbol{x}} + \boldsymbol{v}^T{\partial \boldsymbol{u} \over \partial \boldsymbol{x}}} & \end{array}

3. 向量 y\boldsymbol{y} 对向量 x\boldsymbol{x} 求导#

y=f(x)\boldsymbol{y}=\boldsymbol{f}(\boldsymbol{x}),其中 y=(y1,,ym)T\boldsymbol{y}=(y_1,\cdots, y_m)^Tx=(x1,,xn)T\boldsymbol{x}=(x_1,\cdots, x_n)^T
此时求导结果是一个 m×nm\times n 的矩阵,称为 JacobianJacobian 矩阵。

J=yx=[y1x1y1xnymx1ymxn]J={\partial \boldsymbol{y}\over \partial \boldsymbol{x}} = \left[ \begin{matrix} {\partial y_1 \over \partial x_1}&\cdots&{\partial y_1 \over \partial x_n }\\ \vdots&\ddots&\vdots\\ {\partial y_m \over \partial x_1}&\cdots&{\partial y_m \over \partial x_n } \end{matrix} \right]

它表示在 x\boldsymbol{x} 点附近,f\boldsymbol{f} 的线性近似:

f(x+Δx)f(x)+JΔx\boldsymbol{f}(\boldsymbol{x}+\Delta \boldsymbol{x})\approx \boldsymbol{f}(\boldsymbol{x}) + J\Delta \boldsymbol{x}

不难看出,JacobianJacobian 矩阵是对梯度的推广。其采用了梯度的行向量形式以符合乘法,只不过将标量 yy 换为了向量 y\boldsymbol{y},然后再通过 1. 的方法展开 yxi{\partial \boldsymbol{y}\over \partial x_i} 成一列即可。

常用公式汇总#

xRn\boldsymbol{x} \in \mathbb{R}^nyRm\boldsymbol{y} \in \mathbb{R}^myxRn×m\displaystyle{\partial \boldsymbol{y} \over \partial \boldsymbol{x}} \in \mathbb{R}^{n\times m}. a,a,Aa, \boldsymbol{a}, \boldsymbol{A} 都不是 x\boldsymbol{x} 的函数。

yaxAxxTAauAuu+vyxOIAATauxAuxux+vx\begin{array}{c|c|c} \boldsymbol{y} & \boldsymbol{a} & \boldsymbol{x} & \boldsymbol{A}\boldsymbol{x} & \boldsymbol{x}^T\boldsymbol{A} & a\boldsymbol{u} & \boldsymbol{A}\boldsymbol{u} & \boldsymbol{u} + \boldsymbol{v}\\ \hline \displaystyle{\partial \boldsymbol{y} \over \partial \boldsymbol{x}} & \boldsymbol{O} & \boldsymbol{I} & \boldsymbol{A} & \boldsymbol{A}^T & \displaystyle{a{\partial \boldsymbol{u} \over \partial \boldsymbol{x}}} & \displaystyle{\boldsymbol{A}{\partial \boldsymbol{u} \over \partial \boldsymbol{x}}} & \displaystyle{{\partial \boldsymbol{u} \over \partial \boldsymbol{x}} + {\partial \boldsymbol{v} \over \partial \boldsymbol{x}}} & \end{array}
向量的微分
https://blog.leosrealms.top/blog/2025-11-07-the-differential-of-vectors
Author CoderXL
Published at 2025年11月7日
Comment seems to stuck. Try to refresh?✨