美文网首页技术心得
【整理】线性代数

【整理】线性代数

作者: Eric_i33 | 来源:发表于2018-07-17 20:02 被阅读0次

1、矩阵就是映射

空间A的任何一个点a一定是3个维度吧,设为a={a1,a2,a3}。空间B的任何一个点一定是2个维度吧,设为b={b1,b2}。那么如何将空间A的a点映射成空间B的某点b呢?只需要建造一个叫做矩阵的桥梁,这个桥梁只需要满足维度是3*2就可以了,也就是3行2列。那么作为1*3维度的行向量a,乘以矩阵C后就成了1*2维度的行向量,也就是B空间的一个点。而不同的3*2矩阵就对应着不同的映射规则,会将A空间的同一个点a映射到B空间的不同位置。但是它们都是连通A与B的桥梁。

矩阵的加法:映射规则的调整矩阵A+矩阵B就可以看作,用B中各个元素的值去调整A这个映射规则!

矩阵的乘法:线性映射的叠加。比如,我们已知如何从X空间映射到Z空间了,也知道如何从Z空间映射到Y空间了。然而,恰好我们的机器学习样本就是在X空间!样本的类别恰好就在Y空间!怎么将样本映射成标签呢?没错,X映射到Z(记为X->Z)的规则就是一个矩阵A,Z->Y就是一个矩阵B,所以若要X->Y,那么就是A*B的结果。这就是矩阵乘法。

矩阵逆运算:映射的逆映射。比如在一个机器翻译问题中,源语言在X空间,目标语言在Y空间,我们通过训练知道了如何从X空间映射成Y空间了,就是通过训练得到的矩阵A。那么我们如何反向翻译呢?那就是求A的逆矩阵就可以了,完全无需再反向重新训练。

【零矩阵】

概念:所有元素都是0的矩阵

特性:将任何空间映射成原点

【单位矩阵】

概念:对角元素都是1,其余元素都是0的方阵

特性:将空间映射成自己

【对角矩阵】

概念:非对角元素全为0的矩阵

特性:将原空间的各个坐标轴进行不同尺度的拉伸或挤压

总结一下。矩阵的本质就是描述空间的映射,因此它就可以看作一个函数,接收一个空间作为输入,输出一个映射后的新空间。


2、方阵分解

一个矩阵(严格来说是方阵),或者说一个线性映射,完全可以用它的全部特征向量及其对应的特征值去描述。

有了对特征值和特征向量的这一层理解,我们当然很容易继续联想到:

当一个矩阵的特征值中包含0时,就表示要将一个“坐标轴”直接毁灭!(将一个坐标轴映射回原点。这个“坐标轴”就是这个0特征值所对应的特征向量(所描述的方向));

同理,负数特征值就表示将它所对应的特征向量所在的坐标轴反转。因此,-1就表示将该坐标轴反转,但是不拉伸也不压缩。(-1,0)表示反转且压缩,(-∞,-1)表示反转且拉伸。

3、SVD分解

对于维度为m*n且m≠n的矩阵A,我们可以将其分解为U*∑*V的形式,其中U的维度为m*m,∑的维度为m*n,V的维度是n*n,这样让U依然代表着“特征向量”的意思,V也代表“特征向量”的意思,∑就代表“特征值”的意思,可以吗?

在计算U*∑的时候,是拿U中的每一去乘以特征值矩阵,因此U中的每一就是一个特征向量(回顾一下,每个特征向量对应一个特征值。还不理解的童鞋用笔和纸体会一下),但是到了(U*∑)的结果去乘V的时候,是拿V的每一列去跟之前的结果相乘,因此显然V的每一行是一个特征向量,所以这里为了避免分解后在使用U和V时发生歧义,我们用U*∑*VT来描述分解的结果,这样U和V就都是一一个“特征向量”啦。

这里,U里的向量我们定义为左奇异向量,V里的向量我们定义为右奇异向量,它们的意义就暂且理解为跟特征向量差不多。显然,∑就可以理解为跟之前的特征值矩阵意义差不多啦,因此∑的对角线上的值就相当于之前的特征值,这里叫做奇异值,对角线之外的值也跟以前一样,全为0。这个分解过程就叫奇异值分解

好啦,定义好了,那么如何将一个m*n的矩阵分解成这三个奇异矩阵呢?

思路 计算 V 计算 U 计算 sigma,或直接用特征值开根号

奇异值分解的这个性质在非常多的机器学习场合下可以发挥重要的作用。

比如我们的机器学习任务中,由专家选取或者深度学习的前几层学习到了10000个特征,而这10000个特征完全有可能是高度冗余的,(比如某一维度x1与另一维度x2恒满足x1=2*x2,这时就完全可以删掉其中一个维度,因为一个维度的值完全可以由另一维度计算出来,因此删掉后不会损失任何信息),那么我们想要除掉其中的冗余特征,或者说我们仅仅想用100个特征去描述这10000个特征所描述的东西,怎么办呢?

