DeepLearning 0.1 线性代数基础

DeepLearning 0.1 线性代数基础

基本概念

  • 标量(scalar):一个单独的数
  • 向量(vector):一组有序排列的数,可以看作空间中的点,每个元素是不同坐标轴上的坐标
  • 矩阵(matrix):矩阵是一个二维数组,每个元素由两个索引确定
  • 张量(tensor):坐标超过两维的数组,其元素分布在若干维坐标的规则网络中

标量、向量、矩阵都可看作张量的低维形式

转置(transpose)将矩阵以对角线为轴进行对称操作,定义如下:

(A)i,j=Ai,j

如果矩阵的形状一样,我们可把两个矩阵相加,操作为将对应位置的元素相加;如果矩阵的形状不同,将矩阵在大小不足的维度上进行平移操作使两个矩阵大小一致从而进行加法操作,这种方法称为广播(broadcasting)

矩阵的乘法

矩阵的乘法要求矩阵的A列数必须和矩阵B的行数相等。相乘得到的矩阵形状为行数和A相同,列数和B\mathbf{B}相同。乘法操作定义为

Ci,j=kAi,jBk,j

书写方法为C=AB

矩阵的元素对应乘积或者Hadamard乘积记为AB

两个相同维度的向量xy的点积(dot product)可看作矩阵乘积xy

矩阵乘积服从分配律

A(B+C)=AB+AC

矩阵乘积也服从结合律

A(BC)=(AB)C

矩阵乘积不满足交换律,但是向量的点积满足如下的交换律

xy=yx

单位矩阵和逆阵

单位矩阵In和任意向量和单位矩阵相乘都不会改变矩阵或向量,它的结构很简单:沿主对角线的元素都是1,其他位置的所有元素都是0

矩阵A的逆矩阵记为A1,其定义的矩阵满足如下条件

A1A=In

对于一个线性方程组Ax=b,其解为x=A1b,前提是逆矩阵要存在

线性空间

如果逆阵存在,那么线性方程组有唯一解,但是对于某些b值,有可能不存在解,或者存在无穷多个解我们可以将A\mathbf{A}的列向量看作从远点出发的不同方向的向量,求解即为确定有多少种方法可以到达向量b\mathbf{b},即

Ax=ixiA:,i

这种操作称为线性组合(linear combination),一组向量的生成子空间(span)是原始向量线性组合后所能到达的点的集合

确定Ax=b\mathbf{A}\mathbf{x}=\mathbf{b}是否有解,相当于确定向量b\mathbf{b}是否在A\mathbf{A}的列向量的生成子空间中,这个特殊的生成子空间称作列空间(column space)或值域(range)

如果一组向量中任意一个向量都不能表示成其他向量的线性组合,那么这组向量称为线性无关。如果某个向量是一组向量中某些向量的线性组合,那么我们将这个向量加入这组向量后不会增加这组向量的生成子空间。矩阵的列空间的维数和该矩阵包含的线性无关的向量数相同。

若要使方程有唯一解,矩阵必须是方阵(square),并且所有的列向量都是线性无关的。一个列向量线性相关的方阵被称为奇异的(singular)

范数

范数用来衡量一个向量的大小,Lp 范数定义如下:

xp=(ixip)1p, p, p1

p=2时,L2范数被称为欧几里得范数,它表示从原点出发到向量x\mathbf{x}所确定的点的距离。平方范数在计算上通常更方便,如平方L2L^2范数的导数只取决于对应的元素,而L2L^2范数对每个元素的导数和整个向量有关。但是平方L2L^2范数在远点附近增长十分缓慢,在某些机器学习应用中,区分接近零的元素是很重要的,因此一些情况下会使用L1范数

x1=ixi

当需要统计向量中非零元素的个数时会使用“L0范数”

L范数也被称为最大范数(max norm),定义为像两种具有最大绝对值元素的绝对值:

x=maxixi

使用Frobenius范数可以衡量矩阵的大小:

AF=i,jAi,j2

特殊的矩阵和向量

对角矩阵(diagonal matrix)只在主对角线上含有非零元素,其他位置都是零。用diag(v)表示对角元素由向量v中元素给定的一个对角方阵。对角矩阵在乘法计算中很高效,它的乘法相当于对其他矩阵中的元素进行缩放。同时它的逆阵diag(v)1=diag([1/v1, , 1.vn])

非方阵的对角矩阵没有逆阵,对于一个长方形的对角矩阵而言,和其他矩阵相乘可以对其他矩阵进行缩放,并在缩放后的末尾添加一些零或者去掉一些元素

对称矩阵时转置和自己相等的矩阵,即A=A\mathbf{A}=\mathbf{A}^\top

单位向量(unit vector)是具有单位范数的向量,即x2=1

如果xy=0xy=0,那么向量x\mathbf{x}y\mathbf{y}相互正交。在n维实数空间中,最多由n个范数非零向量相互正交。如果这些向量的范数都为1,那么称它们为标准正交

正交矩阵(orthogonal matrix)指行向量和列向量是分别标准正交的方阵,即A1=A

特征分解

特征分解将矩阵分解为一组特征向量和特征值,方阵A\mathbf{A}特征向量(eigenvector)是指与A\mathbf{A}相乘后相当于对该向量进行缩放的非零向量v\mathbf{v}:

Av=λv

其中标量λ称为这个特征向量对应的特征值(eigenvalue)

如果v\mathbf{v}A\mathbf{A}的特征向量,那么任何缩放后的向量sv也是A\mathbf{A}的特征向量,因此我们只考虑单位特征向量

