Vectors 向量

向量通常用头上有一个箭头的小写字母表示,如x\vec{x}。构成向量的数字叫做分向量(components),分向量的数量等于向量的维度(dimensionality of the vector)。
x=(86753) \vec{x} = \left(\begin{array}{cc} 8\\ 6\\ 7\\ 5\\ 3 \end{array} \right)
上面的例子表示了一个5维的向量,x1=8,x2=6x_1=8,x_2=6,向量也可以水平表示来节省空间,例如x=[8,6,7,5,3]\vec{x}=[8, 6, 7, 5, 3]。普遍来说,一个nn维向量x\vec{x}是一个nn个数字的序列,分向量xix_i表示在第ii维的x\vec{x}的值。

Matrices 矩阵

矩阵和表格很像。矩阵由行(row,横向的列表)和列(column,纵向的列表)组成。
A=[1718554514228301511531010102151228565391325242645211164] A= \left[\begin{array}{cc} 17 & 18 & 5 & 5 & 45 & 1\\ 42 & 28 & 30 & 15 & 115 & 3\\ 10 & 10 & 10 & 21 & 51 & 2\\ 28 & 5 & 65 & 39 & 132 & 5\\ 24 & 26 & 45 & 21 & 116 & 4 \end{array} \right]
矩阵的大小(或者说维度)是由矩阵的行数和列数决定的,上面的矩阵就是一个5×65 \times 6大小的矩阵。通常来说,矩阵用大写字母表示,例如AA,矩阵的行数用mm表示,列数用nn表示。矩阵的元素(entries or elements or components)表示为小写的aa,这个元素aa的位置是由它所在的行数ii和列数jj表示。举例来说,132在矩阵的第4行第5列,a45=132a_{45}=132。在第ii行第jj列的元素表示为aija_{ij},叫做ijentryij-entryijcompnentij-compnent

Matrix Notation 矩阵表示

m,nm,n是两个大于1的整数,令aij,i=1,...,m,j=1,...,na_{ij},i=1,...,m,j=1,...,n,由数字组成的矩阵
A=[a11...a1j...a1n...ai1...aij...ain...am1...amj...amn] A= \left[\begin{array}{cc} a_{11} & ... & a_{1j} & ... & a_{1n}\\ . & & . & & .\\ a_{i1} & ... & a_{ij} & ... & a_{in}\\ . & & . & & .\\ a_{m1} & ... & a_{mj} & ... & a_{mn} \end{array} \right]
是一个m×nm\times n大小的矩阵,aija_{i}j是A的元素。数字序列
A(i)=(ai1,...,a(in)) A_{(i)} = (a_{i1}, ..., a_{(in)})
是矩阵的第ii行,数字序列
A(j)=(a1j,...,a(mj)) A^{(j)} = (a_{1j}, ..., a_{(mj)})
是矩阵的第jj行。
矩阵可以看作是一些向量的集合,一个nn维的向量可以看作是一个1×n1\times n的矩阵。

Vector Terminology 向量术语

Vector Length 向量长度

向量v\vec{v}的长度表示为v|\vec{v}|。它的计算公式为
v=i=1nxi2 |\vec{v}| = \sqrt{\sum_{i=1}^{n}x_i^2}
例如,v=[4,11,8,10]\vec{v}=[4,11,8,10],那么它的长度
v=42+112+82+102=301 |\vec{v}|=\sqrt{4^2+11^2+8^2+10^2}=\sqrt{301}

Vector Addition 向量加法

将两个向量相加,就是把v1\vec{v_1}里面的元素与v2\vec{v_2}里相对应的元素相加,如果
A=[a1,a2,...,an],B=[b1,b2,...,bn]A = [a_1, a_2, ..., a_n], B=[b_1,b_2,...,b_n], 那么A+B=[a1+b1,a2+b2,...,an+bn]A+B=[a_1+b_1, a_2+b_2, ..., a_n+b_n]

Scalar Multiplication 标量乘法

将一个标量(实数)和一个向量相乘,就是把向量里面的每个元素与这个标量相乘。如果dd是一个实数,v\vec{v}代表一个向量v1,v2,...,vnv_1, v_2, ...,v_n,那么dv=[dv1,dv2,...,dvn]d*\vec{v}=[dv_1,dv_2,...,dv_n]

Inner Product 内积

