前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「 矩阵求导」学习笔记

「 矩阵求导」学习笔记

作者头像
曼亚灿
发布2023-05-18 10:23:04
3210
发布2023-05-18 10:23:04
举报
文章被收录于专栏:亚灿网志亚灿网志

太难啦~太难啦~太难啦~

标量求导

导数的定义:假设有一个函数f:\mathbb{R} \rightarrow \mathbb{R},其输入输出都是标量。如果f的导数存在,那么这个极限被定义为:

f’(x)= \lim_{h \to 0}\frac{f(x+h)-f(x)}{h}

来个代码演示下:

代码语言:javascript
复制
In [1]: def f(x):  # 定义一个函数
   ...:     return 3 * x ** 2 - 4 * x
   ...:

In [2]: def numerical_lim(f, x, h):  # 定义求导的计算方法
   ...:     return (f(x+h) - f(x)) / h
   ...:

In [3]: h = 0.1

In [4]: for i in range(5):  # 循环逐渐逼近求导
   ...:     print(f'h={h}, numerical limit={numerical_lim(f, 1, h, ):.5f}')
   ...:     h *= .1
   ...:
h=0.1, numerical limit=2.30000
h=0.010000000000000002, numerical limit=2.03000
h=0.0010000000000000002, numerical limit=2.00300
h=0.00010000000000000003, numerical limit=2.00030
h=1.0000000000000004e-05, numerical limit=2.00003

y=3x^2-4x,所以y'=6x-4,即y'(1)=6-4=2

常见导数

一元一次函数的求导:

$y$

$a$

$x^n$

$a^x$

$Inx$

$sin(x)$

$\frac{dy}{dx}$

0

$nx^{n-1}$

$(Ina)(a^x)$

$\frac{1}{x}$

$cos(x)$

a不是关于x的函数。

复合函数的求导:

$y$

$u+v$

$uv$

$y=f(u), u=g(x)$

$\frac{dy}{dx}$

$\frac{du}{dx} + \frac{dv}{dx}$

$\frac{du}{dx}v + \frac{dv}{dx}u$

$\frac{dy}{du}·\frac{du}{dx}$

导数拓展到向量与矩阵

可能出现的情况

Tips / 提示 没有特殊说明,本博文中提到的x,y都为标量,\mathbf{x,y}为一维Tensor——向量,\mathbf{X,Y}为二维Tensor——矩阵。

-

$x$

$\mathbf{x}$

$\mathbf{X}$

$y$

$\frac{\partial y}{\partial x}$

$\frac{\partial y}{\partial \mathbf{x}}$

$\frac{\partial y}{\partial \mathbf{X}}$

$\mathbf{y}$

$\frac{\partial \mathbf{y}}{\partial x}$

$\frac{\partial \mathbf{y}}{\partial \mathbf{x}}$

$\frac{\partial \mathbf{y}}{\partial \mathbf{X}}$

$\mathbf{Y}$

$\frac{\partial \mathbf{Y}}{\partial x}$

$\frac{\partial \mathbf{Y}}{\partial \mathbf{x}}$

$\frac{\partial \mathbf{Y}}{\partial \mathbf{X}}$

举个?

对于一个多元函数:

f(x_1,x_2,x_3) = x_1^2+x_1x_2+x_2x_3

可以将fx_1,x_2,x_3的偏导数分别求出来,即:

$$ \begin{equation} \begin{cases} \frac{\partial f}{\partial x_1} = 2x_1+x_2 \\ \frac{\partial f}{\partial x_2} = x_1+x_3 \\ \frac{\partial f}{\partial x_3} = x_2 \end{cases} \end{equation} $$

所谓向量的求导,其实与多元函数的求导类似,只不过写成了向量的形式。

上式就可以理解为一个f关于向量[x_1,x_2,x_3]^T的函数:

f([x_1,x_2,x_3]^T) = x_1^2+x_1x_2+x_2x_3

对其进行求导的结果是:

$$ \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}_{3×1}}= \left [ \begin{matrix} \frac{\partial f}{\partial x_1} \\ \frac{\partial f}{\partial x_2} \\ \frac{\partial f}{\partial x_3} \end{matrix} \right ] = \left [ \begin{matrix} 2x_1+x_2 \\ x_1+x_3 \\ x_2 \end{matrix} \right ] $$

上面这个形式就是一个标量f对一个向量求导的情况。

