Machine Learning Techniques Lecture 13: Deep Learning | Cheney Shen

Technology blog

Machine Learning Techniques Lecture 13: Deep Learning


 
 

内容:

Deep Learning模型,是之前讲的类神经网路的延伸,他是一个困难的问题,要经过很多层层层淬炼;然后讲了autoencoder,在deep learning里面它的作用就是帮我们预训练出好的weight,本质上做的事情是从资料里面找出最好的表现方式,做法是用一个浅浅的NN来找到一个好的表现方式;进一步讲到denoising autoencoder 就是在原来的资料里面埋了一些杂讯进去做学习已达到可以抗杂讯的autoencoder的效果;最后讲到这些非线性的autoencoder如果退回来变成线性的话,其实就是PCA方法,作用都是帮助我们降低资料的维度。

 
 


 
 

回顾:NN模型里面有一层一层的神经元,他们的作用就是帮我们萃取出资料面的模式(特征),通过backprop工具来计算梯度,从而通过GD/SGD法来学习的到NN模型里面的w参数。

 
 

这一讲:Deep Learning

 
 


 
 

类神经网络的核心就是一层一层的神经元和他们之间的连接关系。那么问题是我们要用多少个神经元呢?我们要用多少层呢?我们的NN结构是怎么样的呢?或者你可以主动的去设计;或者你可以把模型的结构当作是参数,通过validation来选择最好的。

 
 

在NN里面决定使用什么样的网络结构是非常核心,也是非常困难的问题。

 
 


 
 

我们这课里面不会把所有的网络结构列出来比较好坏,而是来比较基本的两种。

 
 

Shallow(浅):

相对来说学习效率很高,计算量比较小;结构简单,参数比较少;层数比较少,但是每一层放足够多的神经元,一样可以做到很复杂的事情。

 
 

Deep(深):

训练的时候一定会花更多的力气,计算量大;对结构的决定会很复杂,参数量大;层数足够多,一样可以做到很复杂的事情;deep这几年很流行的一大关键原因就是其可以得到比较有物理意义的特征。

 
 


 
 

什么叫做 Meaningful?这里举例手写识别来说明。比如我们要辨识1/5,那么每一层萃取出越来越复杂的各个部位的特征,也就是每一层代表了不一样的物理意义,最后再做辨识。越多层就可以表示越多种不一样的变化,每一层要做的事情相对就变简单了,层与层之间的物理意义就是从简单到复杂的转换。

 
 

如果今天你最终要区分的是比较复杂的高级特征,你不能一步登天,像这样每一层做的都是区分非常简单的特征,一层一层的处理合成起来也就可以处理复杂的辨识。在计算机视觉,语音等领域很流行。

 
 


 
 

深度学习里面的困难点和对应的关键技术如下。

 
 

  1. 决定整个网络的架构

除了前面提到的validation方法,研究者还会加上其自身对这个问题的了解(Domain Knowledge)。比如 Convolutional Nnet (CNN) 用来处理图像,用的就是像素之间的物理上的位置关系是很大的影响因素,因此在设计网络的时候让附近的像素连到同一个下一层的神经元,隔太远的像素之间就不管了。

 
 

  1. 模型的复杂度非常高

在资料量足够多的时候这不见得是一个很大的问题,但同时加重了计算复杂度。而对于控制模型复杂度问题本身,其基本工具就是regularization,想办法在你的模型里面踩刹车,让你的模型在即使存在杂讯的情况下依旧是稳固的。

比如最近流行的方法 Dropout,模拟的事情就是如果网络里面存在坏掉的神经元,希望在这样的情况下最终结果还是能保持比较好。

还有一种方法叫做 Denoising,如果我的输入坏掉的情况下,我的整个网络还是可以大概给我一个适当的输出。

 
 

  1. 这是一个困难的最佳化问题,非常容易卡在局部最优

