Loading [MathJax]/jax/output/HTML-CSS/jax.js

矩阵求导总结

简介: 在看“多元线性回归”(multivariate linear regression)的时候又碰到了矩阵求导,决心把矩阵求导学一学了,网上搜了一些,也看了一下维基,简单整理一下,以后再碰到矩阵求导就方便查看了d=====( ̄▽ ̄*)b

在看“多元线性回归”(multivariate linear regression)的时候又碰到了矩阵求导,决心把矩阵求导学一学了,网上搜了一些,也看了一下维基,简单整理一下,以后再碰到矩阵求导就方便查看了d=====( ̄▽ ̄*)b

矩阵求导,没什么可怕的,无非就是 一个矩阵里的元素对另一个矩阵里的元素进行求导,只是符合一些规则而已

和朋友的白水东城博客链接-矩阵求导总结

先从简单的来说(⊙ ▽ ⊙)

向量(矩阵的特例)对一个标量进行求导,就是向量的每个元素对这个标量进行求导,结果可以定为行向量也可定为列向量(这个牵扯到后文要提到的分布)

标量对一个向量求导,就是标量分别对这个向量的每个元素求导,结果也一样,可以为行向量也可以为列向量。

维基上提到了一个布局(layout)的定义,大概意思是这样的:
分子布局(Numerator layout):分子为y或者分母为xT(即分子为列向量或者分母为行向量)

分母布局(Denominator layout):分子为yT或者分母为x(即分子为行向量或者分母为列向量)

:对于矩阵也是一样的,可以这样理解,(列)矩阵和(行)矩阵分别对应着列向量和行向量(如果现在这句话不能理解,不妨完下文的分布记法再来想想这句话的意思)。

用一个例子来解释一下这两个布局的区别和作用:

yx为例,假设xy都是列向量,那么分子布局的意思就是yxT,分母布局就是yTx。这样就有明显的区分了,分子布局可以看做是求偏导的分子项保持不变,而分母项则需要转置,而分母布局正好相反。

再举个例子:

向量y=(y1y2ym)T对标量x的偏导,如下:
yx=(y1xy2xymx)T

标量y对向量x=(x1x2xn)T求偏导,如下:

yx=(yx1yx2yxn)

第一个例子,结果还是列向量,但在第二个例子中结果却变成了行向量。注意这些都是分子布局的形式,如果换成是分母布局,那就要将上面的结果都转置过来才行(这也是之前所说的为什么有些资料上会把矩阵对标量的求导需要转置的原因)。同理,分子布局中向量y=(y1y2ym)T对向量x=(x1x2xn)T求偏导的结果:yx=[y1x1y1x2y1xny2x1y2x2y2xnymx1ymx2ymxn]

这就是著名的雅可比(Jacobian)矩阵。同样的,如果在分母布局中结果就是雅可比矩阵的转置。

又比如,对于分子布局一个m×n行的矩阵Y对于标量x求导的结果: Yx=[y11xy12xy1nxy21xy22xy2nxym1xym2xymnx]

而标量y对矩阵X的求导结果:yX=[yx11yx21yxm1yx12yx22yxm2yx1nyx2nyxmn]

我们根据经验(虽然这里不是列向量和行向量,但可以这么记忆),分母布局就是 上述结果的转置形式。

可能会疑惑,为啥要这样区分呢?

由于我们一般将向量默许为行向量或列向量,而这两种形式都客观存在,也没有孰优孰劣。

所以在看一些数学公式 的推导中,比如求矩阵对标量的倒数,直觉上是觉得是矩阵的每个元素对标量求导,但却有时候要进行转置,原因就是因为矩阵求导的两种分布了。

下面整理了一些维基上这两个分布的各自记法以及求导的参照表格

维基上的矩阵求导参照表格

分子布局记法(Numerator-layout notation)

  • 标量/行向量:image
  • 列向量/标量:image_1_1_
  • 列向量/行向量:image_2_1_
  • 标量/矩阵:image_3_1_

下面是分子布局中的特例:

  • 矩阵/标量:image_4_1_
  • 对矩阵(X)每个元素求导:image_5_1_

分母布局标记(Denominator-layout notation)

  • 标量/列向量:image_8_1_
  • 行向量/标量:image_9_1_
  • 行向量/列向量:image_10_1_
  • 标量/矩阵:image_11_1_

