二次型函数求导结果的正确性验证及简化推导方法咨询
请问函数 $f: \mathbb R^n \to \mathbb R, f(x) = x^\top A x$(其中$A$是$n \times n$实矩阵)的导数是什么?
我的推导如下,是否正确?有没有不需要用下标求和的更简单推导方法?
符号说明:$\sum_i$ 表示 $\sum_{1 \leq i \leq n}$
$$\begin{align*}f(x) &= x^\top A x \
&= \sum_i x_i [Ax]i \
&= \sum_i x_i [\sum_j A{ij} x_j] \
&= \sum_{i,j} A_{ij} x_i x_j. \ \end{align*}$$因此 $$[Df(x)]k = \sum{i,j}A_{ij}d_{ij}(x_i, x_j)$$ 其中 $$d_{ij}(u,v) = \begin{cases}
0 & \text{if } i \neq k, j \neq k \
v & \text{if } i = k, j \neq k \
u & \text{if } i \neq k, j = k \
u + v & \text{if } i = k, j = k. \
\end{cases}$$ 化简后得到 $$\begin{align*}[Df(x)]k &= \sum_i[A{ik} + A_{ki}]x_i\
Df(x) &= (A + A^\top)x.\end{align*}$$
回答
你的推导是完全正确的!最终得到的$Df(x)=(A+A^\top)x$是二次型函数求导的标准结论,完全没问题。
至于不用下标求和的简化推导方法,这里给你两种常用的简洁思路:
方法一:利用函数一阶近似(微分法)
通过展开$f(x+h)$提取一阶线性项,这是求导的核心逻辑:
- 先展开$f(x+h)$:
$$f(x+h)=(x+h)^\top A(x+h)=x^\top Ax + x^\top Ah + h^\top Ax + h^\top Ah$$ - 其中$h^\top Ah$是关于$h$的二阶小量(当$|h|$趋近于0时可忽略),因此$f(x+h)$的一阶近似为:
$$f(x+h)\approx f(x) + x^\top Ah + h^\top Ax$$ - 由于标量的转置等于自身,$x^\top Ah=(x^\top Ah)\top=h\top A^\top x$,代入后可得:
$$f(x+h)\approx f(x) + h\top(A\top x + Ax)$$ - 根据导数定义,$Df(x)$满足$f(x+h)=f(x)+Df(x)h + o(|h|)$,对比后直接得出$Df(x)=(A+A^\top)x$。
方法二:利用向量求导乘积法则
如果熟悉标量对向量求导的基本规则,能更快速推导:
- 把$x^\top A x$看作两个向量的内积:$(x^\top) \cdot (Ax)$
- 根据乘积法则,标量对向量$x$求导时,等于第一项对$x$求导乘第二项,加上第一项乘第二项对$x$求导
- 这里$x\top$对$x$求导对应$A\top$,$Ax$对$x$求导对应$A$,两者相加后作用在$x$上,直接得到$(A+A^\top)x$
这个思路无需展开下标求和,只要记住向量求导的基本规则就能快速得到结果。
备注:内容来源于stack exchange,提问作者SRobertJames