既然backdrop是在帮助梯度下降(GD),梯度下降是起始点敏感的,因此现在需要比较谨慎的选择起始点,而不是random。这个会有一连串的方法来讲解怎么选起始点,一般叫做 Pre-training。

 
 

  1. 计算复杂度很高

这边是这次AI大爆发的重要原因就是有30年前难以想象的硬件计算资源GPU。

 
 

讲者个人观点里面最重要的进步来自于 regularization 和 initialization 思维方法的创新。

 
 


 
 

一个简单的深度学习框架的例子:

  1. 决定一开始比较好的权重,可以一层一层的来决定。上图最下面时输入,第一次决定的就是第一层的初始权重,然后暂时固定下来第一层去确定第二层,以此类推。
  2. 然后再通过训练来获得更好的w。

 
 


 
 

练习

 
 


 
 

上面讲了一个基本的深度学习的架构,我们现在来考虑怎么做 pre-training,也就是帮助我们的权重决定初始值。

 
 

权重的物理意义是什么,其代表的是我们要怎么做资料转换,或者说资料怎么去编码,怎么去表现资料。问题是在做完pre-training之后,我们是不知道这个权重未来会怎么被使用的。也就是说比如我们得到了第一层的权重,对于第一层的权重我们是不知道其在第二,第三层等是怎么被使用的。

 
 

好的权重就应该是能保持我要的资料的特征信息就好了。也就是说资料转换过去后原来和新的资料说明的事情没有变化。举例上面的1/5分类,做了上面图示的资料转换,前三个表示的是1,后三个标识的是5,这三个可以轻易的转换回去。

 
 

如果能够轻易的将资料转换回去(重建),那就是一个好的资料转换。因此我们也希望预训练的时候想办法做的特征转换,是一个好的资料转换。

 
 


 
 

怎么做 pre-training 呢,同样是使用一个 NN 来求解:把原始的资料转换到中间的某一些神经元,这些神经元的输出是我的心的表达方式之后,我还能够试着重建回来。

 
 

这样的NN叫做 autoencoder(自动编码器,自动从原始资料编码得到中间层,编完码之后还可以解码,其输出就是解码结果,和原来输出类似),公式表示就是 g(X) ≈ X ,图中蓝色的w就是 encoding weight,红色的叫做 decoding weight。

 
 

那么 Approximating Identity Function 有什么好处? (就是为什么要编码后的还能解码)

 
 


 
 

假设我们可以 Approximating Identity Function ,那么其必然依赖原来资料的 hidden structure,这样的方式对于 supervised/unsupervised 都有用。

 
 

For supervised learning:学习信息表示

如果能通过这个学习方式得到这个潜藏的结构的化,我们就可以通过这个潜藏结构来当作特征转换。也就是说这些潜藏结构告诉我们怎么用有效的方法来表示我们原始的资料。

 
 

For unsupervised learning:学习得到典型资料

如果我要做的是 density estimation,看看哪边是比较稠密的,哪边是稀疏的。 Approximating Identity Function 做了以后对于新进来的资料,我们可以看他是落在稠密区还是稀疏区,稠密区就是改编码器做得比较好的地方。透过编码器做得好不好,就可以挑出来哪些点不合群,也就是说可以判断到底哪些是典型的资料。

 
 

对于这里自动编码器的重点是得到符合要求的中间层,得到资料的表现方式。

 
 


 
 

我们来看看基本的自动编码器如上面黄色框公式所示。

 
 

  1. 是一个浅的NN,可以通过Backprop轻易地来训练得到。
  2. 通常情况下我们考虑的是得到的中间层比原来的资料维度更小,这样就压缩了表现形式。
  3. 这里的资料不用考虑真正的原始网络的输出结果,要扔进去的资料是(Xi, Xi),可以看作是一个unsupervised学习技术。
  4. 一般情况下用来编码的权重和用来解码的权重是一致的,加上这个条件就是 regularization 的过程,限制能力。

 
 

