前言:花了一个多月参加一个比赛,真的是心力交瘁,累!刚开始接触到深度学习的时候就知道花书了,看过一眼,但当时初见难免对这本算法有些畏惧,如今几个月过去了,对部分的算法也有些许的了解,抽出闲暇时间,休闲读。主要是大牛写的书,希望读的时候能有一个思维的跳跃。我将怀着一颗敬畏之心阅读每一本书。
线性相关和生成子空间
公式引入:
A
x
=
∑
i
x
i
A
:
,
i
Ax = \sum_ix_iA_{:,i}
Ax=i∑xiA:,i
可以将
A
A
A的列向量看作从原点出发的不同放向,确定有多少种方法可以到达向量b,在这个观点下,向量x中的每一个元素表示应该沿这些方向走多远。
这个公式的速写形式与矩阵的乘法不一致,但是合理。这种每个向量乘以对应标量系数之后的和的操作叫做线性组合,即。
∑
i
c
i
v
(
i
)
\sum_ic_iv^{(i)}
i∑civ(i)
一组向量的生成子空间是原始向量线性组合后所能抵达的点的集合。
范数
- LP范数定义:
∣ ∣ x ∣ ∣ p = ( max i ∣ x i ∣ p ) 1 p ||x||_{p} = (\max_i|x_i|^p)^{\frac{1}{p}} ∣∣x∣∣p=(imax∣xi∣p)p1 - L1范数可以简化如下:
∣ ∣ x ∣ ∣ 1 = ∑ i ∣ x i ∣ ||x||_1 = \sum_i|x_i| ∣∣x∣∣1=i∑∣xi∣
当机器学习问题中零和非零元素之间的差异非常重要时,通常会使用L1范数。每当x中某个元素从0增加 ∈ \in ∈的时候对应的L1范数也会正加。
特征值分解
- 公式引入:
A v = λ v Av = \lambda v Av=λv
λ \lambda λ称为特征向量对应的特征值,v是A的特征向量,并不是唯一的,假设A有n个线性无关的特征向量V = { v ( 1 ) , . . . . , v ( n ) } \{v^{(1)}, ...., v^{(n)}\} {v(1),....,v(n)}对应着特征值 λ \lambda λ = { λ 1 , λ 2 , . . . . , λ n } \{\lambda_{1}, \lambda_{2}, ...., \lambda_{n}\} {λ1,λ2,....,λn} 因此A的特征分解可以记作:
A = V d i a g ( λ ) V − 1 A = Vdiag(\lambda)V^{-1} A=Vdiag(λ)V−1
推导过程如下:
A V = λ V A [ v ( 1 ) , . . . . , v ( n ) ] = [ A v ( 1 ) , A v ( 2 ) , . . . , A v ( n ) ] = [ λ 1 v 1 , λ 2 v 2 , λ n v n ] \begin{aligned} AV & = \lambda V \\ A[v^{(1)}, ...., v^{(n)}] & = [Av^{(1)} ,Av^{(2)}, ..., Av^{(n)}] = [\lambda_1v^{1}, \lambda_2v^{2}, \lambda_nv^{n}] \\ \end{aligned} AVA[v(1),....,v(n)]=λV=[Av(1),Av(2),...,Av(n)]=[λ1v1,λ2v2,λnvn]
V d i a g ( λ ) = V d i a g [ λ 1 , λ 2 , λ n ] = [ λ 1 v 1 , λ 2 v 2 , λ n v n ] \begin{aligned} Vdiag(\lambda) & = Vdiag[\lambda_1, \lambda_2, \lambda_n] \end{aligned} = [\lambda_1v^{1}, \lambda_2v^{2}, \lambda_nv^{n}] Vdiag(λ)=Vdiag[λ1,λ2,λn]=[λ1v1,λ2v2,λnvn]
每个实例对称矩阵可以分解成实特征向量和实特征矩阵值:
A = Q Λ Q T A = Q\Lambda Q^T A=QΛQT
其中Q是A的特征向量组成的正交矩阵, Λ \Lambda Λ是对角矩阵。特征值 Λ i , i \Lambda_{i, i} Λi,i对应的特征向量是矩阵Q的第i列,计作 Q : , i {Q_{:,i}} Q:,i,因为Q是正交矩阵,我们可以将A看作沿方向 v ( i ) {v^{(i)}} v(i)延展 λ i \lambda_i λi倍的空间。
所有特征值都是的正数的矩阵称为正定(positive definite);所有特征值都是非负数的矩阵称为半正定(positive semidefinite),所有特征值都是负数的矩阵称为负定。
奇异值分解
将矩阵分解成为奇异向量和奇异值,其应用更加的广泛。
A
=
U
D
V
T
A = UDV^T
A=UDVT
- A: m*m的矩阵
- U: m*m的矩阵
- D: m*n的矩阵(定义为对角矩阵但不一定是方阵)
- T : n*n的矩阵
对角矩阵D对角线上的元素称为矩阵A的奇异值,矩阵U的列向量为左奇异值向量,矩阵V的列向量称为右奇异向量。
A的左奇异向量是 A A T AA^T AAT的特征向量。A的右奇异值向量是 A T A A^TA ATA的右奇异向量。
Moore-Pemrose
对于非方阵而言其逆矩阵没有定义,我们希望通过A的左逆B来求解线性方程。
A
x
=
y
Ax = y
Ax=y
等式两边左乘左逆B后,我们得到:
x
=
B
y
x = By
x=By
当row_x = column_x 时,方程可能有一个解,当A的行数大于列数的时候方程可能是没有解的(约束项比要求的未知数的值要多),当行数下于列数,未知数的数量大于约束项的数量。
A
+
=
l
i
m
α
−
>
0
(
A
T
A
+
α
I
)
−
1
A
T
A^+ = lim_{\alpha->0}(A^TA+\alpha I)^{-1}A^T
A+=limα−>0(ATA+αI)−1AT,当不知道A矩阵的行数列数时,逆矩阵是这么定义的。
计算伪逆的实际算法没有基于这个定义,(一般我们不会用定义来求解问题,当证明时候才会用到):
A
+
=
V
D
+
U
T
A^+ = VD^+U^T
A+=VD+UT
矩阵U,D和V是矩阵A奇异值分解后得到的矩阵。对角矩阵D的违逆
D
+
D^+
D+是其非零元素取导数之后再转置得到的。
当矩阵A的列数多于行数时,使用伪逆求解线性方程是众多可能解中欧几里得范数
∣
∣
x
∣
∣
2
||x||_2
∣∣x∣∣2最下的一个。
当矩阵A的行数多于列数时,可能没有解,在这种情况下,通过违逆得到的x使得Ax和y的欧几里得距离
∣
∣
A
x
−
y
∣
∣
||Ax-y||
∣∣Ax−y∣∣最下。
行列式
行列式记作det(A),是一个将方阵A映射到实数的函数。行列式等于矩阵特征值的乘积。==行列式的绝对值可以用来衡量矩阵参数与矩阵乘法后空间扩大或者缩小了多少。==如果行列式是1,那么这个转换保持空间体积。