线性代数 · 矩阵求导 | 实用学习资料

注:本文为 “矩阵求导学习资料” 相关合辑。
图片清晰度受引文原图所限。
略作重排,如有内容异常,请看原文。


闲话矩阵求导

本文 重排自 github kylinxue - matrix_problem - 闲话矩阵求导.md

矩阵求导在统计学、经济学、优化理论、机器学习等多个领域均有广泛应用。在对目标问题建立数学模型后,问题常被抽象为矩阵优化问题,因此矩阵求导是相关领域的重要操作之一。

简单的向量与矩阵求导,多数熟悉相关计算的研究者可直接推导得出,但复杂矩阵函数的求导则难度较高。《Matrix Cookbook》为研究者提供了各类向量与矩阵的求导法则参考,但对于希望深入理解推导逻辑的使用者而言,依赖手册会中断推导连贯性。

事实上,所有矩阵求导法则均可由基本求导规则推导得出。需要注意的是,不同文献中同一表达式的求导结果可能相差一个转置,这源于矩阵求导的两种不同布局,下文将首先对此进行说明。

1 布局(Layout)

矩阵求导存在两种布局形式,分别为分子布局(numerator layout)和分母布局(denominator layout)。为明确二者差异,以下结合简单求导规则展开说明。

本文假定所有向量均为列向量,设列向量 y \mathbf{y} y 形式如下:
y = [ y 1 y 2 ⋮ y m ] \mathbf{y} = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{bmatrix} y= y1y2ym

2 基本求导规则(定义)

以下所述基本求导规则本质为矩阵求导的定义,是后续复杂推导的基础,需重点理解与掌握。

五大求导类别具体为:

  1. 向量对标量求导
  2. 标量对向量求导
  3. 向量对向量求导
  4. 矩阵对标量求导
  5. 标量对矩阵求导

2.1 向量对标量求导

  • 分子布局下,向量 y \mathbf{y} y 对标量 x x x 的导数形式为:
    ∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y m ∂ x ] \frac{\partial \mathbf{y}}{\partial x} = \begin{bmatrix} \frac{\partial y_1}{\partial x} \\ \frac{\partial y_2}{\partial x} \\ \vdots \\ \frac{\partial y_m}{\partial x} \end{bmatrix} xy= xy1xy2xym

  • 分母布局下,向量 y \mathbf{y} y 对标量 x x x 的导数形式为:
    ∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋯ ∂ y m ∂ x ] \frac{\partial \mathbf{y}}{\partial x} = \begin{bmatrix} \frac{\partial y_1}{\partial x} & \frac{\partial y_2}{\partial x} & \cdots & \frac{\partial y_m}{\partial x} \end{bmatrix} xy=[xy1xy2xym]

2.2 标量对向量求导

标量 y y y 对列向量 x \mathbf{x} x 的导数形式为:
∂ y ∂ x = [ ∂ y ∂ x 1 ∂ y ∂ x 2 ⋮ ∂ y ∂ x m ] \frac{\partial y}{\partial \mathbf{x}} = \begin{bmatrix} \frac{\partial y}{\partial x_1} \\ \frac{\partial y}{\partial x_2} \\ \vdots \\ \frac{\partial y}{\partial x_m} \end{bmatrix} xy= x1yx2yxmy
该形式与向量对标量的导数形式恰好相反。

2.3 向量对向量求导

设列向量 x \mathbf{x} x y \mathbf{y} y 分别为:
x = [ x 1 x 2 ⋮ x n ] , y = [ y 1 y 2 ⋮ y m ] \mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix}, \quad \mathbf{y} = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{bmatrix} x= x1x2xn ,y= y1y2ym
则向量 y \mathbf{y} y 对向量 x \mathbf{x} x 的导数为 n × m n \times m n×m 矩阵:
∂ y ∂ x = [ ∂ y 1 ∂ x 1 ∂ y 2 ∂ x 1 ⋯ ∂ y m ∂ x 1 ∂ y 1 ∂ x 2 ∂ y 2 ∂ x 2 ⋯ ∂ y m ∂ x 2 ⋮ ⋮ ⋱ ⋮ ∂ y 1 ∂ x n ∂ y 2 ∂ x n ⋯ ∂ y m ∂ x n ] \frac{\partial \mathbf{y}}{\partial \mathbf{x}} = \begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \frac{\partial y_2}{\partial x_1} & \cdots & \frac{\partial y_m}{\partial x_1} \\ \frac{\partial y_1}{\partial x_2} & \frac{\partial y_2}{\partial x_2} & \cdots & \frac{\partial y_m}{\partial x_2} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial y_1}{\partial x_n} & \frac{\partial y_2}{\partial x_n} & \cdots & \frac{\partial y_m}{\partial x_n} \end{bmatrix} xy= x1y1x2y1xny1x1y2x2y2xny2x1ymx2ymxnym

2.4 标量对矩阵求导

标量 y y y p × q p \times q p×q 矩阵 X \mathbf{X} X 的导数为同维度矩阵:
∂ y ∂ X = [ ∂ y ∂ x 11 ∂ y ∂ x 12 ⋯ ∂ y ∂ x 1 q ∂ y ∂ x 21 ∂ y ∂ x 22 ⋯ ∂ y ∂ x 2 q ⋮ ⋮ ⋱ ⋮ ∂ y ∂ x p 1 ∂ y ∂ x p 2 ⋯ ∂ y ∂ x p q ] \frac{\partial y}{\partial \mathbf{X}} = \begin{bmatrix} \frac{\partial y}{\partial x_{11}} & \frac{\partial y}{\partial x_{12}} & \cdots & \frac{\partial y}{\partial x_{1q}} \\ \frac{\partial y}{\partial x_{21}} & \frac{\partial y}{\partial x_{22}} & \cdots & \frac{\partial y}{\partial x_{2q}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial y}{\partial x_{p1}} & \frac{\partial y}{\partial x_{p2}} & \cdots & \frac{\partial y}{\partial x_{pq}} \end{bmatrix} Xy= x11yx21yxp1yx12yx22yxp2yx1qyx2qyxpqy

2.5 矩阵对标量求导

