引
向量求导在当前线性系统的优化问题中经常用到,比如最小二乘:
$$\hat{\mathbf{x}{\rm LS}} = \arg\min{\mathbf{x}}{|A\mathbf{x}-\mathbf{b}|_2^2}$$
注:argmin是值取使得后式最小的参数值,与min的区别如下,
min f(x) = f_min(x)
argmin f(x) = x_min
ref:
Arg max
公式 t0=arg max g(t) 的 arg 是什么意思啊?
这是一个凸问题,极值就是最值,且极值唯一,可通过求导(梯度)直接求解极值来得到最值,于是先展开,
$$\phi = \mathbf{x}TATA\mathbf{x} - \mathbf{x}TAT\mathbf{b} - \mathbf{b}^TA\mathbf{x} + \mathbf{b}^T\mathbf{b}$$
计算梯度,并令其等于0
$$\frac{{\rm d}\phi}{{\rm d}\mathbf{x}} = 2A^TA\mathbf{x} - 2A^T\mathbf{b} = 0$$
可以得到最小二乘解,
$$\mathbf{x}_{\rm LS} = \left(ATA\right){-1}A^T\mathbf{b}$$
其实这仅仅是实值标量函数$f(\mathbf{x}),\ f:\mathbf{R}^m \rightarrow \mathbf{R}$的求导,然而矩阵微分包含更多的情况,那我们目前主要针对实值函数。
<br /><br />
实值函数
实值函数包括以下情况,
| 函数类型 | 向量变元 $\mathbf{x} \in \mathbf{R}^m$ | 矩阵变元 $X \in \mathbf{R}^{m \times n}$ |
| :--- |
|标量函数 $f \in \mathbf{R}$ | $f(\mathbf{x}),\ f:\mathbf{R}^m \rightarrow \mathbf{R}$ | $f(X),\ f:\mathbf{R}^{m \times n} \rightarrow \mathbf{R}$|
|向量函数 $\mathbf{f} \in \mathbf{R}p$|$\mathbf{f}(\mathbf{x}), \mathbf{f}:\mathbf{R}m \rightarrow \mathbf{R}^p$ | $\mathbf{f}(X),\ \mathbf{f}:\mathbf{R}^{m\times n} \rightarrow \mathbf{R}^p$|
|矩阵函数 $F \in \mathbf{R}^{p \times q}$|$F(\mathbf{x}),\ F:\mathbf{R}^m \rightarrow \mathbf{R}^{p\times q}$ | $F(X),\ F:\mathbf{R}^{m\times n} \rightarrow \mathbf{R}^{p\times q}$|
不管是上述啥类型的函数,他们的偏导总归是每一个标量因变量对应每个标量自变量的导数(偏导数),只不过排成了向量或是矩阵的形式。矩阵的那个称为Jacobian矩阵,向量的那个常常是偏导行向量。同时还存在着梯度,梯度是偏导(Jacobian矩阵/偏导行向量)的转置。微分就是函数的总变量用各个变元的变量线性表示,系数当然就是其对应的偏导数。微分和jacobian的关系并不一定是矩阵相乘的关系,详情见表3.2.3。
<br /><br />
向量变元的标量值函数的微分定义
考虑到最小二乘等问题遇到最多的还是这种函数的求导,我们着重分析这个情况。
偏导向量
对于标量值向量变元的函数,可以看成是多变量变元函数(多元函数),其求导就是每个变元的偏导,现在合成一个向量,那就是把每个变元的偏导数排成一个向量而已。
因此偏导算子有,
$${\rm D}{\mathbf{x}} = \frac{\partial}{\partial \mathbf{x}^T} = \left[\frac{\partial}{\partial x_1},\dots, \frac{\partial}{\partial x_m}\right]$$
可见向量变元的偏导是偏导向量,值得注意的是这个向量是行向量,偏导算子写成对x的转置求导,即把每个变元的偏导数排成行向量,因此标量值向量变元的函数$f(\mathbf{x})$的偏导向量为,
$${\rm D}{\mathbf{x}}f(\mathbf{x}) = \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}^T} = \left[\frac{\partial f(\mathbf{x})}{\partial x_1},\dots, \frac{\partial f(\mathbf{x})}{\partial x_m}\right]$$
其实在向量变元的标量值函数的情况下,其jacobian矩阵就是其偏导行向量,因此我们可以用jacobian矩阵指代我们的导数。
梯度向量
至于梯度向量,多元函数中梯度是偏导构成的向量,而现在偏导本身也是向量了,那我们就把梯度搞成各个变元偏导数的列向量,这样就是偏导向量的转置了,因此有梯度算子,
$$\nabla_{\mathbf{x}} = \frac{\partial}{\partial \mathbf{x}} = \left[\frac{\partial}{\partial x_1},\dots, \frac{\partial}{\partial x_m}\right]^T$$
因此标量值向量变元的函数$f(\mathbf{x})$的梯度向量为,
$$\nabla_{\mathbf{x}}f(\mathbf{x}) = \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}} = \left[\frac{\partial f(\mathbf{x})}{\partial x_1},\dots, \frac{\partial f(\mathbf{x})}{\partial x_m}\right]^T$$
微分
矩阵微分在多元函数中是各个变元增量的线性组合,在向量变元的标量函数中当然还是这个含义,只不过可以用向量乘积来表示了,
$${\rm d}f(\mathbf{x}) = \frac{\partial f(\mathbf{x})}{\partial x_1}{\rm d}x_1 + \dots + \frac{\partial f(\mathbf{x})}{\partial x_m}{\rm d}x_m = \left[\frac{\partial f(\mathbf{x})}{\partial x_1^T},\dots, \frac{\partial f(\mathbf{x})}{\partial x_m^T}\right] \begin{bmatrix} {\rm d}x_1 \ \dots \ {\rm d}x_m \end{bmatrix}$$
在最开始的例子中,我们得到三者其中任何一个就可以用来计算极值了,那么如何计算呢?
<br /><br />
向量变元的标量值函数的微分求导计算
计算偏导向量(梯度向量)的方法
- 定义法
- 利用运算法则
- 标量函数jacobian矩阵的辨识法:迹函数
用定义法计算$\mathbf{b}^TA\mathbf{x}$
x
将$\mathbf{b}TA$看成一个整体,这个整体显然是一个行向量(无论是从前面看是行向量和矩阵的乘积,还是从后面看它要与列向量相乘得到标量),记为$\mathbf{c}T$,因此这个标量函数可以写成$\mathbf{c}^T \mathbf{x} = \sum_{i}^{m} {c_ix_i}$,可见$c_i$是$x_i$的系数,也就是该变量的偏导数。$c_i = \mathbf{b}^T\mathbf{a}i $(当然你也可以继续得到$c_i = \sum{j}^{n}{b_ja_{ij}}$,不过没有必要)。此时如果是求jacobian矩阵(偏导行向量),偏导数排成行向量,即$\left[ \mathbf{b}^T\mathbf{a}_1 ,\dots, \mathbf{b}^T\mathbf{a}_n \right]$,显然写成矩阵形式就是$\mathbf{b}TA$;如果是求梯度,那就是排成列向量,自然就是其转置了$AT\mathbf{b}$。
从这里我们也可以总结到一个结论:
- $\mathbf{x}$前的东西就是jacobian矩阵,转置就是梯度矩阵
- $\mathbf{x}$前的东西就是梯度矩阵,转置就是jacobian矩阵
用定义法计算$\mathbf{x}^TA\mathbf{x}$
设$A\in \mathbf{R}^n*n$,$\mathbf{x}\in \mathbf{R}^n$(之前都是$\mathbf{x}\in \mathbf{R}^m$),则,
$$\mathbf{x}^TA\mathbf{x} = \sum_{k=1}{n}{\sum_{l=1}{n}{a_{kl} x_k x_l}}$$
其对$x_i$求导为,
$$\sum_{k=1}^{n}{a_{ki} x_k} + \sum_{l=1}^{n}{a_{il} x_l}$$
这两项实为$\mathbf{x}$与第i列和第i行乘积,立即得到行偏导向量${\rm D}f(\mathbf{x}) = \mathbf{x}^TA +\mathbf{x}TAT = \mathbf{x}T(A+AT)$
用标量函数$f(\mathbf{x})$的Jacobian矩阵辨识方法计算$\mathbf{x}^TA\mathbf{x}$
对标量函数$f(\mathbf{x})$用迹来辨识Jacobian矩阵(偏导向量),其关键式子:
$${\rm d}f(\mathbf{x}) = {\rm tr}(A{\rm d}\mathbf{x}) \Longleftrightarrow {\rm D}_{\mathbf{x}} f(\mathbf{x})= A$$
对其使用该方法有,
$${\rm d}f(\mathbf{x}) = {\rm d}({\rm tr} (\mathbf{x}^TA\mathbf{x})) = {\rm tr}[({\rm d}\mathbf{x})^TA\mathbf{x} + \mathbf{x}^TA{\rm d}\mathbf{x} ]
\
= {\rm tr}[({\rm d}\mathbf{x}TA\mathbf{x})T + \mathbf{x}^TA{\rm d}\mathbf{x} ]
\
= {\rm tr}[\mathbf{x}TA\mathbf{x}T{\rm d}\mathbf{x} + \mathbf{x}^TA{\rm d}\mathbf{x} ]
\
= {\rm tr}(\mathbf{x}T(A+AT){\rm d}\mathbf{x})
$$