行列式: d e t ( A ) det(A) det(A)
n阶矩阵(方阵) A A A的行列式是一个标量,如何计算就不啰嗦了.
1、物理意义
A
n
×
n
A^{n\times n}
An×n表示一个n维空间到n维空间的线性变换:
f
:
R
n
→
R
n
f:R^n\to R^n
f:Rn→Rn, 是一个压缩或拉伸, 即scale操作。而
d
e
t
(
A
)
det(A)
det(A)就是这个缩放尺寸。
(1) 假想原来空间中有一个
n
n
n维的立方体(随便什么形状),其中立方体内的每一个点都经过这个线性变换,变成
n
n
n维空间中的一个新立方体。
(2) 原来立方体有一个体积
V
1
V_{1}
V1,新的立方体也有一个体积
V
2
V_{2}
V2 。
(3) 行列式
d
e
t
(
A
)
det(A)
det(A)是一个数对不对?这个数其实就是
V
2
÷
V
1
V_{2} \div V_{1}
V2÷V1 。
2、性质
d
e
t
(
A
)
×
d
e
t
(
B
)
=
d
e
t
(
A
B
)
det(A)\times det(B)=det(AB)
det(A)×det(B)=det(AB)
奇异矩阵
奇异矩阵就是说该矩阵不是满秩的。
- 首先,看这个矩阵是不是方阵。
- 再看此矩阵的行列式|A|是否等于0,若等于0,称矩阵A为奇异矩阵; 若不等于0,称矩阵A为非奇异矩阵。
- 可逆矩阵和非奇异矩阵是一个意思。
A矩阵不可逆(奇异矩阵)的充要条件:
<=> |A| = 0
<=> A的列(行)向量组线性相关
<=> R(A)<n
<=> AX=0 有非零解
<=> A有特征值0.
<=> A不能表示成初等矩阵的乘积
<=> A的等价标准形不是单位矩阵
矩阵范数
1-范数: ∣ ∣ A ∣ ∣ 1 = max j ∑ i = 1 m ∣ a i , j ∣ ||A||_1 = \max_j\sum_{i=1}^m|a_{i,j}| ∣∣A∣∣1=maxj∑i=1m∣ai,j∣, 列和范数,即所有矩阵列向量绝对值之和的最大值,matlab调用函数norm(A, 1), python调用为np.linalg.norm(A, ord=1) 。
2-范数: ∣ ∣ A ∣ ∣ 2 = λ 1 , λ 1 ||A||_2 = \sqrt{\lambda_1},\lambda_1 ∣∣A∣∣2=λ1,λ1为 A T A A^TA ATA的最大特征值,又称为谱范数matlab调用函数norm(x, 2), python调用为np.linalg.norm(A, ord=2) 。
∞ \infty ∞-范数: ∣ ∣ A ∣ ∣ ∞ = max i ∑ j = 1 N ∣ a i , j ∣ ||A||_\infty = \max_i\sum_{j=1}^N|a_{i,j}| ∣∣A∣∣∞=maxi∑j=1N∣ai,j∣,行和范数,即所有矩阵行向量绝对值之和的最大值,matlab调用函数norm(A, inf), python调用为np.linalg.norm(A, ord=np.inf) 。
F-范数: ∣ ∣ A ∣ ∣ F = ( ∑ i = 1 m ∑ j = 1 n ∣ a i , j ∣ 2 ) 1 2 ||A||_F=\left(\sum_{i=1}^m\sum_{j=1}^n|a_{i,j}|^2\right)^{\frac{1}{2}} ∣∣A∣∣F=(∑i=1m∑j=1n∣ai,j∣2)21,Frobenius范数,即矩阵元素绝对值的平方和再开平方,matlab调用函数norm(A, ’fro‘),python调用为np.linalg.norm(A, ord=‘fro’) 。
核范数: ∣ ∣ A ∣ ∣ ∗ = ∑ i = 1 n λ i , λ i ||A||_* = \sum_{i=1}^{n}\lambda_i, \quad \lambda_i ∣∣A∣∣∗=∑i=1nλi,λi是A的奇异值,即奇异值之和。
条件数
条件数定义为:
c
o
n
d
(
A
)
=
∣
∣
A
∣
∣
∗
∣
∣
A
−
1
∣
∣
cond(A)=||A||*||A^{-1}||
cond(A)=∣∣A∣∣∗∣∣A−1∣∣,
∣
∣
A
∣
∣
||A||
∣∣A∣∣是矩阵的某一种范数。
Condition number是一个矩阵(或者它所描述的线性系统)的稳定性或者敏感度的度量,如果一个矩阵的condition number在1附近,那么它就是well-conditioned的,如果远大于1,那么它就是ill-conditioned的,如果一个系统是ill-conditioned的,它的输出结果就不要太相信了。
这是因为若
y
=
A
x
y=Ax
y=Ax,给
x
x
x一个微小的扰动量
Δ
x
\Delta x
Δx,输出的结果会变化很大,即
y
′
=
A
(
x
+
Δ
x
)
y'=A(x+\Delta x)
y′=A(x+Δx),
∣
y
′
−
y
∣
|y'-y|
∣y′−y∣是一个难以容忍的值。
AdaGrad
'''
AdaGrad
优点:抑制梯度大的维度的下降速度,增大梯度小的维度的下降速度
缺点:随着迭代,步长越来越小,在非凸问题上容易卡在鞍点和局部极小值
'''
grad_squared = 0
while True:
dx = compute_gradient(x)
grad_squared += dx * dx
x -= learning_rate * dx / (np.sqrt(grad_squared) + 1e-7)
对于条件数很大的矩阵,比如一个维度有很大的梯度,另一个维度有很小的梯度,我们除以这个梯度平方的累加和会使梯度小的维度学习率增大,而梯度大的维度学习率降低。
【参考链接】
1、奇异值和特征值
2、计算矩阵/向量的范数:numpy.linalg.norm()
3、cs231n优化算法