m × n m \times n m×n 矩阵 Y \mathbf{Y} Y 对标量 x x x 的导数为同维度矩阵:
∂ Y ∂ x = [ ∂ y 11 ∂ x ∂ y 21 ∂ x ⋯ ∂ y m 1 ∂ x ∂ y 12 ∂ x ∂ y 22 ∂ x ⋯ ∂ y m 2 ∂ x ⋮ ⋮ ⋱ ⋮ ∂ y 1 n ∂ x ∂ y 2 n ∂ x ⋯ ∂ y m n ∂ x ] \frac{\partial \mathbf{Y}}{\partial x} = \begin{bmatrix} \frac{\partial y_{11}}{\partial x} & \frac{\partial y_{21}}{\partial x} & \cdots & \frac{\partial y_{m1}}{\partial x} \\ \frac{\partial y_{12}}{\partial x} & \frac{\partial y_{22}}{\partial x} & \cdots & \frac{\partial y_{m2}}{\partial x} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial y_{1n}}{\partial x} & \frac{\partial y_{2n}}{\partial x} & \cdots & \frac{\partial y_{mn}}{\partial x} \end{bmatrix} xY= xy11xy12xy1nxy21xy22xy2nxym1xym2xymn

2.6 关键总结

矩阵求导可归纳为五大类别,其形式规律如下:

  • 向量对标量、矩阵对标量求导时,结果形式需转置;
  • 标量对向量、标量对矩阵求导时,结果形式与原变量保持一致。

3 维度分析

对于简单表达式,可通过定义直接推导导数,但复杂表达式逐项展开推导效率较低。以下通过维度分析方法,结合非精确乘积法则,快速推导常见复杂表达式的导数。

3.1 示例1: ∂ A x ∂ x \frac{\partial \mathbf{A}\mathbf{x}}{\partial \mathbf{x}} xAx

A \mathbf{A} A 为与 x \mathbf{x} x 无关的矩阵, ( A x ) i = a i 1 x 1 + a i 2 x 2 + ⋯ + a i n x n \mathbf{(A}\mathbf{x})_i = a_{i1}x_1 + a_{i2}x_2 + \cdots + a_{in}x_n (Ax)i=ai1x1+ai2x2++ainxn。根据向量对向量求导法则,直接展开可得:
∂ A x ∂ x = [ a 11 a 21 ⋯ a m 1 a 12 a 22 ⋯ a m 2 ⋮ ⋮ ⋱ ⋮ a 1 n a 2 n ⋯ a m n ] = A T \frac{\partial \mathbf{A}\mathbf{x}}{\partial \mathbf{x}} = \begin{bmatrix} a_{11} & a_{21} & \cdots & a_{m1} \\ a_{12} & a_{22} & \cdots & a_{m2} \\ \vdots & \vdots & \ddots & \vdots \\ a_{1n} & a_{2n} & \cdots & a_{mn} \end{bmatrix} = \mathbf{A}^{\mathrm{T}} xAx= a11a12a1na21a22a2nam1am2amn =AT

3.2 示例2: ∂ A u ∂ x \frac{\partial \mathbf{A}\mathbf{u}}{\partial \mathbf{x}} xAu

A ∈ R m × n \mathbf{A} \in \mathbb{R}^{m \times n} ARm×n u ∈ R n × 1 \mathbf{u} \in \mathbb{R}^{n \times 1} uRn×1 x ∈ R p × 1 \mathbf{x} \in \mathbb{R}^{p \times 1} xRp×1,且 A \mathbf{A} A x \mathbf{x} x 无关。

  • 导数结果需与 ∂ u ∂ x ∈ R p × n \frac{\partial \mathbf{u}}{\partial \mathbf{x}} \in \mathbb{R}^{p \times n} xuRp×n 相关;
  • 结合维度兼容性, A \mathbf{A} A 需转置后与 ∂ u ∂ x \frac{\partial \mathbf{u}}{\partial \mathbf{x}} xu 右乘,最终得:
    ∂ A u ∂ x = ∂ u ∂ x A T \frac{\partial \mathbf{A}\mathbf{u}}{\partial \mathbf{x}} = \frac{\partial \mathbf{u}}{\partial \mathbf{x}} \mathbf{A}^{\mathrm{T}} xAu=xuAT

3.3 示例3: ∂ a u ∂ x \frac{\partial a\mathbf{u}}{\partial \mathbf{x}} xau

a a a 为与 x \mathbf{x} x 相关的标量, u ∈ R m × 1 \mathbf{u} \in \mathbb{R}^{m \times 1} uRm×1 x ∈ R n × 1 \mathbf{x} \in \mathbb{R}^{n \times 1} xRn×1

  • 由非精确乘积法则,结果含两项: a ∂ u ∂ x a\frac{\partial \mathbf{u}}{\partial \mathbf{x}} axu ∂ a ∂ x \frac{\partial a}{\partial \mathbf{x}} xa u \mathbf{u} u 的乘积;
  • 结合维度分析( ∂ a ∂ x ∈ R n × 1 \frac{\partial a}{\partial \mathbf{x}} \in \mathbb{R}^{n \times 1} xaRn×1),第二项需为 ∂ a ∂ x u T \frac{\partial a}{\partial \mathbf{x}} \mathbf{u}^{\mathrm{T}} xauT,最终得:
    ∂ a u ∂ x = a ∂ u ∂ x + ∂ a ∂ x u T \frac{\partial a\mathbf{u}}{\partial \mathbf{x}} = a\frac{\partial \mathbf{u}}{\partial \mathbf{x}} + \frac{\partial a}{\partial \mathbf{x}} \mathbf{u}^{\mathrm{T}} xau=axu+xauT

3.4 示例4: ∂ x T A x ∂ x \frac{\partial \mathbf{x}^{\mathrm{T}}\mathbf{A}\mathbf{x}}{\partial \mathbf{x}} xxTAx