两个向量的内积代表将两个向量的每个对应的元素相乘然后将这些结果相加,表示为(v1,v2)(\vec{v_1}, \vec{v_2})或者v1v2\vec{v_1}\cdot\vec{v_2}(v1,v2)=v1v2=i=1nxiyi(\vec{v_1}, \vec{v_2})=\vec{v_1}\cdot\vec{v_2}=\sum_{i=1}^{n}x_i y_i

Orthogonality 正交

如果两个向量的内积为0,那么这两个向量是正交的。

Normal Vector or Unit Vector 单位向量

向量长度为1的向量可以叫做单位向量。任何向量长度大于0的向量可以通过将每个元素除以向量长度的方法正规化(normalized)为单位向量。
例如:
v=[2,4,1,2]\vec{v} = [2, 4, 1, 2],那么它的长度为
v=22+42+12+22=5 |\vec{v}|=\sqrt{2^2 + 4^2 + 1^2 + 2^2} = 5
那么u=[2/5,4/5,1/5,1/5]\vec{u}=[2/5, 4/5, 1/5, 1/5]是一个单位向量,因为
u=(2/5)2+(4/5)2+(1/5)2+(1/5)2=1 |\vec{u}| = \sqrt{(2/5)^2 + (4/5)^2 + (1/5)^2 + (1/5)^2}=1

Orthonormal Vectors

两个正交的单位向量叫做orthonormal。

Gram-Schmidt Orthonormalization Process

将一组向量变成互相正交的单位向量
例如
A=[121020231110] A= \left[\begin{array}{cc} 1 & 2 & 1\\ 0 & 2 & 0\\ 2 & 3 & 1\\ 1 & 1 & 0 \end{array}\right]
转换为一组正交的单位向量
A=[6626230223136300662623] A= \left[\begin{array}{cc} \frac{\sqrt{6}}{6} & \frac{\sqrt{2}}{6} & \frac{2}{3}\\ 0 & \frac{2\sqrt{2}}{3} & -\frac{1}{3}\\ \frac{\sqrt{6}}{3} & 0 & 0\\ \frac{\sqrt{6}}{6} & -\frac{\sqrt{2}}{6} & -\frac{2}{3} \end{array}\right]
首先,单位化v1=[1,0,2,1]\vec{v_1}=[1,0,2,1]
u1=[16,0,26,16] \vec{u_1}=[\frac{1}{\sqrt{6}}, 0, \frac{2}{\sqrt{6}}, \frac{1}{\sqrt{6}}]
然后,令
w2=v2u1v2u1=[2,2,3,1][16,0,26,16][2,2,3,1][16,0,26,16]=[2,2,3,1]96[16,0,26,16]=[2,2,3,1][32,0,3,32]=[12,2,0,12]\begin{aligned} \vec{w_2}=\vec{v_2}-\vec{u_1}\cdot\vec{v_2}*\vec{u_1}=&[2, 2, 3, 1] - [\frac{1}{\sqrt{6}}, 0, \frac{2}{\sqrt{6}}, \frac{1}{\sqrt{6}}]\cdot[2,2,3,1]*[\frac{1}{\sqrt{6}}, 0, \frac{2}{\sqrt{6}}, \frac{1}{\sqrt{6}}]\\ =&[2,2,3,1]-\frac{9}{\sqrt{6}}*[\frac{1}{\sqrt{6}}, 0, \frac{2}{\sqrt{6}}, \frac{1}{\sqrt{6}}]\\ =&[2,2,3,1]-[\frac{3}{2},0,3,\frac{3}{2}]\\ =&[\frac{1}{2}, 2, 0, -\frac{1}{2}] \end{aligned}
w2\vec{w_2}正规化,得到
v2=[26,223,0,26] \vec{v_2}=[\frac{\sqrt{2}}{6}, \frac{2\sqrt{2}}{3}, 0, -\frac{\sqrt{2}}{6}]
同理可得,
u3=[23,13,0,23] \vec{u_3}=[\frac{2}{3}, -\frac{1}{3}, 0, -\frac{2}{3}]
一般来说,有一组向量,那么
wk=vki=1k1utvkut \vec{w_k}=\vec{v_k}-\sum_{i=1}^{k-1}\vec{u_t}\cdot\vec{v_k}*\vec{u_t}

Matrix Terminology 矩阵术语

Square Matrix 方块矩阵

如果一个矩阵的行数和列数相同,那么这个矩阵是方块矩阵。