满足这四条的就是一个基本的 autoencoder, 就是 NN 的 pre-training 的步骤。

 
 


 
 

再回头来看 Deep Lerning 的基本算法,第一步的合理做法就是使用 auto-encoder:每次都是拿前一层的输出训练出初始化的w,同时得到输出用于下一层。

 
 

大部分的 autoencoder 都是大同小异,在这基础上做变化的。

 
 


 
 

练习

 
 


 
 

前面用 autoencoder 解决了 Deep-Learning 里面 Pre-training 的问题,这里谈一下 如何来使用 Regularization 的机制来控制模型复杂度。

 
 

上图是一个之前提到的 NN 示意图,里面有很多神经元以及层次关系,我们要小心overfit,因此我在很多时候使用 Regularization。

 
 

  1. 决定结构的时候,加上一些条件,例如前面举过的CNN的例子。
  2. 在决定权重的时候,加上一些条件
  3. 在early stoppping的时候,确定其条件

 
 

下面讲一个很有用的 regularization 方法。

 
 


 
 

先来复习一下 overfitting 的成因,上面是点的资料量和杂讯的量坐标系内overfitting的可能性,越红越容易。杂讯对于overfitting来说是极其重要的原因,因此要去处理它。

 
 


 
 

一般的思路就是把高杂讯的资料丢掉清理一下,看起来我们可以把学习的结果做得更好一些。

 
 

新的思路是如果我们没办法很容易把杂讯找出来并处理的话,我们把杂讯加到资料里面。

 
 

如果我们想要一个好的自动编码器,有输入输出差不多,你丢进去干净的资料,希望他出来干净的结果, G(x)=x;如果今天给带杂讯的资料,你丢进去带杂讯的资料,你还是希望输出干净的结果,G(X’)=X。

 
 

所以我们要的是 denoising autoencoder。做法基本和基本的一致,输入不一样,资料是干净的资料+人工的杂讯,最后得到干净的结果。有了这种自动编码器,理论上经过DL可以得到更好的结果。

 
 

意义在于,学习得到编码器的时候就加入杂讯,使得其有去杂讯的功能,这样再次使用该编码器处理真正的带杂讯的资料的时候其就具有了去杂讯的功能。

 
 

人工加入杂讯这件事情也是一种regularization的方式,因为它告诉了机器到底要把怎么样的资料处理得更好,这个想法可以用于任何机器学习的模型中。

 
 


 
 

练习

 
 


 
 

前面的部分讲的是 nonllinear autoencoder,是相对来说比较复杂的模型,那为什么不是从线性模型开始讲?(not linear first)是因为我们这里考虑的NN,DL本身已经是非线性模型,这样的架构下非线性转换比较有用。

 
 

那么对于线性的autoencoder可以怎么来做?如果是线性模型,就没有了tranh,见上面的蓝色框第一行公式。考虑一些要用到的特点,首先是把X0拿掉,会让输出和输入范围比较一致;编解码权重一致,也就是蓝色的和红色的是一致的;中间维度比原来的维度小。有了这些H(x)就可以用矩阵表示,非常的简洁,如上面的黄色框所示。

 
 

那么接下来要做的就是对W矩阵做最佳化。

 
 


 
 

今天要对h最佳化,就是对w最佳化,Ein公式如上面所示,使用的是平方错误。我们要做的就是找到一个w矩阵让这个Ein最小。

 
 

下面我们来推导得到这个W的公式解。

 
 

我们先来复习一下线性代数知识。

  1. W *W^T 是一个半正定矩阵,可以做 eigen value decomponsition,得到 V(特征向量), garma(特征值)

    特性:V 向量互相垂直,自己和自己乘就是单位矩阵;garma是对角阵,矩阵维度会小于等于原来的d。

  2. 因此上面第一步*X就也有上面表示了

    特性:V^T(Xn) 代表的就是坐标转换,几何上就是旋转和镜面反射;在乘上garma,就是scale的过程;在V,就是旋转或者镜面反射回到原来的空间,看看变成什么样的资料了。

  3. 用上面的示意对于原来的资料也可以表示成这个形式,只是在V空间变换后啥也没做就变换回去了。

 
 