A \mathbf{A} A x \mathbf{x} x 无关,先考虑更一般形式 ∂ x T A y ∂ x \frac{\partial \mathbf{x}^{\mathrm{T}}\mathbf{A}\mathbf{y}}{\partial \mathbf{x}} xxTAy x ∈ R m × 1 \mathbf{x} \in \mathbb{R}^{m \times 1} xRm×1 y ∈ R n × 1 \mathbf{y} \in \mathbb{R}^{n \times 1} yRn×1)。

  • 由非精确乘积法则,拆分后含 ∂ y ∂ x ∈ R m × n \frac{\partial \mathbf{y}}{\partial \mathbf{x}} \in \mathbb{R}^{m \times n} xyRm×n ∂ x T A ∂ x = A ∈ R m × n \frac{\partial \mathbf{x}^{\mathrm{T}}\mathbf{A}}{\partial \mathbf{x}} = \mathbf{A} \in \mathbb{R}^{m \times n} xxTA=ARm×n 两项;
  • 结合维度兼容性,推导得 ∂ x T A y ∂ x = ∂ y ∂ x A T x + A y \frac{\partial \mathbf{x}^{\mathrm{T}}\mathbf{A}\mathbf{y}}{\partial \mathbf{x}} = \frac{\partial \mathbf{y}}{\partial \mathbf{x}} \mathbf{A}^{\mathrm{T}}\mathbf{x} + \mathbf{A}\mathbf{y} xxTAy=xyATx+Ay
  • y = x \mathbf{y} = \mathbf{x} y=x,最终得:
    ∂ x T A x ∂ x = ( A T + A ) x \frac{\partial \mathbf{x}^{\mathrm{T}}\mathbf{A}\mathbf{x}}{\partial \mathbf{x}} = (\mathbf{A}^{\mathrm{T}} + \mathbf{A})\mathbf{x} xxTAx=(AT+A)x

3.5 示例5: ∂ a T x x T b ∂ x \frac{\partial \mathbf{a}^{\mathrm{T}}\mathbf{x}\mathbf{x}^{\mathrm{T}}\mathbf{b}}{\partial \mathbf{x}} xaTxxTb

a , b , x ∈ R m × 1 \mathbf{a}, \mathbf{b}, \mathbf{x} \in \mathbb{R}^{m \times 1} a,b,xRm×1,将表达式拆分为乘积形式:
∂ a T x x T b ∂ x = ∂ ( a T x ) ( x T b ) ∂ x \frac{\partial \mathbf{a}^{\mathrm{T}}\mathbf{x}\mathbf{x}^{\mathrm{T}}\mathbf{b}}{\partial \mathbf{x}} = \frac{\partial (\mathbf{a}^{\mathrm{T}}\mathbf{x})(\mathbf{x}^{\mathrm{T}}\mathbf{b})}{\partial \mathbf{x}} xaTxxTb=x(aTx)(xTb)

  • 已知 ∂ ( a T x ) ∂ x = a \frac{\partial (\mathbf{a}^{\mathrm{T}}\mathbf{x})}{\partial \mathbf{x}} = \mathbf{a} x(aTx)=a ∂ ( x T b ) ∂ x = b \frac{\partial (\mathbf{x}^{\mathrm{T}}\mathbf{b})}{\partial \mathbf{x}} = \mathbf{b} x(xTb)=b,且 x T b ∈ R \mathbf{x}^{\mathrm{T}}\mathbf{b} \in \mathbb{R} xTbR
  • 结合乘积法则与维度兼容性,最终得:
    ∂ a T x x T b ∂ x = a x T b + b a T x = ( a b T + b a T ) x \frac{\partial \mathbf{a}^{\mathrm{T}}\mathbf{x}\mathbf{x}^{\mathrm{T}}\mathbf{b}}{\partial \mathbf{x}} = \mathbf{a}\mathbf{x}^{\mathrm{T}}\mathbf{b} + \mathbf{b}\mathbf{a}^{\mathrm{T}}\mathbf{x} = (\mathbf{a}\mathbf{b}^{\mathrm{T}} + \mathbf{b}\mathbf{a}^{\mathrm{T}})\mathbf{x} xaTxxTb=axTb+baTx=(abT+baT)x

4 标量对矩阵求导(微分形式)

标量对矩阵的求导中,矩阵的迹对矩阵的求导是实际应用的主要场景。矩阵求导中无精确乘积法则,但迹的微分形式满足两项关键性质:

  1. 乘积法则精确成立;
  2. 迹与微分可交换运算。

需注意,微分形式仅在分子布局下有意义(分母布局无对应的微分定义)。

4.1 关键等价关系

定义如下等价关系(便于记忆,统一规避布局混淆):
d Y = t r ( A d X )    ⟺    ∂ Y ∂ X = A T \mathrm{d}Y = \mathrm{tr}(\mathbf{A}\mathrm{d}\mathbf{X}) \iff \frac{\partial Y}{\partial \mathbf{X}} = \mathbf{A}^{\mathrm{T}} dY=tr(AdX)XY=AT
其中 Y Y Y 为标量, X \mathbf{X} X 为矩阵, A \mathbf{A} A 为与 X \mathbf{X} X 相关的矩阵。

4.2 迹的关键性质

推导前需回顾迹的两项关键性质:

  1. 转置性质: t r ( M ) = t r ( M T ) \mathrm{tr}(\mathbf{M}) = \mathrm{tr}(\mathbf{M}^{\mathrm{T}}) tr(M)=tr(MT)
  2. 循环排列性质: t r ( M N ) = t r ( N M ) \mathrm{tr}(\mathbf{MN}) = \mathrm{tr}(\mathbf{NM}) tr(MN)=tr(NM)(可推广至多个矩阵乘积)。

4.3 示例: ∂ t r ( X T A X ) ∂ X \frac{\partial \mathrm{tr}(\mathbf{X}^{\mathrm{T}}\mathbf{A}\mathbf{X})}{\partial \mathbf{X}} Xtr(XTAX)