假设矩阵A\mathbf{A}有n个线性无关的特征向量,对应着n个特征值,我们可以将特征向量连成一个矩阵,使得每一列是一个特征向量V;将特征值连接为一个向量λ,则A\mathbf{A}的特征分解可以记作:

A=Vdiag(λ)V1

每个实对称矩阵都可以分解成实特征向量和实特征值:

A=QΛQ

其中QA\mathbf{A}的特征向量组成的正交矩阵,Λ是对角矩阵。我们可以将A看作沿特征向量延展特征值倍的空间

矩阵是奇异的,当且仅当矩阵含有零特征值。

所有特征值都是正数的矩阵称为正定(positive definite),所有特征值都是非负数的矩阵称为半正定(positive semidifinite)。对于半正定矩阵,它保证x,xAx0,正定矩阵还保证xAx=0x=0

奇异值分解

奇异值分解(sigular value decomposition, SVD)将矩阵分解为奇异向量奇异值。每个实数矩阵都有一个奇异值分解,但不一定有特征分解。

奇异值分解将矩阵A\mathbf{A}分解为三个矩阵的乘积:

A=UDV

假设A\mathbf{A}是一个m×n的矩阵,那么U是一个m×m的矩阵,D是一个m×nm\times n的矩阵,V\mathbf{V}是一个n×n的矩阵

对角矩阵D\mathbf{D}对角线上的元素称为矩阵A\mathbf{A}奇异值,矩阵U\mathbf{U}的列向量称为左奇异向量,矩阵V\mathbf{V}的列向量称为右奇异向量

Moore-Penrose伪逆

Moore-Perose伪逆定义为

A+=limα0(AA+αI)1A

计算伪逆的算法使用下面的公式

A+=VD+U

其中对角矩阵D\mathbf{D}的伪逆D+是其非零元素取倒数之后再转置得到的。

当矩阵A\mathbf{A}的列数多于行数时,使用伪逆球线性方程得到的解是所有可行解中欧几里得范数最小的一个

当矩阵A\mathbf{A}的行数多于列数时,可能没有解,此时通过伪逆得到的x\mathbf{x}使得Axb\mathbf{b}的欧几里得距离最小

迹运算

迹运算返回的是矩阵对角元素之和:

Tr(A)=iAi,j

迹运算提供了另一种描述矩阵Frobenius范数的方式:

\AF=Tr(AA)

对于多个矩阵相乘得到的方阵的迹,如果挪动之后乘积定义依然良好,那么循环置换后矩阵乘积得到的矩阵虽然形状改变了,但是迹运算的结果依然不变

行列式

行列式记作det(A),是一个将方阵A\mathbf{A}映射到实数的函数。行列式等于矩阵特征值的乘积,行列式的绝对值可以用来衡量矩阵参与乘法后空间扩大或者缩小了多少。如果行列式是0,那么空间至少沿着某一个维度完全收缩了;如果行列式是1,那么这个转换保持空间体积不变

主成分分析

主成分分析(principal components analysis, PCA)是一个简单的机器学习算法。

假设在n维实空间中有m个点,我们希望对这些点进行有损压缩,一种方法是使用低维映射。对于每个点,都有一个对应的l维向量,如果l<n这样我们可以使用更少的内存来存储原来的数据。

对于每个点,我们希望找到一个编码函数,根据输入返回编码f(x)=c,我们也希望找到一个解码函数,给定编码重构输入,xg(f(c))

为了简化解码器,我们使用矩阵乘法将编码映射回输入,即g(c)=Dc,其中D是定义解码的矩阵

D\mathbf{D}c可以按比例放大缩小,保持结果不变,为了使结果有唯一解,我们限制D\mathbf{D}中所有的列向量有单位范数,同时彼此正交

对于每一个输入x\mathbf{x},应得到一个最优编码c*。我们使用L2L^2范数描述原始输入向量x\mathbf{x}和重构向量g(c*)的距离,则

c*=argmincxg(c)22

将最小化函数展开化简

c*=argminc2xg(c)+g(c)g(c)

代入g(\mathbf{c})的定义

c*=argminc2xDc+cc

可以通过向量微积分来求解这个最优化问题

Δc(2xDc+cc)=0

c=Dx

因此当我们使用编码函数

f(x)=Dx

这样我们可以定义PCA重构操作

r(x)=g(f(x))=DDx

接下来我们需要挑选编码矩阵\mathbf{D},我们必须最小化所有维数和所有点上的误差矩阵的Frobenius范数:

D*=argminDi,j(xj(i)r(x(i))j)2 subject to DD=Il

首先考虑l=1的情况,将D\mathbf{D}简化为d

d*=argmindix(i)ddx(i)22 subject to d2=1

转置后得到

d*=argmindix(i)x(i)dd22 subject to d2=1

将表示各点的向量堆叠成一个矩阵,记为X,问题可以重新表述为

d*=argmindiXXddτF2 subject to dτd=1

Frobenius范数可以简化为如下形式

argmindiXXddτF2

=argmindTr((XXdd)(XXdd))

=argmind2Tr(XXdd)+Tr(XXdddd)

考虑约束条件

=argmindTr(XXdd)

=argmaxdTr(XXdd)

=argmaxdTr(dXXd)

这个优化问题可以通过特征分解来求解,最优的d\mathbf{d}XX最大特征值对应的特征向量

以上得到了第一个主成分,当我们希望得到主成分的基时,矩阵D\mathbf{D}由前ll个最大的特征值对应的特征向量组成

发表评论