2.1 标量、向量、矩阵和张量
标量(scalar):一个数
向量(vector):一列数
矩阵(matrix):二维数组
张量(tensor):多维数组(n>=3)
转置(transpose):矩阵的转置是以对角线为轴的镜像,标量的转置等于它本身。
广播(broadcasting):
import numpy as np
###1###
a = np.array([0, 1, 2])
b = np.array([5, 5, 5])
a + b #---> [5,6,7],这个容易理解
###2###
a + 5 #--> [5,6,7],5被转化为[5,5,5](其实这种复制并没有发生,为了便于理解)
###3###
M = np.ones((3, 3))
"""
M
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
"""
M+a #-->a broadcast到第2,3行,与M的shape匹配
###4###
a = np.arange(3) #shape:(3,)
b = np.arange(3)[:, np.newaxis] #shape:(3, 1)
print(a)
print(b)
"""
[0 1 2]
[[0]
[1]
[2]]
"""
a+b #a broadcast到第2,3行,b broadcast到第2,3列,相加得到
"""
array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4]]),shape:(3,3)
"""
broadcasting rules:
1.两个数组维数不同,则维数较小的数组的shape将在其前侧或左侧进行填充
2.两个数组的shape不匹配但有维度等于1,则维度中形状等于1的数组将被拉伸进行匹配。
3.两个数组的shape不匹配且不存在维度为1,则报错
###1###
M = np.ones((2, 3))
a = np.arange(3)
M+a
# M.shape = (2, 3)
# a.shape = (3,)--rule 1--> (1,3) --rule 2--> (2,3)
###2###
a = np.arange(3).reshape((3, 1))
b = np.arange(3)
a+b
# a.shape = (3, 1) --rule 2-->(3,3)
# b.shape = (3,)--rule 1-->(1,3)--rule 2-->(3,3)
###3###
M = np.ones((3, 2))
a = np.arange(3)
M + a
"""ValueError: operands could not be broadcast together with shapes (3,2) (3,) """
# M.shape = (3, 2)
# a.shape = (3,)--rule 1-->(1,3)--rule 2-->(3,3)
"""如果希望数组a的shape是在其他位置进行填充,则可使用np.newaxis"""
M + a[:, np.newaxis]
2.2 矩阵和向量相乘
点积(dot product):C = AB.
Hadamard 乘积(Hadamard product):C = A ⊙ B
2.3 单位矩阵和逆矩阵
单位矩阵(identity matrix):所有沿主对角线的元素都是 1,而所有其他位置的元素都是 0。
逆矩阵(matrix inversion):A的矩阵逆记作:
满足:
2.4 线性相关和生成子空间
列空间(column space):由A的各列张成的Rm的子空间称为A的列空间
线性相关(linear dependence):某个向量是一组向量中某些向量的线性组合
线性无关(linearly independent):一组向量中的任意一个向量都不能表示成其他向量的线性组合
方阵(square):m = n,并且所有列向量都是线性无关的。
一个列向量线性相关的方阵被称为奇异的(singular)。
2.5 范数
Lp 范数定义如下:
范数是满足下列性质的任意函数:
• f(x)=0⇒x=0
• f (x + y) ≤ f (x) + f (y) ( 三角不等式(triangle inequality))
• ∀α ∈ R, f(αx) = |α|f(x)
当 p = 2 时,L2 范数被称为 欧几里得范数(Euclidean norm),也可记做||x||。它表示从原点 出发到向量 x 确定的点的欧几里得距离。
L1范数:
L0范数:非零元素的个数。但是这个术语在数学意义上是不对的,向量的非零元素的数目不是范数,因为对向量缩放 α 倍不会改变该向量非零元素的数目
L∞ 范数,也被称为 最大范数(max norm),表示向量中具有最大幅值的元素的绝对值: ||x||∞ =max|xi|.
Frobenius 范数(Frobenius norm):衡量矩阵的大小
L0,L1,L2范数
- L0的求解是NP-hard问题
- 机器学习中,使用L0和L1范数可以求得稀疏解(易于特征筛选,模型的可解释性变强),L2范数则会获得稠密解
- L2范数越小,可以使得w的每个元素都很小,接近于0,但L1范数不同的是他不会让它等于0而是接近于0。w越小,模型越简单,越不容易产生过拟合。
2.6 特殊类型的矩阵和向量
对角矩阵(diagonal matrix)只在主对角线上含有非零元素,其他位置都是零。
对称矩阵(symmetric matrix)是转置和自己相等的矩阵
单位向量(unit vector)是具有 单位范数(unit norm)的向量:
如果 x⊤y = 0,那么向量 x 和向量 y 互相正交(orthogonal)。
如果这些向量不仅互相正交,并且范数都为 1,那么我们称它们是标准正交(orthonormal)。
正交矩阵(orthogonal matrix)是指行向量和列向量是分别标准正交的方阵:
2.7 特征分解
特征分解(eigendecomposition):将矩阵分解成一组特征向量和特征值。
方阵 A的特征向量(eigenvector)是指与 A 相乘后相当于对该向量进行缩放 的非零向量 v:Av = λv.标量λ被称为这个特征向量对应的特征值(eigenvalue)。
不是每一个矩阵都可以分解成特征值和特征向量。在某些情况下,特征分解存在,但是会涉及到复数,而非实数。
假设矩阵A有n个线性无关的特征向量 {v(1),...,v(n)},对应着特征值 {λ1,...,λn}。
记V = [v(1), . . . , v(n)]. 类似地,我们也可以将特征值连接成一个向量 λ = [λ1, . . . , λn]⊤。 因此A的特征分解(eigendecomposition)可以记作:
每个实对称矩阵都可以分解成实特征向量和实特征值:
所有特征值都是正数的矩阵被称为正定(positive definite);所有特征值都是非负数的矩阵被称为半正定(positive semidefinite)。同样地,所有特征值都是负数的矩阵被称为负定(negative definite);
2.8 奇异值分解
奇异值分解(singular value decomposition, SVD):
假设 A 是一个 m×n 的矩阵,那么 U 是一个 m×m 的矩阵,D 是一个 m×n 的矩阵,V 是一个 n × n 矩阵。矩阵 U 和 V 都被定义为正 交矩阵,而矩阵 D 被定义为对角矩阵。注意,矩阵 D 不一定是方阵。
SVD 最有用的一个性质可能是拓展矩阵求逆到非方矩阵上。
2.9 Moore-Penrose 伪逆
Moore-Penrose 伪逆(Moore-Penrose pseudoinverse):矩阵 A 的伪逆定义为:
计算伪逆的实际算法没有基于这个定义,而是使用下面的公式:
其中,矩阵 U,D 和 V 是矩阵 A奇异值分解后得到的矩阵。对角矩阵 D 的伪逆
D+ 是其非零元素取倒数之后再转置得到的。
2.10 迹运算
迹运算返回的是矩阵对角元素的和:
Frobenius 范数(Frobenius norm):
2.11 行列式
行列式,记作det(A),是一个将方阵 A 映射到实数的函数。行列式等于矩阵特征值的乘积。行列式的绝对值可以用来衡量矩阵参与矩阵乘法后空间扩大或者缩小了多少。如果行列式是 0,那么空间至少沿着某一维完全收缩了,使其失去了所有的体积。如果行列式是 1,那么这个转换保持空间体积不变。
2.12 实例:主成分分析
主成分分析(principal components analysis, PCA):
假设在 Rn 空间中我们有 m 个点 {x(1), . . . , x(m)},我们希望对这些点进行有损压缩。
一种编码这些点的方式是用低维表示。每个点 x(i) ∈ Rn,会有一个对应的编码向量 c(i) ∈ Rl(其中l<n)
给定编码函数f(x),使得f(x) = c;给定解码函数,使得x ≈ g(f(x))。
- 为了简化解码器,我们使用矩阵乘法将编码映射回 Rn,即 g(c) = Dc,其中 D ∈ Rn×l 是定义解码的矩阵
- D 的列向量彼此正交(除非 l = n,否则严格意义上 D 不是一个 正交矩阵)
定义目标函数:最小化原始输入向量 x 和重构向量 g(c∗) 之间的距离。我们使用范数来衡量它们之间的距离(L2 范数):
求导得到:则记
求解编码矩阵D,由于用相同的矩阵 D 对所有点进行解码,即最小化所有x与c之间的误差,需使用Frobenius 范数,得到
当l=1时,此时D为一维列向量,将D简化为d,得到:
记
得到:
最优的 d 是 X⊤X 最大特征值对应的特征向量。
以上推导特定于 l = 1 的情况,仅得到了第一个主成分。更一般地,当我们希望得到主成分的基时,矩阵 D 由前 l 个最大的特征值对应的特征向量组成。
附1:
矩阵求导:(参考:https://github.com/soloice/Matrix_Derivatives)
- 变量多次出现的求导法则:若某个变量在函数表达式中多次出现,可以单独计算函数对⾃变量的每一次出现的导数,再把结果加起来。
f(x)=(2x+1)x+x^2
=> f=(2x_1+1)x_2+x_3^2
=> ∇f=2x_2+2x_1+1+2x_3
=> 6x+1- 向量求导的链式法则
- 实值函数对向量求导
- 向量量数乘求导公式
- 矩阵迹求导
- 矩阵求导的链式法则
设y=f(U),U=G(x),则:- 线性变换的导数
设
则:
附2:
推导1:线性方程组Ax=b的最⼩二乘解
推导2:F范数的求导公式推导
推导3:
学习仿射变换