通过微分形式推导如下:
d t r ( X T A X ) = t r ( d ( X T A X ) ) = t r ( X T A d X + d ( X T ) A X ) = t r ( X T A d X ) + t r ( d ( X T ) A X ) = t r ( X T A d X ) + t r ( X T A T d X ) ( 利用转置与循环排列性质 ) = t r ( ( X T A + X T A T ) d X ) \begin{aligned} \mathrm{d}\mathrm{tr}(\mathbf{X}^{\mathrm{T}}\mathbf{A}\mathbf{X}) &= \mathrm{tr}(\mathrm{d}(\mathbf{X}^{\mathrm{T}}\mathbf{A}\mathbf{X})) \\ &= \mathrm{tr}(\mathbf{X}^{\mathrm{T}}\mathbf{A}\mathrm{d}\mathbf{X} + \mathrm{d}(\mathbf{X}^{\mathrm{T}})\mathbf{A}\mathbf{X}) \\ &= \mathrm{tr}(\mathbf{X}^{\mathrm{T}}\mathbf{A}\mathrm{d}\mathbf{X}) + \mathrm{tr}(\mathrm{d}(\mathbf{X}^{\mathrm{T}})\mathbf{A}\mathbf{X}) \\ &= \mathrm{tr}(\mathbf{X}^{\mathrm{T}}\mathbf{A}\mathrm{d}\mathbf{X}) + \mathrm{tr}(\mathbf{X}^{\mathrm{T}}\mathbf{A}^{\mathrm{T}}\mathrm{d}\mathbf{X}) \quad (\text{利用转置与循环排列性质}) \\ &= \mathrm{tr}((\mathbf{X}^{\mathrm{T}}\mathbf{A} + \mathbf{X}^{\mathrm{T}}\mathbf{A}^{\mathrm{T}})\mathrm{d}\mathbf{X}) \end{aligned} dtr(XTAX)=tr(d(XTAX))=tr(XTAdX+d(XT)AX)=tr(XTAdX)+tr(d(XT)AX)=tr(XTAdX)+tr(XTATdX)(利用转置与循环排列性质)=tr((XTA+XTAT)dX)
结合关键等价关系,最终得:
∂ t r ( X T A X ) ∂ X = ( X T A + X T A T ) T = ( A + A T ) X \frac{\partial \mathrm{tr}(\mathbf{X}^{\mathrm{T}}\mathbf{A}\mathbf{X})}{\partial \mathbf{X}} = (\mathbf{X}^{\mathrm{T}}\mathbf{A} + \mathbf{X}^{\mathrm{T}}\mathbf{A}^{\mathrm{T}})^{\mathrm{T}} = (\mathbf{A} + \mathbf{A}^{\mathrm{T}})\mathbf{X} Xtr(XTAX)=(XTA+XTAT)T=(A+AT)X

本文为矩阵求导的简明介绍,主要目标是帮助使用者掌握快速推导方法,减少对参考手册的依赖。若需进一步深化学习,可继续探索更复杂的矩阵函数求导场景。Have fun with math!


深入理解矩阵求导:三份实用学习资料

温铁军 原创于 2025-08-15 16:44:52 发布

简介:矩阵求导是 IT 领域,尤其是机器学习和深度学习中的关键技能。本文介绍的三份资料——《矩阵求导 CS5240》《The Matrix Cookbook》和《闲话矩阵求导》——涵盖了从基础到高级应用的矩阵求导知识体系。《矩阵求导 CS5240》系统阐述矩阵求导的原理与应用,是理解矩阵在微积分中应用的重要文献;《The Matrix Cookbook》作为实用参考手册,收录了矩阵运算与求导的各类规则和技巧,为解决复杂数学问题提供有力支持;《闲话矩阵求导》以直观易懂的方式解析矩阵求导的相关概念与实际应用,特别适用于初学者入门。掌握矩阵求导方法可有效支撑最优化问题的求解,例如机器学习模型的训练过程。这三份资料对提升数据分析、人工智能等领域的专业能力具有重要价值。

1. 矩阵求导的重要性

在处理多维数据与复杂系统时,矩阵求导已成为不可或缺的数学工具。当深入学习机器学习、信号处理、控制系统及经济学等领域的高级主题时,矩阵求导不仅能使问题表述更为简洁,还在算法推导与理论分析中发挥关键作用。

1.1 理解矩阵求导的必要性

对于 IT 行业及相关领域的专业人员而言,理解矩阵求导是从事数据分析、模型构建与算法优化等工作的必备基础。矩阵求导涉及的方法与技巧广泛应用于梯度下降、最小二乘法等优化算法,而这些算法是机器学习与深度学习领域的重要支撑技术。

1.2 矩阵求导的应用领域

矩阵求导在多个学科与工程领域中具有重要应用:

  • 机器学习:构建神经网络时,损失函数的梯度需通过对参数矩阵的求导运算获得;
  • 优化问题:动态系统控制、资源分配等领域的优化问题,通常需要求解复杂的梯度表达式;
  • 信号处理:图像与音频处理中,矩阵求导是设计滤波器与信号增强算法的关键步骤。

掌握矩阵求导方法,不仅能帮助研究者更深入地理解各领域数学模型的本质,还能高效地开展相关算法的开发与优化工作。因此,无论在理论研究还是实际应用中,矩阵求导都是值得深入学习与掌握的重要技能。后续章节将逐一探讨矩阵求导的原理、应用及相关资源,逐步揭示矩阵求导的数学本质。

2. 矩阵求导_CS5240:矩阵微积分原理与应用

矩阵求导在数学领域具有重要地位,同时在计算机科学、工程学等交叉学科中也有着广泛应用。通过深入学习矩阵求导的原理与应用,能够更高效地解决各类优化问题与机器学习模型训练任务。

2.1 矩阵微积分的基本原理

2.1.1 矩阵微积分的定义和性质

矩阵微积分是微积分学的一个分支,专注于研究矩阵值函数及其导数的数学理论。与传统标量微积分相比,矩阵微积分的定义与性质需结合矩阵运算规则,包括矩阵的求导与积分运算。矩阵微积分的关键性质之一是链式法则,该法则允许对复合函数进行求导运算,在处理复杂机器学习模型的梯度计算时具有重要意义。

2.1.2 矩阵微积分的基本运算

矩阵微积分的基本运算包括求导与积分。对于矩阵函数 f ( X ) f(\mathbf{X}) f(X) 关于矩阵 X \mathbf{X} X 的导数,通常采用雅可比矩阵(Jacobian Matrix)或梯度(Gradient)表示。其中,雅可比矩阵用于描述向量值函数对向量变量的导数,梯度则对应标量函数对向量或矩阵变量的导数。这些运算的基本规则与标量微积分具有一致性,但需额外考虑维度匹配与矩阵运算的特殊性质。

