0
点赞
收藏
分享

微信扫一扫

【机器学习中的矩阵求导】(七)矩阵向量化复习


学习总结

(1)矩阵乘法。

(2)矩阵转置。× 的交换矩阵:

(3)逐元素乘法。其中 × 的对角矩阵,元素也是按照A矩阵向量化后的元素排列。

文章目录

  • ​​学习总结​​
  • ​​一、几个梯度的栗子​​
  • ​​1.1 迹函数相对于矩阵的梯度​​
  • ​​1.2 行列式相对于矩阵的梯度​​
  • ​​二、实值函数相对于实向量的梯度​​
  • ​​2.1 实值标量函数对向量的梯度​​
  • ​​2.2 实值向量函数对向量的梯度​​
  • ​​2.3 简单练习​​
  • ​​三、矩阵向量化vec​​
  • ​​3.1 向量化定义​​
  • ​​3.2 向量化算子性质​​
  • ​​四、Python实现Kronecker积等​​
  • ​​Reference​​

一、几个梯度的栗子

1.1 迹函数相对于矩阵的梯度

迹函数对矩阵求导:

【机器学习中的矩阵求导】(七)矩阵向量化复习_html_11

1.2 行列式相对于矩阵的梯度

矩阵的行列式对矩阵求导:

【机器学习中的矩阵求导】(七)矩阵向量化复习_向量化_12

二、实值函数相对于实向量的梯度

2.1 实值标量函数对向量的梯度

其实就是标量函数对向量的求导,在之前我们用过定义法求导:
寻找较复杂的实值函数求导更方便的方法,不是每次都先针对任意一个分量,再进行排列。

标量对向量求导的基本法则(PS:和我们以前标量对标量求导的法则类似):

  • 常量对向量的求导结果为0
  • 线性法则:如果都是实值函数,为常数,则:
  • 乘法法则:如果都是实值函数,则:如果不是实值函数,则不能这样用乘法法则
  • 除法法则:如果都是实值函数,且,则:

PS:标量对矩阵求导,也有类似上面的法则。

简单来说,标量函数对向量的求导:

  • 以列向量为自变量的标量函数,其对于自变量的梯度仍然为一阶数相同的列向量
  • 梯度的每个分量代表着函数在该分量方向上的变化率。

2.2 实值向量函数对向量的梯度

即向量对向量求导。

(1)先回顾之前的定义法:
是向量。

  • 为n×m矩阵
  • 为m维向量;为n维向量
  • 先分别求【矩阵的第行和向量的内积】对向量的第分量求导,定义法:
  • 所以结果是矩阵位置的值,排列组成的结果,而非

(2)回到这里,首先已知:

实值向量函数对于实向量的梯度为:

  • 向量函数对于向量的求导,相当于向量函数中的每一个分量函数对向量求导。
  • 行向量函数对列向量自变量求导形成矩阵;
  • 列向量函数对行向量自变量求导也可以形成矩阵。

2.3 简单练习

【机器学习中的矩阵求导】(七)矩阵向量化复习_标量_39

三、矩阵向量化vec

3.1 向量化定义

向量化算子vec很常用,设,则按照每列拼接起来组成的向量:

3.2 向量化算子性质

(1)线性性质。很好理解,这里vec是线性算子
(2)矩阵乘法。后2个是特例,故记住第一个即可

(3)矩阵转置。× 的交换矩阵:

(4)逐元素乘法。其中 × 的对角矩阵,元素也是按照A矩阵向量化后的元素排列。

四、Python实现Kronecker积等

可以参考numpy的官方文档。

from numpy import dot,cross,kron
# cross ref:https://docs.scipy.org/doc/numpy/reference/generated/numpy.cross.html#numpy.cross
# dot,kron ref:https://docs.scipy.org/doc/numpy/reference/routines.linalg.html
from scipy.linalg import hadamard
# hadamard ref:https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.hadamard.html#scipy.linalg.hadamard

这里举个求Kronecker积和向量的外积的栗子:

import numpy as np
a = np.array([[1], [2]])
b = np.array([[3], [4]])
kron1 = np.kron(a, b)
outer = np.outer(a, b)
kron2 = np.kron(a, b.T)

结果如下,可以发现Kronecker积结果是,a的1乘b向量,a的2乘b向量,然后两个向量拼接起来。并且如果a向量和b向量的转置进行Kronecker积,其结果和a和b做向量外积​​outer​​结果相同。

复习:​​K=kron(A,B)​​,获得 A 和 B 的 Kronecker 张量积。如果 A 是 m×n 矩阵,而 B 是 p×q 矩阵,则 kron(A,B) 是通过获取 A 元素与矩阵 B 元素之间的所有可能积而形成的一个 mp×nq 矩阵

【机器学习中的矩阵求导】(七)矩阵向量化复习_向量化_54

【外积】即两个向量的向量积,即两个向量的组成的平面的法向量。

符号表示:a× b

向量积的大小:|a|·|b|·sin<a,b>.

栗子:(x1,y1,z1)×(x2,y2,z2)=(y1z2-y2z1,z1x2-z2x1,x1y2-x2y1)

【机器学习中的矩阵求导】(七)矩阵向量化复习_html_55

Reference

(1)https://numpy.org/doc/stable/reference/generated/numpy.kron.html#numpy.kron
(2)​​​numpy中dot()、outer()、multiply()以及matmul()的区别​​


举报

相关推荐

0 条评论