好了,知道啥叫分子布局和分母布局了,然后对于要求导的式子,就可以对照着快速查阅下面的表格了= ̄ω ̄=

1.向量—向量 Vector-by-vector identities
所谓的向量的计算,就是矩阵计算中最简单的一种,是把矩阵的行向量设为1的情况.
4a10fe7429efbec75c2c6fec0d173af_1_
2.标量—向量 Scalar-by-vector identities
其实只要在上面的“向量—向量”运算中把分子或分母中的向量该称标量就得到“标量—向量”了。
6cb30f416eba5ddf95301667d5046cd_1_
0c20ddc1094c57ee8aa4b8e10dba51e_1_
3.向量—标量 Vector-by-scalar identities
95a0835000bd435f2cd05279e73141a_1_
4.标量—矩阵 Scalar-by-matrix identities
01c9afec922b862ce3902e49cec6f67_1_
5.矩阵—标量 Matrix-by-scalar identities
97cad582ac4223e83f595b7de24854f_1_
6.标量—标量 Scalar-by-scalar identities
就当复习
18e715a34e902cd74cf0ce02c5d90ba_1_
92e08209ff4062ee8c107aa7af16b73_1_
其实,这些求导的表格需要记忆,只要在遇到求导的地方对照着查阅一下就OK了。
最后,来解决我遇到的矩阵求导:(yXw)T(yXw)w
注:ω(d+1)×1的列向量,Xm×(d+1)的矩阵,ym×1的列向量.

首先,将式子展开:(yTyyTXwwTXTy+wTXTXw)w yTywyTXwwwTXTyw+wTXTXww

分别对每一项求导:

  • yTyw:yTyw=0
    解释:分子为标量,分母为向量。找到上文2.标量—向量表格中的第一行

8e09f8f0cf4e7ea0b7f50da4157a757_1_
又因为分母是列向量,所以是分母布局,结果为0.

  • yTXww:yTXww=XTy
    解释:分子为标量,分母为列向量。找到2.标量—向量表格中第11行

0b4655c28bea80e151c5f0abaadd035_1_
又因为分母是列向量,所以结果对应为分母布局,应该是第二个XTy.

  • wTXTyw:wTXTyw=(wTXTy)Tw=yTXww=XTy

解释:分子为标量,分母为向量。因为ωTXTy是标量,而标量的转置还是等于本身,所以进行转置后再查表,和上一条一样。(为啥要转置?因为表格中没有一模一样的啊(o_ _)ノ)

  • wTXTXww:wTXTXww=2XTXw

解释:分子为标量,分母为向量。在2.标量—向量表格中第13行找到
2a9490742d07175745e49a9f0cf880c_1_
注:(行向量(1×(d+1)×矩阵((d+1)×(m)× 矩阵(m×(d+1)×列向量((d+1)×1=标量)

又因为分母为列向量,所以符合分母布局,选第二个,结果为2XTXw.

最终,我们得到结果:yTywyTXwwwTXTyw+wTXTXww=0XTyXTy+2XTXw=2XT(Xwy)

令上式结果为零,不考虑矩阵逆的计算等,简单的可以得到:ω=(XTX)1XTy

哈哈哈,以后再也不怕矩阵求导了( •̀ ω •́ )y

参考:
Matrix calculus-Wikipedia
通过一个例子快速上手矩阵求导-CSDN

目录
相关文章
矩阵的转置、加和乘法写入C++
矩阵的转置、加和乘法写入C++
99 0
AcWing 754. 平方矩阵 II
AcWing 754. 平方矩阵 II
111 0
AcWing 754. 平方矩阵 II
AcWing 755. 平方矩阵 III
AcWing 755. 平方矩阵 III
100 0
AcWing 755. 平方矩阵 III
AcWing 753. 平方矩阵 I
AcWing 753. 平方矩阵 I
82 0
AcWing 753. 平方矩阵 I
leetcode题解 - 转置矩阵
给你一个二位整数数组matrix,返回matrix的转置矩阵。 矩阵的转置是指将矩阵的主对角线反转,交换矩阵的行索引与列索引
193 0
leetcode题解 - 转置矩阵
零基础矩阵求导方法
零基础矩阵求导方法
123 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等