2.2 矩阵微积分在优化问题中的应用

2.2.1 优化问题的基本概念

优化问题是研究在给定约束条件下寻找目标函数极值的数学问题,广泛存在于工程设计、经济学分析、机器学习等领域。矩阵微积分在优化问题中的应用核心,是通过构建目标函数与约束条件的矩阵形式,利用矩阵求导运算求解最优解。优化问题可分为无约束优化与有约束优化两类,其求解方法因约束条件的形式不同而存在差异。

2.2.2 矩阵微积分在优化问题中的应用实例

以线性回归模型的参数最小二乘估计为例,目标是最小化成本函数:
E ( β ) = ( y − X β ) T ( y − X β ) E(\boldsymbol{\beta}) = (\mathbf{y} - \mathbf{X}\boldsymbol{\beta})^T (\mathbf{y} - \mathbf{X}\boldsymbol{\beta}) E(β)=(yXβ)T(yXβ)
其中, y \mathbf{y} y 为响应变量向量, X \mathbf{X} X 为解释变量矩阵, β \boldsymbol{\beta} β 为待估计的参数向量。利用矩阵微积分的导数运算规则,对成本函数 E ( β ) E(\boldsymbol{\beta}) E(β) 关于 β \boldsymbol{\beta} β 求导并令导数为零,可得到参数的最优估计:
β ^ = ( X T X ) − 1 X T y \hat{\boldsymbol{\beta}} = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y} β^=(XTX)1XTy
该实例直观展示了矩阵求导在优化问题中的具体应用。

2.3 矩阵微积分在机器学习模型训练中的应用

2.3.1 机器学习模型训练的基本原理

机器学习模型训练的关键过程包括数据特征提取与模型参数优化,其目标是使模型能够准确反映数据的内在规律。在参数优化阶段,矩阵微积分的求导运算用于计算损失函数相对于模型参数的梯度,进而通过优化算法调整参数以最小化损失函数。

2.3.2 矩阵微积分在模型训练中的应用实例

以神经网络训练为例,反向传播算法是参数更新的关键技术。该算法通过矩阵求导运算计算输出误差相对于各层权重的梯度,这些梯度用于通过梯度下降等优化方法更新权重参数。对于简单的单层神经网络,损失函数 L ( w ) L(\mathbf{w}) L(w) 关于权重向量 w \mathbf{w} w 的梯度可通过直接求导获得,复杂网络则需利用链式法则递归计算各层梯度,实现梯度的反向传播。

以下代码实现展示了如何利用矩阵求导知识,通过梯度下降算法优化简单线性回归模型:

# 示例:使用梯度下降算法优化简单线性回归模型
import numpy as np

# 定义训练数据
X = np.array([[1], [2], [3], [4]])  # 输入特征矩阵
y = np.array([2, 3, 4, 5])          # 目标变量向量

# 初始化参数向量
beta = np.zeros((1, 1))

# 设置超参数
learning_rate = 0.01  # 学习率
iterations = 100      # 迭代次数

# 梯度下降迭代过程
for _ in range(iterations):
    # 计算预测值
    y_pred = np.dot(X, beta)
    # 计算损失函数关于参数的梯度(基于矩阵求导规则)
    gradient = -2 * np.dot(X.T, (y - y_pred)) / len(X)
    # 更新参数
    beta = beta - learning_rate * gradient

print("优化后的参数 beta:", beta)

上述代码中,梯度的计算直接基于矩阵求导的理论结果,通过矩阵运算高效实现了梯度求解与参数更新。通过本章节的介绍,可系统掌握矩阵微积分在优化问题与机器学习中的应用逻辑,并通过实例理解理论与实践的结合方式。后续章节将进一步探讨矩阵求导的详细公式与复杂应用场景。

3. The Matrix Cookbook:矩阵运算及求导公式参考手册

矩阵运算与求导公式是线性代数与多元微积分的基础工具,尤其在处理多变量函数与高维数据时具有重要作用。本章详细介绍矩阵运算的基本规则、矩阵求导的关键公式,以及这些理论工具在实际问题中的应用方法。

3.1 矩阵运算的基本规则

矩阵运算是理解矩阵求导公式的基础,本节从基础的矩阵加减乘除运算入手,逐步深入至矩阵转置、逆等高级运算,为后续求导公式的学习奠定基础。

3.1.1 矩阵的加减乘除运算

矩阵的加减乘除运算遵循特定的数学规则,是线性代数的核心内容,也是矩阵求导过程中不可或缺的基础操作。矩阵加法要求两个矩阵维度完全一致,对应元素进行加减运算;矩阵乘法需满足前一矩阵的列数与后一矩阵的行数相等,运算结果的元素为对应行与列的内积;矩阵除法通常通过求逆运算间接实现。以下代码展示了矩阵基本运算的实现方式:

import numpy as np

# 定义两个 2×2 矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[2, 0], [1, 2]])

# 矩阵加法
sum_matrix = A + B

# 矩阵乘法(按矩阵乘法规则)
product_matrix = np.dot(A, B)

# 矩阵转置
transpose_matrix = np.transpose(A)

# 输出结果
print("矩阵加法结果:")
print(sum_matrix)
print("\n矩阵乘法结果:")
print(product_matrix)
print("\n矩阵转置结果:")
print(transpose_matrix)

通过上述代码可观察到,矩阵加法通过数组直接相加实现,矩阵乘法通过 numpy.dot() 函数实现,转置运算通过 numpy.transpose() 函数实现,运算结果严格遵循矩阵运算的数学规则。

3.1.2 矩阵的转置、逆等高级运算

矩阵的高级运算包括求逆、行列式计算、特征值分解等,在矩阵求导与优化问题中应用广泛。其中,矩阵求逆仅适用于非奇异方阵(行列式不为零的方阵),在机器学习中常用于求解线性方程组或正则化过程。以下代码展示了矩阵求逆运算的实现:

# 计算矩阵 A 的逆矩阵(需确保 A 为非奇异方阵)
inverse_matrix = np.linalg.inv(A)

print("矩阵 A 的逆矩阵:")
print(inverse_matrix)

矩阵求逆运算在优化问题中具有重要意义,例如线性回归中参数的闭式解求解便依赖于矩阵求逆运算,其结果直接决定参数的更新规则。

