矩阵求导——只需要记住这个诀窍

矩阵求导——只需要记住这个诀窍

  • 1. 背景:
  • 2. 正文开始
    • 2.1 矩阵对矩阵的求导
    • 2.2 行向量对列向量的求导
    • 2.3 元素对元素的求导

1. 背景:

最近开始入门ml&&dl&&nn,第一个问题就是解决我的数学饥荒问题,还好所看教材书后有干货数学知识,优化了学习的进程。(这里打个广告,所看教材为复旦的邱锡鹏老师编纂的《神经网络与深度学习》,想看的同学可以微信搜索公众号CVer,找历史推送下载,非利益相关)。然后,本菜鸡开始卡死在矩阵的求导上,什么标量对向量,向量对矩阵,矩阵对向量,行向量对列向量等一大堆乱七八糟的导数(教材只介绍了向量对标量以及向量对向量)。找不到规律怎么办呢,于是请求博客里的大佬,看了一篇大佬的总结:
传送门
他把所有求导的情况都整理出来,但似乎没有总结规律,这里我靠自己的yy总结了一点方便记忆的规律,如果对哪位同学有帮助不甚荣幸(博主写的时候是大二,没有学过矩阵论,各位已经系统学过矩阵论的大佬应该就可以关掉窗口了)

2. 正文开始

首先,按照博主的分类,所有的情况都可以暴力归结为以下三个问题:

  1. 矩阵矩阵求导
  2. 行向量列向量的求导
  3. 元素元素的求导

当然大家可以有自己的记忆法则和分类,这里我只介绍我觉得好使的方法

2.1 矩阵对矩阵的求导

为什么一上来就讲这么复杂的问题呢?相必大家在学习的时候有这样的体会,尤其是在学习一种模型的时候:总的来说有两种方法,即一般到特殊或特殊到一般,至于具体选择哪一个,就要看这个模型的特性了。例如对于已经学过线性代数的同学,反正国内大部分学校都是先讲矩阵再讲向量,但我们知道向量其实是可以视为 1 × n 1×n 1×n 或者 n × 1 n×1 n×1 的矩阵,它是一种特殊的矩阵。之所以先讲矩阵,是因为矩阵这个数学模型有非常良好的性质,这些性质方便学者们记忆并灵活使用。当学习完矩阵后,向量这个子类完全可以套用矩阵所具有的性质(在一定条件下),所以根据这种思路,我想直接讲矩阵的矩阵的求导

简单来说,矩阵的矩阵的求导和矩阵和矩阵的乘法很类似:
我们假设 Y = [ y 11 ⋯ y 1 n ⋮ ⋱ ⋮ y m 1 ⋯ y m n ] \bm{Y} = \left[ \begin{matrix} y_{11} & \cdots & y_{1n} \\ \vdots & \ddots & \vdots \\ y_{m1} & \cdots & y_{mn} \\ \end{matrix} \right] Y=y11ym1y1nymn
是一个 m × n m×n m×n 的矩阵
X = [ x 11 ⋯ x 1 q ⋮ ⋱ ⋮ x p 1 ⋯ x p q ] \bm{X} = \left[ \begin{matrix} x_{11} & \cdots & x_{1q} \\ \vdots & \ddots & \vdots \\ x_{p1} & \cdots & x_{pq} \\ \end{matrix} \right] X=x11xp1x1qxpq
是一个 p × q p×q p×q 的矩阵,我们想求 ∂ Y ∂ X \frac{\partial {\bm{Y}}}{\partial{\bm{X}}} XY,首先先考虑结果的形式,是一个 m × q m×q m×q 的大矩阵,注意,这里的 m m m q q q 并不是只元素的个数,而是小矩阵的个数,即 ∂ Y ∂ X \frac{\partial {\bm{Y}}}{\partial{\bm{X}}} XY 是由 m × q m×q m×q 个小矩阵组成的。

那么每一个小矩阵长什么样子呢?我们首先把矩阵分别按行和按列分成不同的向量:
Y = [ y 11 ⋯ y 1 n ⋮ ⋱ ⋮ y m 1 ⋯ y m n ] = [ y 1 T y 2 T ⋮ y m T ] \bm{Y} = \left[ \begin{matrix} y_{11} & \cdots & y_{1n} \\ \vdots & \ddots & \vdots \\ y_{m1} & \cdots & y_{mn} \\ \end{matrix} \right] = \left[ \begin{matrix} \bm{y_1^T} \\ \bm{y_2^T} \\ \vdots \\ \bm{y_m^T} \end{matrix} \right] Y=y11ym1y1nymn=y1Ty2TymT
X = [ x 11 ⋯ x 1 q ⋮ ⋱ ⋮ x p 1 ⋯ x p q ] = [ x 1 x 2 ⋯ x q ] \bm{X} = \left[ \begin{matrix} x_{11} & \cdots & x_{1q} \\ \vdots & \ddots & \vdots \\ x_{p1} & \cdots & x_{pq} \\ \end{matrix} \right] = \left[ \begin{matrix} \bm{x_1}& \bm{x_2} & \cdots &\bm {x_q} \\ \end{matrix} \right] X=x11xp1x1qxpq=[x1x2xq]
则有如下结果:

∂ Y ∂ X = [ ∂ y 1 T ∂ x 1 ⋯ ∂ y 1 T ∂ x q ⋮ ⋱ ⋮ ∂ y m T ∂ x 1 ⋯ ∂ y m T ∂ x q ] \frac{\partial {\bm{Y}}}{\partial{\bm{X}}} = \left[ \begin{matrix} \frac{\partial {\bm{y_1^T}}}{\partial{\bm{x_1}}} & \cdots & \frac{\partial {\bm{y_1^T}}}{\partial{\bm{x_q}}} \\ \vdots & \ddots & \vdots \\ \frac{\partial {\bm{y_m^T}}}{\partial{\bm{x_1}}} & \cdots & \frac{\partial {\bm{y_m^T}}}{\partial{\bm{x_q}}} \\ \end{matrix} \right] XY=x1y1Tx1ymTxqy1TxqymT

故,矩阵对矩阵求导,第一步就是要化成 m × q m×q m×q 的大矩阵,其中第 i i i 行第 j j j 列的元素为 ∂ y i T ∂ x j \frac{\partial {\bm{y_i^T}}}{\partial{\bm{x_j}}} xjyiT,可知这是一个行向量对一个列向量进行求导。

2.2 行向量对列向量的求导

下面要解决的问题是行向量如何对列向量求导,这里直接把大神的图片粘过来:
矩阵求导——只需要记住这个诀窍_第1张图片
可知,求导结果是一个 p × n p×n p×n 的矩阵,相当于 y T \bm{y^T} yT 中的每个元素分别对 x \bm{x} x 中的每个元素求导,求导结果中,每一个求导的自变量的角标与自变量 x \bm{x} x 的同行元素的角标相同(例如,求导后的矩阵第一行的所有分母都是 x 1 \bm{x_1} x1

2.3 元素对元素的求导

这个没有什么可说的了,就是微积分的知识。

你可能感兴趣的:(机器学习)