用奇异值分解就会非常简单。假如我们有9000个样本,那么样本及其对应的特征就组成了一个9000*10000的矩阵X,那么我们用U*∑*VT去逼近X,并且将U限制为9000*100,∑为100*100,VT为100*10000(标准的、一定无信息损耗的奇异值分解是U为9000*9000,∑为9000*10000,VT为10000*10000),这时运用奇异值分解后,就得到了9000*100的左奇异矩阵,显然这就代表着用100维的新特征去重新描述这9000个样本。而右奇异矩阵就代表着如何将100维的新特征映射回10000维的旧特征。显然,奇异值矩阵中的每个奇异值就代表着每个新特征对于描述样本的重要性啦。

这样就成功的完成了降维的操作。

当然啦,实际中,我们往往不知道降到多少维是性价比最高的,因此,我们可以选择保留旧特征描述的99%的信息量。

这时,比如10000维的旧特征,通过前面所述的计算和排序奇异值,算出保留99%的信息量(即前n个奇异值之和除以总奇异值之和大于99%)时需要保留前多少个奇异值,比如算出来的值是前87个大奇异值,那么我们就可以将原来10000维的旧特征空间用仅有87维的新特征空间描述啦~而仅仅会丢失1%的信息量哦。

4、矩阵范数

向量x的p范数表示如下:

由此,p=1、p=2就分别代表1范数和2范数

二范数:用来度量向量长度,用来度量向量空间中两个点的距离

L2正则项控制模型过拟合:

首先我们把model的参数设为向量w=[w1,w2,...,wn]。这个w是什么呢?是model参数,更是特征的权重。更加具体点说,每个参数,决定了每个特征对决定样本所属类别的重要程度。那么用参数向量的二范数做正则项时即(忽略归一化的问题):

而我们训练的过程就是最小化loss函数的过程,因此一部分任务就是尽可能的减小Reg的值。那么怎样的w值才算是符合理想要求的值呢?比如维度n=5的情况,

1. 令w1=w2=w3=w4=w5=2

2. 令w1=10,w2=w3=w4=w5=0

1和2相比,哪个的Reg更小呢?显然前者的值只有sqrt(20),而后者的值高达sqrt(100)!虽然1和2的情况下所有w的值加起来都等于10。

由这个例子可以看出,如果我们有10张用于决定类别的票分给各个特征,那么给每个特征分两张票带来的回报要远大于把这10张票分给一个特征!所以二范数会削弱强特征,增强弱特征,以共产主义为目标!反对资本主义!

这种劫富济贫的方式有什么好处呢?

举个栗子。假设我们要做文本的情感分类(判断一段文本是正面评价还是负面评价),将每个词作为一个特征(出现该词代表值为1,否则值为0)。可想而知,有一些词本身就带了很强的情感极性,比如“不好”、“不满意”、“惊喜”等。而大部分词是弱极性的,但是多个弱极性的词同时出现的时候就会产生很强的情感极性。比如“总体”“来说”“还是”“可以”在文本中同时出现后基本就奠定了这篇文本的总体极性是正面的,哪怕文本中出现了(“待机”)“很烂”这种强负面词。

因此在二范数的约束下,w这个随机变量的分布会趋向于均值 mu = 0 的正态分布。

有人说,诶?那高斯分布的话,那也有极少的特征的值特别大呀~为什么没有被削弱呢?这些特征当然就是超强特征啦,比如“力荐”这个特征一旦出现,基本整个文本的情感极性就确定了,其他的弱特征是很难与之对抗的。所以最小化二范数会让随机变量的采样点组成的向量趋向于期望 = 0 的正态分布。

所以,若没有二范数的约束,弱特征会被强特征剥削,最终训练完后各个特征的权重很有可能是这样的:

这样会带来什么问题呢?这样就会导致模型过分依赖强特征。

首先,这样的model拿到测试集上去后,如果某个样本没有任何强特征,导致该样本的特征的权重几乎都是0,也就是这些特征都是被认为的中性词,那么就会导致这个样本的分类很随机了,哪怕这个样本的弱特征很多而且足以反映情感极性,然而学习的过程中这些弱特征被认为没有用而被当成了噪声,或者正值或者负值,那就悲剧啦。而在二范数约束带来的正态分布下,弱特征们就会有条不紊的慢慢积累起很确定的情感极性完成置信度很高的分类过程。

其次,假如测试集中的某个样本中出现了一个强特征词,就会直接导致整篇文章的情感极性随了这个强特征,哪怕这个样本的这个强特征词之外都是弱弱的相反极性词也无力挽救了而在二范数约束带来的正态分布下,手中多少也有点票的弱特征们就会聚沙成塔,合力打倒那个强特征的噪声。

相关文章

网友评论

    本文标题:【整理】线性代数

    本文链接:https://www.haomeiwen.com/subject/bjmgpftx.html