矩阵、向量的求导, 本质就是每个f分别对变元中的每个元素逐个求偏导,只不过写成了向量、矩阵形式而已。所以,如果function中有m个f,变元中有n个元素,那么每个f对变元中的每个元素逐个求偏导后,我们就会产生m×n个结果。

求导的各种情况

求导秘术

  1. 标量不变,向量拉伸;
  2. 前面横向拉,后面纵向拉;
  3. 分母布局——YX拉伸,分子布局——XY拉伸,通常(分母布局)^T=(分子布局)

该方法来自Bilibili @GRNovmbrain1

例如,当\mathbf{f}(\mathbf{x})以及\mathbf{x}_{n×1}都为向量时:

$$ \mathbf{f}(\mathbf{x})= \left [ \begin{matrix} f_1(\mathbf{x}) \\ f_2(\mathbf{x}) \\ ... \\ f_n(\mathbf{x}) \end{matrix} \right ], \ \mathbf{x} = \left [ \begin{matrix} x_1 \\ x_2 \\ ... \\ x_n \end{matrix} \right ] $$

那么求导结果为:

$$ \frac{\partial \mathbf{f}(\mathbf{x})}{\partial \mathbf{x}}= \left [ \begin{matrix} \frac{\partial \mathbf{f}}{\partial x_1} \\ \frac{\partial \mathbf{f}}{\partial x_2} \\ \cdots \\ \frac{\partial \mathbf{f}}{\partial x_n} \end{matrix} \right ] = \left [ \begin{matrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_2}{\partial x_1} & \cdots & \frac{\partial f_n}{\partial x_1} \\ \frac{\partial f_1}{\partial x_2} & \frac{\partial f_2}{\partial x_2} & \cdots & \frac{\partial f_n}{\partial x_2} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_1}{\partial x_n} & \frac{\partial f_2}{\partial x_n} & \cdots & \frac{\partial f_n}{\partial x_n} \end{matrix} \right ] $$

Tips / 提示

  1. 由上式可以看出,先对后面(X)进行了纵向拉伸,在对前面(Y)进行了横向拉伸。
  2. 同时也可以看出,一个n×1的向量对一个n×1的向量求导后,得到了一个n×n的矩阵。

导数拓展到矩阵

矩阵求导结果的布局

包括:分子布局或分母布局。

  • 分子布局:求导结果的维度以分子为主。拿标量对向量求导的例子来说,假如向量是一个行向量,那么求导结果是列向量,假如向量是一个列向量,那么求导结果是行向量。
  • 分母布局:求导结果的维度以分母为主。拿标量对向量求导的例子来说,假如向量是一个行向量,那么求导结果是行向量,假如向量是一个列向量,那么求导结果是列向量。

可见,分子布局和分母布局两者相差一个转置

分子布局,就是分子是列向量形式,分母是行向量形式:

$$ \frac{\partial f_{2×1}(\mathbf{x})}{\partial \mathbf{x}_{3×1}^T}= \left [ \begin{matrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \frac{\partial f_1}{\partial x_3}\\ \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \frac{\partial f_2}{\partial x_3} \end{matrix} \right ]_{2×3} $$

分母布局,就是分母是列向量形式,分母是行向量形式:

$$ \frac{\partial f^T_{2×1}(\mathbf{x})}{\partial \mathbf{x}_{3×1}}= \left [ \begin{matrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_2}{\partial x_1} \\ \frac{\partial f_1}{\partial x_2} & \frac{\partial f_2}{\partial x_2} \\ \frac{\partial f_1}{\partial x_3} & \frac{\partial f_2}{\partial x_3} \end{matrix} \right ]_{3×2} $$

Expand / 拓展 可以看出,(分母布局)^T=(分子布局),且分子布局中求导后的结果行数与分子相同,分母布局中求导后的结果行数与分母相同。

举个?

设存在函数:

$$ f(\mathbf{x}), \ \mathbf{x}= \left [ \begin{matrix} x_1 \\ x_2 \\ \cdots \\ x_n \end{matrix} \right ]_{n×1} $$

求导可以得:

$$ \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}= \left [ \begin{matrix} \frac{\partial f}{\partial x_1}\\ \frac{\partial f}{\partial x_2}\\ \cdots \\ \frac{\partial f}{\partial x_n} \end{matrix} \right ]_{n×1} $$

因为f(\mathbf{x})为标量函数,所以行数为1,\mathbf{x}n×1向量,求导的结果为n×1向量,求导后的结果与分母具有相同得行数,所以上述为分母布局。

求导方式也可以写为行向量形式:

$$ \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}= \left [ \begin{matrix} \frac{\partial f}{\partial x_1}, \ \frac{\partial f}{\partial x_2}, \ \cdots, \ \frac{\partial f}{\partial x_n} \end{matrix} \right ]_{1×n} $$

求导的结果为1×n向量,求导后的结果与分子具有相同得行数,所以上述为分母布局。

证明:(分母布局)^T=(分子布局),另

$$ f(x_1, \ x_2)=x_1^2+x_2^2, \ \mathbf{x}= \left [ \begin{matrix} x_1\\ x_2 \end{matrix} \right ]_{2×1} $$

对应的分母布局为:

$$ \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}= \left [ \begin{matrix} \frac{\partial f}{\partial x_1}\\ \frac{\partial f}{\partial x_2} \end{matrix} \right ]_{2×1}= \left [ \begin{matrix} 2x_1\\ 2x_2 \end{matrix} \right ]_{2×1} $$

对应的分子布局为:

$$ \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}= \left [ \begin{matrix} \frac{\partial f}{\partial x_1}, \ \frac{\partial f}{\partial x_2} \end{matrix} \right ]_{1×2}= \left [ \begin{matrix} 2x_1, \ 2x_2 \end{matrix} \right ]_{1×2} = \left [ \begin{matrix} 2x_1\\ 2x_2 \end{matrix} \right ]_{2×1}^T $$

分母布局

该方法来自Bilibili @DR_CAN2。 梯度指向值变化最大的方向。

常用公式推导

1、如果存在f(x)=A^T\mathbf{x},那么:

\frac{\partial f}{\partial \mathbf{x}}=A^T

另:

$$ A= \left [ \begin{matrix} a_1 \\ a_2 \\ \cdots \\ a_n \end{matrix} \right ]_{n×1}, \ \mathbf{x}= \left [ \begin{matrix} x_1 \\ x_2 \\ \cdots \\ x_n \end{matrix} \right ]_{n×1}, \ $$

f(x)=A^T\mathbf{x}为一个标量:

f(x) = A^T\mathbf{x} = \sum_{i=1}^{n}a_ix_i

所以,对其求导得:

$$ \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}= \left [ \begin{matrix} \frac{\partial f}{\partial \mathbf{x_1}} \\ \frac{\partial f}{\partial \mathbf{x_2}} \\ \cdots \\ \frac{\partial f}{\partial \mathbf{x_n}} \\ \end{matrix} \right ] = \left [ \begin{matrix} \frac{\partial (\sum_{n}^{i=1}a_ix_i)}{\partial \mathbf{x_1}} \\ \frac{\partial (\sum_{n}^{i=1}a_ix_i)}{\partial \mathbf{x_2}} \\ \cdots \\ \frac{\partial (\sum_{n}^{i=1}a_ix_i)}{\partial \mathbf{x_n}} \\ \end{matrix} \right ] = \left [ \begin{matrix} a_1 \\ a_2 \\ \cdots \\ a_n \end{matrix} \right ] = A $$

上面是分子布局的结果,如果是分母布局,结果应该为:

\frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}=A^T

由线性代数基本公式可以推导出:A^T \mathbf{x}=\sum_{i=1}^{n} a_ix_i=\mathbf{x}^TA,所以说对于\mathbf{x}^TA也适用于本结论。

2、如果存在\mathbf{y}=A\mathbf{x},则:

\frac{\partial \mathbf{y}}{\partial \mathbf{x}}=\frac{\partial (A\mathbf{x})}{\partial \mathbf{x}}=A
证明过程
证明过程

证明过程

讲解

矩阵的求导是真抽象啊?,参考学习链接:

  1. 矩阵求导的本质与分子布局、分母布局的本质(矩阵求导——本质篇)
  2. 矩阵求导公式的数学推导(矩阵求导——基础篇)
  3. 矩阵求导公式的数学推导(矩阵求导——进阶篇)

  1. 【手推机器学习】矩阵求导--合集:https://www.bilibili.com/video/BV1xk4y1B7RQ/
  2. 【矩阵的导数运算】1_标量向量方程对向量求导_分母布局_分子布局:https://www.bilibili.com/video/BV1av4y1b7MM/

----- END -----

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 标量求导
    • 常见导数
    • 导数拓展到向量与矩阵
      • 可能出现的情况
        • 举个?
          • 求导秘术
          • 导数拓展到矩阵
            • 矩阵求导结果的布局
              • 举个?
              • 常用公式推导
              • 讲解
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档