对于线性代数、特征空间、特征提取、深度学习的一些深夜思考

今天女票要毕业论文送审,昨晚熬夜。我们平时一般睡眠时间相近,我也就想着我也稍微晚点睡吧(打算一点左右睡)。结果从思考矩阵乘法的意义开始,停不下来。一直想到了两点多,三点多接近四点才睡着。算是昨晚独自思考没有查书。对于特征向量的知识还是17年考研时留下的记忆,当然我可以很肯定的说,我当时数学学得很好哈哈,也是根据当时的一些理解引申出来的一些拙见吧。
这一年多自己还是有点贪玩,没有做出我自己应该有的成果,非常后悔。但我不会像我女票那么消极哈哈,我会努力补救。数学还是太重要了。学好数学才能对机器学习与深度学习有更深的理解,而不是把深度学习研究当成一个画画的工作,深度学习应该以数学为指导。

1)特征空间

  • 每个矩阵都会有一组特征向量同时配有对应的特征值。

A v = λ v    ( 1 ) A v=\lambda v \ \ (1) Av=λv  (1)

上式中的 v v v为矩阵 A A A(这里假设A是一个满秩的n阶方阵。不满秩类似,只不过一个向量乘以一个不满秩的矩阵以后维度会压缩,起到特征降维的作用)的一个特征向量,其中 λ \lambda λ v v v对应的特征值。

我们可以将A的n列(行)看成是n种特征, A i , j A_{i,j} Ai,j可以理解成第 i i i种特征与 j j j特征的关联度(在PCA中就是第 i i i种特征与 j j j特征的协方差)。那么A可以分解成向量的组合 A = [ a 1 , a 2 , … , a n ] T A=\left[a_{1}, a_{2}, \dots, a_{n}\right]^T A=[a1,a2,,an]T a i a_i ai对应第 i i i行的向量。以下的一切讨论基于 A A A是一个实对称阵

A中的每列或者每列都代表一个向量,任意 v i ′ v'_i vi都是特征向量 [ v 1 , v 2 , . . . , v n ] [v_1,v_2,...,v_n] [v1,v2,...,vn]的线性组合。那么向量 a i a_i ai可以分解成特征向量线性组合。我们知道,列向量可以被特征向量表征,在实对称阵中第i行向量跟和第i列向量是一样的,因此行向量也可以看成是特征向量的线性组合。
a i = w i , 1 v 1 + w i , 2 v 2 + ⋯ + w i , n v n    ( 2 ) a_{i}=w_{i,1} v_{1}+w_{i,2} v_{2}+\cdots+w_{i,n} v_{n} \ \ (2) ai=wi,1v1+wi,2v2++wi,nvn  (2)
因此
A v j = [ a 1 , a 2 , … , a n ] T v j = [ a 1 v j , a 2 v j , … , a n v j ] T a i v j = ( w i , 1 v 1 + w i , 2 v 2 + ⋯ + w i , n v n ) v j = w i , 1 v 1 v j + w i , 2 v 2 v j + ⋯ + w i , j v j v j + ⋯ + w i , n v n v j = w i , j v j v j = w i , j = λ j v j i     ( 3 ) A v_j=\left[a_{1}, a_{2}, \dots, a_{n}\right]^Tv_j=\left[a_{1}v_j, a_{2}v_j, \dots, a_{n}v_j\right]^T \\ a_iv_j=(w_{i,1} v_{1}+w_{i,2} v_{2}+\cdots+w_{i,n} v_{n})v_j=w_{i,1} v_{1}v_j+w_{i,2} v_{2}v_j+\cdots+w_{i,j} v_{j}v_j+\cdots+w_{i,n} v_{n}v_j\\=w_{i,j} v_{j}v_j=w_{i,j}=\lambda_jv_j^i \ \ \ (3) Avj=[a1,a2,,an]Tvj=[a1vj,a2vj,,anvj]Taivj=(wi,1v1+wi,2v2++wi,nvn)vj=wi,1v1vj+wi,2v2vj++wi,jvjvj++wi,nvnvj=wi,jvjvj=wi,j=λjvji   (3)

