学习总结
(1)矩阵乘法。
(2)矩阵转置。是
×
的交换矩阵:
(3)逐元素乘法。其中 是
×
的对角矩阵,元素也是按照A矩阵向量化后的元素排列。
文章目录
- 学习总结
- 一、几个梯度的栗子
- 1.1 迹函数相对于矩阵的梯度
- 1.2 行列式相对于矩阵的梯度
- 二、实值函数相对于实向量的梯度
- 2.1 实值标量函数对向量的梯度
- 2.2 实值向量函数对向量的梯度
- 2.3 简单练习
- 三、矩阵向量化vec
- 3.1 向量化定义
- 3.2 向量化算子性质
- 四、Python实现Kronecker积等
- Reference
一、几个梯度的栗子
1.1 迹函数相对于矩阵的梯度
迹函数对矩阵求导:
1.2 行列式相对于矩阵的梯度
矩阵的行列式对矩阵求导:
二、实值函数相对于实向量的梯度
2.1 实值标量函数对向量的梯度
其实就是标量函数对向量的求导,在之前我们用过定义法求导:
寻找较复杂的实值函数求导更方便的方法,不是每次都先针对任意一个分量,再进行排列。
标量对向量求导的基本法则(PS:和我们以前标量对标量求导的法则类似):
- 常量对向量的求导结果为0
- 线性法则:如果
、
都是实值函数,
、
为常数,则:
- 乘法法则:如果
、
都是实值函数,则:
如果不是实值函数,则不能这样用乘法法则。
- 除法法则:如果
、
都是实值函数,且
,则:
PS:标量对矩阵求导,也有类似上面的法则。
简单来说,标量函数对向量的求导:
- 以列向量为自变量的标量函数,其对于自变量的梯度仍然为一阶数相同的列向量
- 梯度的每个分量代表着函数在该分量方向上的变化率。
2.2 实值向量函数对向量的梯度
即向量对向量求导。
(1)先回顾之前的定义法:是向量。
为n×m矩阵
为m维向量;
为n维向量
- 先分别求【矩阵的第
行和向量的内积】对向量的第
分量求导,定义法:
- 所以结果是矩阵
的
位置的值,排列组成的结果
,而非
。
(2)回到这里,首先已知:
实值向量函数对于实向量的梯度为:
- 向量函数对于向量的求导,相当于向量函数中的每一个分量函数对向量求导。
- 行向量函数对列向量自变量求导形成矩阵;
- 列向量函数对行向量自变量求导也可以形成矩阵。
2.3 简单练习
三、矩阵向量化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 矩阵。
【外积】即两个向量的向量积,即两个向量的组成的平面的法向量。
符号表示:a× b
向量积的大小:|a|·|b|·sin<a,b>.
栗子:(x1,y1,z1)×(x2,y2,z2)=(y1z2-y2z1,z1x2-z2x1,x1y2-x2y1)
Reference
(1)https://numpy.org/doc/stable/reference/generated/numpy.kron.html#numpy.kron
(2)numpy中dot()、outer()、multiply()以及matmul()的区别