这篇文章将介绍向量和矩阵微分相关基础,他是它将是后面学习的基础。
一、梯度
假设函数(f:R^{m imes n} mapsto R),它的函数变量为一个大小为(m imes n)的矩阵,函数值为实数,则(f(A))关于(A)的梯度是一个由偏导数组成的矩阵
[
abla_Af(A) in R^{m imes n} =
left [
egin{matrix}
frac{partial f}{partial A_{11}} & frac{partial f}{partial A_{12}} & ... &frac{partial f}{partial A_{1n}} \
frac{partial f}{partial A_{21}} & frac{partial f}{partial A_{22}} & ... & frac{partial f}{partial A_{2n}}\
vdots & vdots & vdots &vdots & \
frac{partial f}{partial A_{m1}} & frac{partial f}{partial A_{m2} } &... & frac{partial f}{partial A_{mn}}
end{matrix}
ight ]
]
请注意,$
abla_Af(A) (和)A(的大小总是一样的。特别的,当)A(是一个向量)x in R^n$时,则
[
abla_xf(x) in R^{n} =
left [
egin{matrix}
frac{partial f}{partial x_1} \
frac{partial f}{partial x_2} \
vdots \
frac{partial f}{partial x_n}
end{matrix}
ight ]
]
特别需要注意的是:只有当函数(f)是实数值时,它的梯度才会被定义,也就是说(f)必须返回一个标量值。例如我们不能求(Ax)的梯度((A)为(m imes n)矩阵,(x)为(n imes 1)向量),因为(Ax)结果是一个向量。由偏导数性质很容易得到下面事实
- (
abla_x(f(x)+g(x))=
abla_xf(x)+
abla_xg(x))
- 对任意的(t in R)有(
abla_xtf(x)=t
abla_xf(x))
原则上,梯度是向量函数偏微分的扩展,但是在现实使用中,由于符号的原因可能会变得很棘手。下面来看这样一个例子,设(f(z)=z^Tz,zin R^n),显然(
abla_zf(z)=2z),现在我们考虑下面式子
[
abla f(Ax)
]
我们该如何解释这个表达式呢?在这里至少有2中解释。
- 第一种解释。对比第一个式子(
abla_zf(z)=2z)中,我们认为上面式子是求点(Ax)处的梯度,这样结果是(
abla f(Ax)=2Ax).
- 第二种解释。我们认为上面(f(Ax)=g(x))是关于向量(x)的函数,所以是求点(x)处的梯度,(
abla f(Ax)=
abla g(x))
上面两个解释的结果完全不同。根本原因是没有明确我们到底对谁进行微分,第一种解释其实对应为
[
abla_{Ax}f(Ax)
]
第二种解释对应为
[
abla_xf(Ax)
]
所以在梯度表达中,符号一定要清楚,避免产生歧义。
二、海森(Hessian)矩阵
设函数(f:R^n mapsto R),它的函数变量是一个(n)维向量(x),则(Hessian)矩阵是(f)对(x)二阶偏导数组成的矩阵
[
abla_x^2f(A) in R^{n imes n} =
left [
egin{matrix}
frac{partial f}{partial^2 x_1} & frac{partial f}{partial x_1partial x_2} & ... &frac{partial f}{partial x_1partial x_n} \
frac{partial f}{partial x_2partial x_1} & frac{partial f}{partial^2 x_2} & ... & frac{partial f}{partial x_2partial x_n}\
vdots & vdots & vdots &vdots & \
frac{partial f}{partial x_npartial x_1} & frac{partial f}{partial x_npartial x_2} & ... &frac{partial f}{partial^2 x_n} \
end{matrix}
ight ]
]
即(
abla^2_xf(x) in R^{n imes n}),注意(Hessian)矩阵是一个对称矩阵
[
abla_x^2f(A) _{ij}=
abla_x^2f(A)_{ji}
]
和梯度一样,(Hessian)矩阵只在函数(f)函数值是实数时才被定义。梯度可以看作向量函数的一阶导数,(Hessian)矩阵看作是向量函数的二阶导数。虽然这样的直觉没有错,但是还是需要注意下面的问题。
如果(f:R mapsto R),则(f)对(x)的二阶导数可以认为是(f)对(x)一阶导数的导数。但是在向量函数中,如果(f:R^n mapsto R),则(
abla_xf(x))是一个(n)维向量,前面说过多值函数的梯度没有意义,所以说对(f)的梯度再求梯度得到(f)的Hessian矩阵是错误的。但是事实上我们可以对(
abla_xf(x)_i)求梯度,它得到的是(Hessian)矩阵的第(i)列。因此不能表示为(
abla_x
abla_xf(x)),而应该表示为
[
abla^2_xf(x)=[
abla_x(
abla_xf(x))_1,
abla_x(
abla_xf(x))_2,…,
abla_x(
abla_xf(x))_n]
]
三、线性和二次向量函数的梯度和Hessian矩阵
令线性函数(f(x)=b^Tx),其中(bin R^n)
[f(x)=b^Tx=sum_{i=1}^nb_ix_i
]
所(frac{partial f(x)}{partial x_i}=b_i),所以(
abla_x f(x)=b).现在考虑二次向量函数
[f(x)=x^TAx=sum_{i=1}^nsum_{j=1}^nA_{ij}x_ix_j
]
从而
[frac{partial}{partial x_k}f(x)=frac{partial}{partial x_k}(sum_{i=1, i
ot = k}^nA_{ik}x_ix_k+sum_{j=1, j
ot = k}^nA_{kj}x_kx_j+A_{kk}x_k^2) \
=sum_{i=1, i
ot = k}^nA_{ik}x_i+sum_{j=1, j
ot = k}^nA_{kj}x_j+2A_{kk}x_k \
= sum^{n}_{i=1}A_{ik}x_i+sum^n_{j=1}A_{kj}x_j=2sum^n_{j=1}A_{kj}x_j
]
我们假设(A)为对称矩阵,所以最后一步能化简。注意到(
abla_xf(x)_k)是(A)的第(k)行与(x)内积的两倍。因此(
abla_x x^TAx = 2Ax).
接下来再看看(f(x)=x^TAx)的(Hessian)矩阵
[
abla_x^2f(x)=frac{partial}{partial x_k partial x_l}f(x)=frac{partial}{partial x_k}[frac{partial f(x)}{partial x_l}]=frac{partial}{partial x_k}[2sum^n_{j=1}A_{lj}x_j]=2A_{kl}
]
总结一下:
- (
abla_xb^Tx=b)
- (
abla_xx^TAx=2Ax) 其中(A^T=A)
- (
abla_x^2x^TAx=2A) 其中(A^T=A)
四、最小二乘法矩阵推导
假设我们有一个矩阵(A in R^{m imes n})和一个向量(b in R^m),这种情况下我们不能找到(x in R^n)满足(Ax=b),但是我们可以找找到(x)使得(Ax)尽可能的接近(b),于是我们需要最小化
[J(x)=||Ax-b||^2
]
我们考虑求(
abla_xJ(x))然后令梯度等于0即可解出(x),这时候得到的(x)使得(J( heta))达到最小。
[
abla_xJ(x)=
abla_x(Ax-b)^T(Ax-b)quad quad quad quadquad quad quad \
=
abla_x(x^TA^TAx-2b^TAx+b^Tb) \
=2A^TAx-2A^Tb quad quad quad quad quadquad
]
令(J(x)=0)即可得最小二乘法的解为(x=(A^TA)^{-1}A^Tb).
五、行列式的梯度
这里我们来考虑行列式的梯度,回忆行列式计算方法
[|A|=sum_{i=1}^n(-1)^{i+j}A_{ij}M_{ij} quad for ; any ; j =1,2,...,n
]
其中(M_{ij})是((i,j))处的代数余子式。
[frac{partial}{partial A_{kl}}|A|=frac{partial}{partial A_{kl}}sum_{i=1}^n(-1)^{i+l}A_{il}M_{il}=(-1)^{k+l}A_{kl}M_{kl}=A^{*}_{lk}
]
其中(A^*)是(A)的伴随矩阵。从而
[
abla_A|A|=(A^*)^T=|A|(A^{-1})^T
]
以上均假设(A)是可逆矩阵。行列式的梯度等于它的伴随矩阵的转置。例如(f(A)=ln(|A|),|A|>0),求(
abla_Af(A))
[
abla_Aln(|A|)=frac{1}{|A|}frac{partial |A|}{partial A}=A^{-1}
]
上面默认(A)是对称矩阵。
六、用特征值来做最优化
考虑下面的优化问题
[max_{x in R^n}quad x^TAx quad where ;x^Tx=1
]
上式中(A)是一个对称矩阵。先将使用等式约束的目标函数写成拉格朗日形式,然后求解最优值
[L(x,lambda)=x^TAx-lambda (x^Tx-1)
]
其中(lambda)称为拉格朗日因子,设(x^*)是函数(L(x,lambda))取得最大值的点,则在(x^*)函数的梯度为0
[
abla_xL(x,lambda)=2Ax-2lambda x = 0
]
再化简可以得到等式(Ax=lambda x),而且(x)是单位向量,于是解就是(A)的特征向量。