3.2 矩阵求导公式详解

矩阵求导公式是本章的重点内容,本节将系统介绍标量对向量、向量对向量、标量对矩阵及矩阵对矩阵的求导公式,涵盖基础公式与高级拓展公式。

3.2.1 矩阵求导的基本公式

矩阵求导的基本公式针对不同维度的变量组合分为四类,以下以标量对向量的导数为例,展示基本求导公式的应用:

from sympy import Matrix, symbols

# 定义向量变量
x, y = symbols('x y')
v = Matrix([x, y])

# 定义标量函数 f(v) = x² + xy + y²
f = x**2 + x*y + y**2

# 计算标量函数对向量各元素的偏导数
df_dx = f.diff(x)
df_dy = f.diff(y)

# 输出结果
print("标量函数 f 对 x 的导数:")
print(df_dx)
print("\n标量函数 f 对 y 的导数:")
print(df_dy)

上述代码中,标量函数对向量的导数为梯度向量,其元素为函数对向量各分量的偏导数,符合矩阵求导的基本定义。

3.2.2 矩阵求导的高级公式

矩阵求导的高级公式包括矩阵对矩阵的导数、复合矩阵函数的导数等,这类运算在复杂模型的梯度推导中应用广泛。以下代码展示了标量函数对矩阵的求导过程:

# 定义矩阵变量
x, y, z, t = symbols('x y z t')
X = Matrix([[x, y], [z, t]])

# 定义标量函数 f(X) = xy + zt
f = x*y + z*t

# 计算标量函数对矩阵的导数(结果为与 X 同维度的矩阵)
df_dX = f.diff(X)

print("函数 f 关于矩阵 X 的导数:")
print(df_dX)

矩阵求导的高级公式需结合矩阵运算的特殊性质(如迹的循环性质、逆矩阵的导数规则等),其推导过程需严格遵循矩阵微积分的数学逻辑,所得结果为后续优化算法的推导提供理论基础。

3.3 矩阵求导公式的应用实例

矩阵求导公式在理论研究与工程实践中均具有重要价值,本节通过具体实例展示其在优化问题与机器学习模型中的应用。

3.3.1 矩阵求导公式的实际应用

在机器学习与优化问题中,损失函数相对于模型参数的梯度计算是参数更新的关键步骤,矩阵求导公式为梯度的系统推导提供了标准化方法。以下示例展示了简单损失函数的梯度计算:

from sympy import symbols, diff

# 定义变量
x, y = symbols('x y')

# 定义损失函数 L(x, y) = x² + 2xy + y²
L = x**2 + 2*x*y + y**2

# 计算损失函数关于各变量的梯度
grad_L_x = diff(L, x)
grad_L_y = diff(L, y)

# 输出结果
print("损失函数 L 关于 x 的梯度:")
print(grad_L_x)
print("\n损失函数 L 关于 y 的梯度:")
print(grad_L_y)

上述示例中,梯度计算直接应用标量对变量的求导公式,所得结果可直接用于梯度下降等优化算法的参数更新。

3.3.2 矩阵求导公式的复杂应用

在复杂机器学习模型(如深度神经网络)的训练中,矩阵求导公式用于推导前向传播与反向传播过程中的梯度计算规则。以下代码展示了简单神经网络中激活函数输出对输入的导数计算:

from sympy import Matrix, symbols

# 定义权重矩阵变量与输入向量变量
w11, w12, w21, w22 = symbols('w11 w12 w21 w22')
x1, x2 = symbols('x1 x2')

# 定义权重矩阵与输入向量
W = Matrix([[w11, w12], [w21, w22]])
x = Matrix([x1, x2])

# 线性变换过程
a = W * x

# 激活函数(此处简化为恒等激活函数 h(a) = a)
h = a

# 计算激活函数输出对输入向量的导数
dh_dx = h.diff(x)

print("激活函数输出 h 关于输入 x 的导数:")
print(dh_dx)

在实际应用中,该方法可扩展至多层神经网络,通过链式法则递归计算各层权重的梯度,为反向传播算法提供理论支撑。矩阵求导公式的系统性与规范性,确保了复杂模型梯度计算的准确性与高效性。

4. 闲话矩阵求导:易懂的矩阵求导概念与实例

4.1 矩阵求导的概念解析

4.1.1 矩阵求导的定义和意义

在数学与工程领域,矩阵求导是处理多变量函数的重要工具,其核心是将标量求导的概念扩展至向量与矩阵等多维数据结构。矩阵求导的本质是求解函数相对于向量或矩阵变量的导数,通过雅可比矩阵、梯度向量等形式表示导数结果。例如,在分析线性系统稳定性时,需通过矩阵求导分析系统状态随参数的变化规律;在机器学习中,损失函数相对于参数矩阵的梯度计算则依赖矩阵求导方法。

矩阵求导的定义虽不如标量求导直观,但其核心逻辑是将多维变量的导数转化为矩阵形式的统一表示。从数学本质上看,矩阵可视为“向量的向量”,因此矩阵求导可通过标量偏导数的结构化组合实现,这一过程需引入雅可比矩阵、梯度向量等关键概念。理解矩阵求导不仅有助于掌握线性代数与微积分的内在联系,还能为处理高维问题提供标准化的数学工具。

4.1.2 矩阵求导的基本步骤

矩阵求导的基本步骤可归纳为以下五个环节,确保导数计算的规范性与准确性:

  1. 确定求导对象:明确待求导的函数类型(标量、向量或矩阵值函数)与变量类型(向量或矩阵);
  2. 分解复合结构:若函数为复合函数,需按链式法则分解为简单函数的组合;
  3. 计算偏导数:针对函数的每个输出分量,计算其相对于变量每个元素的偏导数;
  4. 构建导数矩阵:根据求导对象的类型,将偏导数按规则排列为雅可比矩阵、梯度矩阵等形式;
  5. 应用简化规则:利用矩阵运算的性质(如迹的循环性、逆矩阵导数公式等)简化导数表达式。