因此我们可以把W的最佳化问题转换成 V和garma 的最佳化问题。

 
 


 
 

先对garma做最佳化。

 
 

灰色部分表示不对最佳化产生影响,先把w表示成V,garma,后面的变化不会影响的是长度,所以可以把红色的V涂掉,对garma最佳化没有影响。所以就有了 上面蓝色框第二条所示公式,唯一的最小化的机会就是 (I – garma) 里面0最多。因为garma是对角矩阵,因此只需要考虑对角线,因此garma矩阵对角线1越多越好,也就是说最多可以塞 d~ 个1, 因为garma矩阵有效的不大于d~ 大小,所以最后你要得到的garma就长成蓝色框右下角所示情况。【这里是几何概念推理】

 
 

剩下的交给V的最佳化求解。

 
 


 
 

对V做最佳化。

 
 

首先把最小化变成最大化,因为最大化问题看起来比较干净。最小化的时候考虑的是留下哪些维度,最大化则是考虑的要拿掉哪些维度,上图中间矩阵部分的表示。

 
 

假设今天d~是1,也就是V也只需要考虑第一行有用。然后对于平方,则可以写进去如上面灰色部分第二行所示。V * V^T = 1 则是有前面提到的线性代数性质决定的。

由上面可以得到最好的V会满足的条件,绿色的部分可以由lamda替代,原因是第二行的式子部分微分得到的三行的式子,第二航的条件V^T * V 微分得到 V 本身,有 lagrange multipier 知道最佳解两者的微分要平行,所以乘上lamda就可以有上面的等式。然后你再看V,就是eigenvector of X^T * X,而且还是最大的eigen vector,这样才是最大解。

 
 

所以当d~等于1的时候,公式解就是最大的eigen vectoe。所以整体的公式解也可以类似的推导出就是最大的d~个eigen vectors。

 
 

所以你今天在这里要做的事情就是得到资料然后做eigen value decomponsition,得到的最好的那些eigen vector方向,就是你应该投影做特征转换的方向。

 
 


 
 

这就有了非常重要的算法 PCA (Principal Component Analysis),只做2,3两步就是这里讲的linear autoencoder。

 
 

  1. 先把你的资料对应他的平均值做一个转换,得到平均值是0的资料。
  2. 再通过上面的资料计算出最大的d~个eigenvectors就是你需要的这些W的结果。
  3. 有了这些W你就可以构建特征转换,资料进来通过W计算之后送出去的就是资料转换的结果。

 
 

物理意义就是投影过去后在那个方向上的统计学上的变化量越大越好,上面步骤第一步就是做了一个平移的动作,第三部就是做一个投影的动作。

 
 

任何资料拿来,如果你要找到线性的最好的表现形式的化呢,就做PCA来降维度。

这也就是linear dimension reduction。

 
 


 
 

练习

 
 


 
 

总结:

Deep Learning模型,是之前讲的类神经网路的延伸,他是一个困难的问题,要经过很多层层层淬炼;然后讲了autoencoder,在deep learning里面它的作用就是帮我们预训练出好的weight,本质上做的事情是从资料里面找出最好的表现方式,做法是用一个浅浅的NN来找到一个好的表现方式;进一步讲到denoising autoencoder 就是在原来的资料里面埋了一些杂讯进去做学习已达到可以抗杂讯的autoencoder的效果;最后讲到这些非线性的autoencoder如果退回来变成线性的话,其实就是PCA方法,作用都是帮助我们降低资料的维度。

 
 

下一讲:

这两讲NN, DL都讲了些萃取特征的方式,下一课再讲一种,怎么从资料里面找代表。

 
 


Post a Comment

Your email address will not be published. Required fields are marked *

  • Categories

  • Tags