Transpose 转置

一个矩阵的转置矩阵是通过将原本的矩阵的每个元素交换行和列来生成的。AA的转置矩阵表示为ATA^T。例如
A=[123456] A= \left[\begin{array}{cc} 1 & 2 & 3\\ 4 & 5 & 6 \end{array}\right]
那么AA的转置矩阵为
AT=[142536] A^T= \left[\begin{array}{cc} 1 & 4\\ 2 & 5\\ 3 & 6 \end{array}\right]

Matrix Multiplication 矩阵乘法

m×nm\times n大小的矩阵AA可以和n×sn\times s大小的矩阵BB相乘得到m×sm\times s大小的矩阵ABAB
矩阵ABAB的每一个位置的值abij=AiBjab_{ij}=\vec{A_i}\cdot\vec{B^j}

Identity Matrix 单位矩阵

一个对角线为1其他都是0的方块矩阵叫做单位矩阵II
AI=A AI=A

Orthogonal Matrix 正交矩阵

如果AAT=ATA=IAA^T=A^TA=I,那么AA就是正交矩阵。

Diagonal Matrix 对角矩阵

如果一个矩阵除了对角线其他都是0,只有对角线有非0值,那么这个矩阵是对角矩阵。

Determinant 行列式

AA的行列式表示为A|A|det(A)\det(A)
A=abcdefghi=a....ef.hib...d.fg.i+c...de.gh.=aefhibdfgi+cdegh=aei+bfg+cdhcegbdiafh\begin{aligned} |A|= \left|\begin{array}{cc} a & b & c\\ d & e & f\\ g & h & i \end{array}\right| =&a \left|\begin{array}{cc} . & . & .\\ . & e & f\\ . & h & i \end{array}\right| -b \left|\begin{array}{cc} . & . & .\\ d & . & f\\ g & . & i \end{array}\right| +c \left|\begin{array}{cc} . & . & .\\ d & e & .\\ g & h & . \end{array}\right| \\ =&a \left|\begin{array}{cc} e & f\\ h & i \end{array}\right| -b \left|\begin{array}{cc} d & f\\ g & i \end{array}\right| +c \left|\begin{array}{cc} d & e\\ g & h \end{array}\right|\\ =&aei+bfg+cdh-ceg-bdi-afh \end{aligned}

Eigenvectors and Eigenvalues 特征向量和特征值

一个能满足下列条件的非零向量叫做特征向量
Av=λv A\vec{v}=\lambda\vec{v}
其中,AA是一个方块矩阵,λ\lambda是一个纯量,v\vec{v}就是特征向量,λ\lambda叫做特征值。
例如,有一个矩阵
A=[2112] A= \left[\begin{array}{cc} 2 & 1\\ 1 & 2 \end{array}\right]
那么
Av=λv=[2112][x1x2]=λ[x1x2] A\vec{v}=\lambda\vec{v}= \left[\begin{array}{cc} 2 & 1\\ 1 & 2 \end{array}\right] \left[\begin{array}{cc} x_1\\ x_2 \end{array}\right] =\lambda \left[\begin{array}{cc} x_1\\ x_2 \end{array}\right]
所以
2x1+x2=λx1x1+2x2=λx2 2x_1+x_2=\lambda x_1\\ x_1+2x_2=\lambda x_2
可以转变为
(2λ)x1+x2=0x1+(2λ)x2=0 (2-\lambda)x_1+x_2=0\\ x_1+(2-\lambda)x_2=0
让向量[x1,x2][x_1,x_2]非0的充分且必要条件是系数矩阵要为0,那么就有
(2λ)11(2λ)=0(2λ)(2λ)11=0λ24λ+3=0(λ3)(λ1)=0λ1=3,λ2=1 \left|\begin{array}{cc} (2-\lambda) & 1\\ 1 & (2-\lambda) \end{array}\right| =0\\ (2-\lambda)(2-\lambda)-1\cdot 1=0\\ \lambda^2-4\lambda+3=0\\ (\lambda-3)(\lambda-1)=0\\ \lambda_1=3,\lambda_2=1
对于λ=3\lambda=3,可得x1=x2x_1=x_2,所以一种可能的特征向量为[1,1][1,1]
对于λ=1\lambda=1,可得x1=x2x_1=-x_2,所以一种可能的特征向量为[1,1][1,-1]