例如,对于矩阵函数 f ( X ) f(\mathbf{X}) f(X) X \mathbf{X} X m × n m \times n m×n 矩阵),其导数为 m × n m \times n m×n 矩阵,每个元素为 f f f X \mathbf{X} X 对应元素的偏导数,即 ( ∂ f ∂ X ) i j = ∂ f ∂ X i j \left( \frac{\partial f}{\partial \mathbf{X}} \right)_{ij} = \frac{\partial f}{\partial X_{ij}} (Xf)ij=Xijf

4.2 矩阵求导的实例解析

4.2.1 矩阵求导的简单实例

例 1:标量函数对向量的导数
设标量函数 f ( x , y ) = x 2 y + x y 2 f(x, y) = x^2 y + x y^2 f(x,y)=x2y+xy2,求其对向量 v = [ x , y ] T \mathbf{v} = [x, y]^T v=[x,y]T 的导数。
根据梯度定义,函数对向量的导数为梯度向量,其元素为函数对向量各分量的偏导数:
∇ v f = [ ∂ f ∂ x , ∂ f ∂ y ] T = [ 2 x y + y 2 , x 2 + 2 x y ] T \nabla_{\mathbf{v}} f = \left[ \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} \right]^T = \left[ 2xy + y^2, x^2 + 2xy \right]^T vf=[xf,yf]T=[2xy+y2,x2+2xy]T

例 2:矩阵函数对矩阵的导数
设矩阵函数 F ( X ) = A X + B X 2 F(\mathbf{X}) = \mathbf{A}\mathbf{X} + \mathbf{B}\mathbf{X}^2 F(X)=AX+BX2,其中 X \mathbf{X} X n × n n \times n n×n 矩阵, A \mathbf{A} A B \mathbf{B} B 为常数矩阵。根据矩阵求导的线性规则与乘积规则,导数计算如下:
∂ F ( X ) ∂ X = A + B X + B T X T \frac{\partial F(\mathbf{X})}{\partial \mathbf{X}} = \mathbf{A} + \mathbf{B}\mathbf{X} + \mathbf{B}^T \mathbf{X}^T XF(X)=A+BX+BTXT
(注:当 B \mathbf{B} B 为对称矩阵时,可简化为 A + 2 B X \mathbf{A} + 2\mathbf{B}\mathbf{X} A+2BX

4.2.2 矩阵求导的复杂实例

考虑标量函数 f ( X ) = tr ( X − 1 A X ) f(\mathbf{X}) = \text{tr}(\mathbf{X}^{-1}\mathbf{A}\mathbf{X}) f(X)=tr(X1AX),其中 tr ( ⋅ ) \text{tr}(\cdot) tr() 表示矩阵的迹, A \mathbf{A} A 为对称矩阵, X \mathbf{X} X 为可逆方阵。求导过程需结合迹的性质与逆矩阵的导数规则,步骤如下:

  1. 利用迹的循环性质 tr ( A B C ) = tr ( B C A ) \text{tr}(\mathbf{ABC}) = \text{tr}(\mathbf{BCA}) tr(ABC)=tr(BCA),将函数改写为 tr ( A X X − 1 ) = tr ( A ) \text{tr}(\mathbf{A}\mathbf{X}\mathbf{X}^{-1}) = \text{tr}(\mathbf{A}) tr(AXX1)=tr(A)(常数),但该形式不适用于直接求导,需通过微分展开推导;
  2. X − 1 A X \mathbf{X}^{-1}\mathbf{A}\mathbf{X} X1AX 求微分: d ( X − 1 A X ) = − X − 1 d X X − 1 A X + X − 1 A d X d(\mathbf{X}^{-1}\mathbf{A}\mathbf{X}) = - \mathbf{X}^{-1} d\mathbf{X} \mathbf{X}^{-1}\mathbf{A}\mathbf{X} + \mathbf{X}^{-1}\mathbf{A} d\mathbf{X} d(X1AX)=X1dXX1AX+X1AdX
  3. 取迹并利用迹的线性性质: d tr ( X − 1 A X ) = tr ( X − 1 A d X − X − 1 d X X − 1 A X ) d\text{tr}(\mathbf{X}^{-1}\mathbf{A}\mathbf{X}) = \text{tr}\left( \mathbf{X}^{-1}\mathbf{A} d\mathbf{X} - \mathbf{X}^{-1} d\mathbf{X} \mathbf{X}^{-1}\mathbf{A}\mathbf{X} \right) dtr(X1AX)=tr(X1AdXX1dXX1AX)
  4. 再次应用迹的循环性质化简第二项: tr ( X − 1 d X X − 1 A X ) = tr ( A X X − 1 d X X − 1 ) = tr ( A d X X − 1 ) \text{tr}\left( \mathbf{X}^{-1} d\mathbf{X} \mathbf{X}^{-1}\mathbf{A}\mathbf{X} \right) = \text{tr}\left( \mathbf{A} \mathbf{X} \mathbf{X}^{-1} d\mathbf{X} \mathbf{X}^{-1} \right) = \text{tr}\left( \mathbf{A} d\mathbf{X} \mathbf{X}^{-1} \right) tr(X1dXX1AX)=tr(AXX1dXX1)=tr(AdXX1)
  5. 合并两项并整理: d tr ( X − 1 A X ) = tr ( ( X − 1 A − X − 1 A ) d X ) = 0 d\text{tr}(\mathbf{X}^{-1}\mathbf{A}\mathbf{X}) = \text{tr}\left( \left( \mathbf{X}^{-1}\mathbf{A} - \mathbf{X}^{-1}\mathbf{A} \right) d\mathbf{X} \right) = 0 dtr(X1AX)=tr((X1AX1A)dX)=0(因 A \mathbf{A} A 对称),最终导数为:
    ∂ tr ( X − 1 A X ) ∂ X = X − T A T − X − T A T X − 1 X = 0 \frac{\partial \text{tr}(\mathbf{X}^{-1}\mathbf{A}\mathbf{X})}{\partial \mathbf{X}} = \mathbf{X}^{-T}\mathbf{A}^T - \mathbf{X}^{-T}\mathbf{A}^T \mathbf{X}^{-1}\mathbf{X} = \mathbf{0} Xtr(X1AX)=XTATXTATX1X=0

该实例展示了矩阵求导中高级规则的应用,需结合迹的性质、逆矩阵微分公式等知识,体现了矩阵求导与标量求导的本质区别。通过上述实例可见,矩阵求导是解决高维复杂问题的强大工具,其关键价值在于将多维变量的导数运算转化为结构化的矩阵运算,为理论推导与工程实现提供统一框架。

5. 矩阵求导在优化问题中的应用

优化问题是机器学习与工程领域的重要研究内容,无论是参数调整、资源分配还是路径规划,其求解过程均依赖有效的求导技术。矩阵求导作为处理多变量、多参数复杂优化问题的关键工具,能够直接对向量和矩阵进行运算,高效推导模型参数的更新规则。

5.1 优化问题的基本原理

在探讨矩阵求导的应用前,首先回顾优化问题的基础概念与求解方法,为后续应用分析奠定理论基础。

5.1.1 优化问题的定义和分类

优化问题的核心是在给定条件下寻找一组参数,使目标函数达到极值(最小值或最大值)。根据约束条件的存在与否及形式,优化问题可分为以下类别:

  • 无约束优化:无额外约束条件限制参数取值,仅需寻找目标函数的极值点;
  • 有约束优化:参数取值需满足特定约束条件,进一步分为:
    • 等式约束优化:约束条件以等式形式表示,通常采用拉格朗日乘数法求解;
    • 不等式约束优化:约束条件以不等式形式表示,常用 KKT 条件(Karush-Kuhn-Tucker 条件)求解。
5.1.2 优化问题的求解方法

优化问题的求解方法可根据是否利用目标函数的导数信息分为两类:

  • 梯度类方法:利用目标函数的一阶或二阶导数信息,包括:
    • 梯度下降法:沿目标函数梯度反方向逐步迭代,适用于大规模问题;
    • 牛顿法与拟牛顿法:利用一阶导数(梯度)和二阶导数(海森矩阵)信息,收敛速度快于梯度下降法;
    • 随机梯度下降(SGD)及其变种:通过随机采样数据点估计梯度,适用于大数据集的优化;
  • 无梯度类方法:无需导数信息,如模拟退火算法、遗传算法等,适用于目标函数不可导或导数难以计算的场景。

5.2 矩阵求导在优化问题中的作用

矩阵求导在优化问题中的关键作用是高效计算目标函数相对于高维参数(向量或矩阵)的梯度,为梯度类优化算法提供关键输入。

5.2.1 矩阵求导在优化问题中的应用实例

以机器学习中常用的均方误差(MSE)损失函数为例,其矩阵形式为:
J ( W ) = 1 2 ∥ y − X W ∥ 2 J(\mathbf{W}) = \frac{1}{2} \|\mathbf{y} - \mathbf{X}\mathbf{W}\|^2 J(W)=21yXW2
其中, W ∈ R d × k \mathbf{W} \in \mathbb{R}^{d \times k} WRd×k 为待优化的参数矩阵, X ∈ R n × d \mathbf{X} \in \mathbb{R}^{n \times d} XRn×d 为输入数据矩阵, y ∈ R n × k \mathbf{y} \in \mathbb{R}^{n \times k} yRn×k 为目标矩阵, ∥ ⋅ ∥ \|\cdot\| 表示 Frobenius 范数。

为最小化损失函数 J ( W ) J(\mathbf{W}) J(W),需计算其关于 W \mathbf{W} W 的梯度并令梯度为零。利用矩阵求导规则(标量对矩阵的导数、范数的导数),推导过程如下:

  1. 展开损失函数: J ( W ) = 1 2 tr ( ( y − X W ) T ( y − X W ) ) J(\mathbf{W}) = \frac{1}{2} \text{tr}\left( (\mathbf{y} - \mathbf{X}\mathbf{W})^T (\mathbf{y} - \mathbf{X}\mathbf{W}) \right) J(W)=21tr((yXW)T(yXW))
  2. W \mathbf{W} W 求导,利用迹的导数规则 ∂ tr ( A B ) ∂ A = B T \frac{\partial \text{tr}(\mathbf{AB})}{\partial \mathbf{A}} = \mathbf{B}^T Atr(AB)=BT 与链式法则:
    ∇ W J ( W ) = 1 2 ⋅ 2 ⋅ ( − X T ( y − X W ) ) = − X T ( y − X W ) \nabla_{\mathbf{W}} J(\mathbf{W}) = \frac{1}{2} \cdot 2 \cdot \left( - \mathbf{X}^T (\mathbf{y} - \mathbf{X}\mathbf{W}) \right) = - \mathbf{X}^T (\mathbf{y} - \mathbf{X}\mathbf{W}) WJ(W)=212(XT(yXW))=XT(yXW)
  3. 令梯度为零,解得参数矩阵的闭式解: W ∗ = ( X T X ) − 1 X T y \mathbf{W}^* = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y} W=(XTX)1XTy