注意上边的 a i a_i ai是一个行列量,而 v v v是列向量。由于A中的向量都是特征向量的线性组合,而特征向量(特征向量内积为1)之间都是正交的。这意味着 v i v_i vi左乘A以后,相当于只与自己方向一致的特征向量起了作用。 a i v j a_iv_j aivj的结果是 v j i v_j^i vji(也就是 v j v_j vj的第 i i i个元素)的 λ j \lambda_j λj倍,其中 λ j \lambda_j λj为特征向量 v j v_j vj对应的特征值。至于为什么 w i , j = λ j v j i w_{i,j}=\lambda_jv_j^i wi,j=λjvji,每个行向量跟 v j v_j vj的对应分量之比都相等。可以从列向量的角度去思考,第i行是n个列向量的第i个元素的线性组合,这n个列向量相加也是特征向量的线性组合,与特征相乘刚好只留下了与特征向量重合的方向。而每行都是这样子,每行相加在 v j i v_j^i vji上的权重都一样的。

  • 将矩阵A看成一个特征空间,那么A的特征向量就是A的一组基向量,特征值意义在于:特征值越大,对应的基向量在该特征空间中的重要性也就越大!一个向量经过矩阵A对应的线性变换也好换个坐标系也好,如果特征值越大,那么经过变换以后向量在这个特征值对应的特征方向上得到的权重就越大。或者说特征值就是这个特征空间上特征向量所对应的刻度,特征值越大对应的单位特征向量刻度越大,比如一个在各个特征向量方向上都为1的向量,左乘这个特征空间A,得出的向量就是特征值对应的向量,然则变换结果不是全1。我们可以分解矩阵A为n列(每一列代表的是一种特征),每一列都是一个向量,每个向量都是特征向量的线性组合,特征向量与特征向量之间相互正交。因此我们可以将特征向量左乘这个矩阵A看成是一次向量之间的运算(a1,a2…an)v,a1v乘法,a1中的非v部分会因为特征向量相互正交刚好被抵消掉了。比如一个对角阵((2,0),(0,1))。一个向量(1,1)。第一维度代表城市第二维度代表面积,要求的是房价。城市对房价影响大,那么(1,1)变换后成了(2,1),向量放大了城市的作用。假如把矩阵做得更复杂点,秩低点,就相当于做了一次特征筛选。不是对角阵,就相当于对特征做了线性组合,形成新的加权特征。(以上是深夜用手机打的,懒得排版了)
  • 为什么PCA中特征向量(使用协方差来做特征分解,方差越大说明对分类或者回归越重要,一个特征如果完全都一样就没有意义了)能用来降维:首先所有特征向量是矩阵(对对称阵)的一组正交基。同样模为1的特征向量左乘矩阵 A A A得到的缩放尺度都不一样,缩放尺度(特征值)越大。任意一个向量都可以看成是特征向量的线性组合,将这个向量分解成特征向量的线性组合,显然最后特征值越大的特征向量分量对该向量左乘A的影响最大,因此特征值越大特征向量越重要。再重新思考上边的数学原理,我们把特征向量左乘 A A A看成这样的运算。
    A v = [ a 1 , a 2 , … , a n ] T v = [ c 1 , c 2 , … , c n ] T v = [ c 1 v , c 2 v , . . , c n v ] T = λ v Av=\left[a_{1}, a_{2}, \dots, a_{n}\right]^Tv=\left[c_{1}, c_{2}, \dots, c_{n}\right]^Tv=[c_1v,c_2v,..,c_nv]^T \\ =\lambda v Av=[a1,a2,,an]Tv=[c1,c2,,cn]Tv=[c1v,c2v,..,cnv]T=λv
    其中 c i c_i ci为列向量,实对称阵中行列向量相等。试想一下内积的物理意义( c c c投影在 v v v上再乘积),只衡量了要投影方向。 v v v的第i个元素就代表了第i列(第i列与第i维度相关)的列向量在v上的投影距离(反过来看,就是v投影在 c i c_i ci上,此时所有列向量就是特征向量v的坐标系了,也可以解释, v v v的第i个元素为什么衡量了第i个维度的重要性),因此特征向量的每个元素都代表了第i维度的重要性。因此直接用特征向量与样本点乘可以得出一个新的特征(原有特征的线性组合),而对应的特征值就衡量了这种重要性、

2)PCA

再去思考传统的特征提取。传统的特征提取需要人为的给定一些设定的条件,或者根据一些人类的想法去进行特征提取。比如PCA要对协方差矩阵(认为这组数据中方差较小的特征没什么用,对于分类没有起到决定性作用,因此过滤掉)进行特征分解,提取特征的时候就会对原有特征进行线性组合以及filter。PCA人为的设定了主成分特征的个数,通过主成分把不太重要(可能有点用,未必没用,假如满秩全都有用,当然也有可能有噪声)把原有特征向量做一个降维,从而起到了特征提取的功能。这里边的主成分个数就可以看成一个超参。深度学习的每一层都可以看成pca的一种近似操作,只不过没有超参,或者说超参需要从数据分布中学习。

3)深度学习

  • 从这个角度思考为什么深度学习会厉害,深度学习每一层的W都相当于做了一次线性的特征提取以及特征筛选,经过非线性变换以后映射到不一样的空间(弯曲了的空间什么的?)。通过多层叠加,形成一系列的特征提取。特征提好以后就线性可分了,最后再做一个逻辑回归,done。
  • 从泰勒公式的角度来讲,任何一个可微函数都可以在邻域n阶展开近似拟合原函数。假设深度学习可以看成是泰勒公式的类似版本,对于泰勒公式的 x n x^n xn,在越深的层拟合出来越高阶的 x n x^n xn,同时需要去学习每一阶对应的导数。因此层越深,理论上来说拟合能力越强(基于使用同样的激活函数)。由于泰勒公式展开越高阶,相加的项越多。基于这个思考那么,越深的层理论上应该需要更多的神经元,也就相当于越深越宽。
  • 再对ResNet残差学习进行思考,为什么ResNet会奏效呢?首先resnet使梯度反向传播多了一条捷径减缓梯度爆炸与梯度消失的作用。同时给了low-level的特征重新做人的机会哈哈。虽然后边进行提取了,部分特征被filter掉了,但不代表这些特征就没有用了,可以给他们一次重新做人的机会“温故而知新”。残差学习甚至可以认为是一种防止过拟合的方法。假如认为深度学习是一种类似n阶展开的泰勒公式,那么越深就展开的越开,从而对邻域拟合得更加彻底。然而加上之前特征,相当于把前边学习到的低阶特征也拿出来进行利用,降低深度(高阶)特征的影响,减缓过拟合。当然也可能因为梯度的反向传播更加快反而拟合得更好,但比较用的特征不那么单纯的高阶了,应该也能起到防止过拟合的作用。
  • 再对我熟悉的SENet进行思考。SENet首先做一个global pooling对每一种特征做一个全局的平均池化,把特征提取做到极致(不同于以往的在空间上的attention),SE在我看来就是彻彻底底的特征提取特征筛选。池化以后对维度进行压缩,relu做一个非线性变换。再把浓缩的精华提出来放回原来的每个特征对应的维度上,对原有特征在通道上做一次加权。彻彻底底的特征筛选。

不写了,昨晚太晚睡了。除了第一段重新写,其他基本都是昨晚手机打的…哎

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值