Singular Value Decomposition(SVD)

可以从三个观点来看SVD。

  1. 可以将其看作是将一组互相关联的变量转换为一组互不相关的变量的方法,这个方法可以揭示原本数据项之间的关系。
  2. SVD可以找出变化最剧烈的数据维度,这样就可以用更少的维度来表示原始数据
  3. SVD可以看作是一种压缩数据的方法。

举个例子,下图有一堆点来表示2维的数据,这根线是这些点的最佳线性回归,用一根线(一维)来表示这些点(二维)。

这里的线是一维的个人理解是其中一项值可以用另一项表示,所以只要有一个变数就能确定数据,所以这个线是一维的。

某种意义上,这根线是这笔资料的最佳近似,因为这一条线使各个点到这条线的距离总和最小。如果我们在每个点画一个与这条线垂直的线,并且交点作为原始数据的近似值,那么就可以利用这条回归线作为原始数据的表示,压缩原始数据,并且尽可能的接近于原始数据。
SVD 奇异值分解
如果有这么一条与上图的线垂直的线,如下图。这条线沿着数据的第二维尽可能的捕捉了尽量多的变化,但是它在近似数据方面表现不佳,因为它表现出了较少变化的维度。
SVD 奇异值分解

SVD的基本思想:将高维度、高度变化的数据集压缩到低维度的空间,从而更加清晰表现原数据,并且将原市数据从高度变化到低变化排序。在NLP中大量使用SVD的原因是可以在简单的忽略某些值的情况下大量的减少数据,同时保持原来数据的主要关系。

Example of Full Singular Value Decomposition

SVD基于一个线性代数的定理,该定理表明一个矩阵AA可以分解为三个矩阵的乘积:

  1. 正交矩阵UU
  2. 对角矩阵SS
  3. 正交矩阵UU的转置矩阵VV