该实例展示了矩阵求导在无约束优化问题中的应用,通过矩阵运算直接推导梯度表达式,避免了逐元素计算的繁琐过程。

5.2.2 矩阵求导在优化问题中的优势分析

矩阵求导在优化问题中的优势主要体现在以下方面:

  1. 高维适配性:能够直接处理向量、矩阵形式的高维参数,无需将参数拆解为标量逐一计算,显著简化高维优化问题的推导过程;
  2. 运算高效性:矩阵求导规则与矩阵运算(乘法、转置、求逆等)高度兼容,可通过批量运算减少计算量,尤其适用于大规模数据与复杂模型;
  3. 理论统一性:为不同类型的优化问题(如线性回归、神经网络训练)提供统一的梯度计算框架,便于算法的通用化设计与实现;
  4. 工程可实现性:矩阵求导的结果可直接映射为数值计算代码(如 NumPy、TensorFlow 等库的矩阵运算接口),降低理论与工程实践之间的转化成本。

在深度学习的反向传播算法中,矩阵求导的优势尤为突出:通过矩阵形式批量计算各层权重的梯度,实现高效的参数更新;同时,矩阵求导的理论严谨性确保了梯度计算的准确性,为算法收敛提供保障。

综上,矩阵求导作为连接优化理论与工程实现的关键工具,为复杂高维优化问题的求解提供了高效、统一的数学框架,是高级机器学习与人工智能领域不可或缺的重要技术。


via:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值