【矩阵微分】在不涉及张量的前提下计算矩阵对向量的导数并写出二阶泰勒展开

本篇内容摘自CMU 16-745最优控制的第10讲 “Nonlinear Trajectory Optimization”。

如何在不涉及张量运算的前提下,计算矩阵对向量的导数并写出二阶泰勒展开

在多维微积分中,计算矩阵对向量的导数和二阶泰勒展开是一项重要的任务。本文将介绍如何在不涉及张量运算的前提下,完成该导数计算。

1. 导数计算的背景和动机

在许多工程问题中,我们需要计算一个矩阵函数对一个向量变量的导数,这些导数在求解优化问题过程中非常重要。但是矩阵对向量的求导结果,是一个三维张量。这导致在不具有张量运算知识的情况下很难进行数学推导和代码编写。

为了避免复杂的张量运算,我们可以利用矩阵的向量化和克罗内克积等技巧,简化计算过程。主要思想是将矩阵对向量的导数(这是一个张量)转换为向量对向量的导数(这是一个矩阵)。然后通过“Vec技巧”,使得求得的矩阵可以用于泰勒展开式或其他数学推导中,作为张量的代替。

1.1. 克罗内克积(Kronecker Product)

克罗内克积是一种用于计算多维数组(如矩阵)的运算。假设 A ∈ R l × m \mathbf{A} \in \mathbb{R}^{l \times m} ARl×m B ∈ R n × p \mathbf{B} \in \mathbb{R}^{n \times p} BRn×p,则它们的克罗内克积定义为:

A ⊗ B = [ a 11 B ⋯ a 1 m B ⋮ ⋱ ⋮ a l 1 B ⋯ a l m B ] ∈ R l n × m p . \mathbf{A} \otimes \mathbf{B} = \begin{bmatrix} a_{11} \mathbf{B} & \cdots & a_{1m} \mathbf{B} \\ \vdots & \ddots & \vdots \\ a_{l1} \mathbf{B} & \cdots & a_{lm} \mathbf{B} \end{bmatrix} \in \mathbb{R}^{ln \times mp}. AB= a11Bal1Ba1mBalmB Rln×mp.

1.2. 向量化操作符(Vectorization Operator)

向量化操作符用于将矩阵转换为向量。假设:

A = [ a 1 a 2 ⋯ a m ] ∈ R l × m . \mathbf{A} = \begin{bmatrix} \mathbf{a}_1 & \mathbf{a}_2 & \cdots & \mathbf{a}_m \end{bmatrix} \in \mathbb{R}^{l \times m}. A=[a1a2am]Rl×m.

向量化操作符定义为:

vec ( A ) = [ a 1 a 2 ⋮ a m ] ∈ R l m × 1 . \text{vec}(\mathbf{A}) = \begin{bmatrix} \mathbf{a}_1 \\ \mathbf{a}_2 \\ \vdots \\ \mathbf{a}_m \end{bmatrix} \in \mathbb{R}^{lm \times 1}. vec(A)= a1a2am Rlm×1.

2. Vec技巧

Vec技巧是利用向量化和克罗内克积简化矩阵导数计算的一个方法。具体公式如下:
vec ( A B C ) = ( C ⊤ ⊗ A ) vec ( B ) . \text{vec}(\mathbf{A}\mathbf{B}\mathbf{C}) = (\mathbf{C}^{\top} \otimes \mathbf{A}) \text{vec}(\mathbf{B}). vec(ABC)=(CA)vec(B).

对于两个矩阵 A \mathbf{A} A B \mathbf{B} B,可以进一步简化为:
vec ( A B ) = ( B ⊤ ⊗ I ) vec ( A ) = ( I ⊗ A ) vec ( B ) . \text{vec}(\mathbf{A}\mathbf{B}) = (\mathbf{B}^{\top} \otimes \mathbf{I}) \text{vec}(\mathbf{A}) = (\mathbf{I} \otimes \mathbf{A}) \text{vec}(\mathbf{B}). vec(AB)=(BI)vec(A)=(IA)vec(B).

引入该技巧后,这使得我们可以通过向量化操作计算矩阵对向量的导数。考虑到记号简明性,在未加说明的情况下,我们将“向量化后的矩阵对向量的导数”来指代“矩阵对向量的导数”:
∂ A ( x ) ∂ x = ∂ vec ( A ( x ) ) ∂ x ∈ R l m × n . \frac{\partial \mathbf{A}(\mathbf{x})}{\partial \mathbf{x}} = \frac{\partial \text{vec}(\mathbf{A}(\mathbf{x}))}{\partial \mathbf{x}} \in \mathbb{R}^{lm \times n}. xA(x)=xvec(A(x))Rlm×n.

3. 应用于二阶泰勒展开

通过上述技巧,我们可以计算出二阶泰勒展开的结果。设 A = ∂ f ∂ x \mathbf{A} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}} A=xf,则二阶导数为:
∂ ∂ x ( vec ( I A Δ x ) ) = ( Δ x ⊤ ⊗ I ) ∂ vec ( A ) ∂ x . \frac{\partial}{\partial\mathbf{x}}\left(\text{vec}\left(\mathbf{I}\mathbf{A}\Delta \mathbf{x}\right)\right) = \left(\Delta \mathbf{x}^{\top} \otimes \mathbf{I}\right) \frac{\partial \text{vec}(\mathbf{A})}{\partial \mathbf{x}}. x(vec(IAΔx))=(ΔxI)xvec(A).

最终,我们得到二阶泰勒展开式:
f ( x + Δ x ) = f ( x ) + A Δ x + 1 2 ( Δ x ⊤ ⊗ I ) ∂ vec ( A ) ∂ x Δ x . \mathbf{f}(\mathbf{x}+\Delta \mathbf{x}) = \mathbf{f}(\mathbf{x}) + \mathbf{A} \Delta \mathbf{x} + \frac{1}{2} \left(\Delta \mathbf{x}^{\top} \otimes \mathbf{I}\right) \frac{\partial \text{vec}(\mathbf{A})}{\partial \mathbf{x}} \Delta \mathbf{x}. f(x+Δx)=f(x)+AΔx+21(ΔxI)xvec(A)Δx.

这样对于接下来的数学推导或者代码编写都带来了便利。

在某些情况下,我们需要对转置矩阵求导,此时可以使用换位矩阵(commutator matrix) T \mathbf{T} T,满足 T vec ( A ) = vec ( A ⊤ ) \mathbf{T}\text{vec}(\mathbf{A}) = \text{vec}(\mathbf{A}^{\top}) Tvec(A)=vec(A)。公式如下:
∂ ∂ x ( A ⊤ ( x ) B ) = ( B ⊤ ⊗ I ) T ∂ A ∂ x . \frac{\partial }{\partial \mathbf{x}}(\mathbf{A}^{\top}(\mathbf{x}) \mathbf{B}) = (\mathbf{B}^{\top} \otimes \mathbf{I}) \mathbf{T}\frac{\partial \mathbf{A}}{\partial \mathbf{x}}. x(A(x)B)=(BI)TxA.

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值