表示为
Amn=UmmSmnVnnT A_{mn}=U_{mm}S_{mn}V_{nn}^T
这里的UTU=I,VTV=IU^TU=I,V^TV=IUU的列是AATAA^T的正交特征向量,VV的特征是ATAA^TA的正交特征向量,SS是一个对角矩阵,包含有UU或者VV的特征值的平方根,以降序排列。
下面这个例子仅将其应用于小矩阵来计算它的SVD。
首先,有一个矩阵
A=[311131] A= \left[\begin{array}{cc} 3 & 1 & 1\\ -1 & 3 & 1 \end{array}\right]
为了计算UU,得先计算AATAA^TATA^T
AT=[311311] A^T= \left[\begin{array}{cc} 3 & -1\\ 1 & 3\\ 1 & 1 \end{array}\right]
所以
AAT=[311131][311311]=[111111] AA^T= \left[\begin{array}{cc} 3 & 1 & 1\\ -1 & 3 & 1 \end{array}\right] \left[\begin{array}{cc} 3 & -1\\ 1 & 3\\ 1 & 1 \end{array}\right] =\left[\begin{array}{cc} 11 & 1\\ 1 & 11 \end{array}\right]
接下来,要计算AATAA^T的特征向量和特征值,特征向量的定义为Av=λvA\vec{v}=\lambda\vec{v},带入这个公式可得
[111111][x1x2]=λ[x1x2] \left[\begin{array}{cc} 11 & 1\\ 1 & 11 \end{array}\right] \left[\begin{array}{cc} x_1\\ x_2 \end{array}\right]=\lambda \left[\begin{array}{cc} x_1\\ x_2 \end{array}\right]
重写为方程组
11x1+x2=λx1x1+11x2=λx2 11x_1+x_2 = \lambda x_1 \\ x_1+11x_2 = \lambda x_2
重组,可得
(11λ)x1+x2=0x1+(11λ)x2=0 (11-\lambda)x_1+x_2=0\\ x_1+(11-\lambda)x_2=0
系数矩阵的行列式为0来求解λ\lambda
(11λ)11(11λ)=0 \left|\begin{array}{cc} (11-\lambda) & 1\\ 1 & (11-\lambda) \end{array}\right| = 0
求解可得λ1=10,λ2=12\lambda_1=10, \lambda_2=12。对于λ1=10\lambda_1=10来说,带入可得x1=x2x_1=-x_2,选取[1,1][1, -1]作为特征向量;对于λ2=12\lambda_2=12来说,带入可得x1=x2x_1=x_2,选取[1,1][1, 1]作为特征向量。这两个特征向量作为列向量组成的矩阵,按相应特征值的大小排序。换句话说,特征向量大的那一个作为列1,小的那一个作为列2。
[1111] \left[\begin{array}{cc} 1 & 1\\ 1 & -1 \end{array}\right]
最后,要将这个转换为一组正交的单位向量。首先正规化v1\vec{v_1}
u1=v1v1=[1,1]12+12=[12,12] \vec{u_1} = \frac{\vec{v_1}}{|\vec{v_1}|} = \frac{[1,1]}{\sqrt{1^2+1^2}}= [\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}]
w2=v2u1v2u1=[1,1][12,12][1,1][12,12]=[1,1]0[12,12]=[1,1]\begin{aligned} \vec{w_2}=&\vec{v_2}-\vec{u_1}\cdot\vec{v_2}*\vec{u_1}\\ =&[1, -1] - [\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}]\cdot[1,-1]*[\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}]\\ =&[1, -1] - 0 * [\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}]\\ =&[1, -1] \end{aligned}
正规化可得
u2=w2w2=[12,12] \vec{u_2}=\frac{\vec{w_2}}{|\vec{w_2}|} = [\frac{1}{\sqrt{2}}, -\frac{1}{\sqrt{2}}]
所以
U=[12121212] U= \left[\begin{array}{cc} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{array}\right]
同理,可得
V=[16251302615230160530] V= \left[\begin{array}{cc} \frac{1}{\sqrt{6}} & \frac{2}{\sqrt{5}} & \frac{1}{\sqrt{30}}\\ \frac{2}{\sqrt{6}} & -\frac{1}{\sqrt{5}} & \frac{2}{\sqrt{30}}\\ \frac{1}{\sqrt{6}} & 0 & -\frac{5}{\sqrt{30}} \end{array}\right]
同时,特征值为λ1=0,λ2=10,λ3=12\lambda_1=0, \lambda_2=10, \lambda_3=12
需要的是VV的转置矩阵
VT=[16261625150130230530] V^T= \left[\begin{array}{cc} \frac{1}{\sqrt{6}} & \frac{2}{\sqrt{6}}& \frac{1}{\sqrt{6}}\\ \frac{2}{\sqrt{5}} & -\frac{1}{\sqrt{5}} & 0\\ \frac{1}{\sqrt{30}} & \frac{2}{\sqrt{30}} & -\frac{5}{\sqrt{30}} \end{array}\right]
对于SS来说,按大小顺序将特征值排序塞入到对角线上(这里使用UU或者VV的特征值都可以,因为总是一样)。因为这里做的是Full SVD,所以要在SS后面赛上0列向让它的大小为m×nm\times nUU中的列成为左特征向量,VV中的列称为右特征向量。
S=[12000100] S= \left[\begin{array}{cc} \sqrt{12} & 0 &0\\ 0 & \sqrt{10} & 0 \end{array}\right]
Amn=UmmSmnVnnT=[12121212][12000100][16261625150130230530]=[311131]\begin{aligned} A_{mn}=U_{mm}S_{mn}V_{nn}^{T}=& \left[\begin{array}{cc} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{array}\right] \left[\begin{array}{cc} \sqrt{12} & 0 &0\\ 0 & \sqrt{10} & 0 \end{array}\right] \left[\begin{array}{cc} \frac{1}{\sqrt{6}} & \frac{2}{\sqrt{6}}& \frac{1}{\sqrt{6}}\\ \frac{2}{\sqrt{5}} & -\frac{1}{\sqrt{5}} & 0\\ \frac{1}{\sqrt{30}} & \frac{2}{\sqrt{30}} & -\frac{5}{\sqrt{30}} \end{array}\right]= \left[\begin{array}{cc} 3 & 1 & 1\\ -1 & 3 & 1 \end{array}\right] \end{aligned}

Example of Reduced Singular Value Decomposition

要把一个数据压缩到KK维,做法与上面相同,但是只取VV的前KK列。作为数据的压缩结果。

Reference

https://davetang.org/file/Singular_Value_Decomposition_Tutorial.pdf

相关文章:

  • 2021-05-14
  • 2021-06-12
  • 2021-06-21
猜你喜欢
  • 2021-09-19
  • 2021-09-07
  • 2021-09-04
  • 2021-09-22
相关资源
相似解决方案