2020-3-21 深度学习笔记14 - 自编码器 5(使用自编码器学习流形-降维,收缩自编码器CAE)

第十四章 自编码器

官网
英文
推荐

2020-3-8 深度学习笔记14 - 自编码器 1(欠完备自编码器)
2020-3-8 深度学习笔记14 - 自编码器 2(正则自编码器 - 稀疏自编码器(增加惩罚项) / 去噪自编码器(改变重构误差项)/ 惩罚导数作为正则)
2020-3-14 深度学习笔记14 - 自编码器 3( 表示能力、层的大小和深度,随机编码器和解码器)
2020-3-15 深度学习笔记14 - 自编码器 4(去噪自编码器(前馈网络)详解)

使用自编码器学习流形

关于流形,可以参见https://blog.csdn.net/weixin_30820077/article/details/95525474,写的通俗易懂。

流形是指连接在一起的区域。数学上,它是指一组点,且每个点都有其领域。

流形,百度百科中解释,是局部具有欧几里得空间性质的空间,在数学中用于描述几何形体。物理上,经典力学的相空间和构造广义相对论的时空模型的四维伪黎曼流形都是流形的实例。

由上面的定义可知,(欧式空间是直线、平面等概念的推广),而流形是欧式空间中曲线、曲面等概念的推广,那么两者有什么关系呢?因为直线、平面等概念可以看成对应维度的曲线、曲面等的特例,所以欧式空间相应地可以看成流形的一个特例,叫线性流形

一般大家研究流形是为了解决非线性问题,所说的流形也都默认是非线性流形

非线性流形可以看成欧式空间被扭曲的结果,而用来描述欧式空间的直角坐标系中的轴也相应地被掰弯了。举一个二维的例子,展平的一块抹布,可以看成二维欧式空间,当抹布被扭一扭后,它就变成了一个非线性流形。

就像曲线无限放大后,局部是直线一样,流形无限小的局部也可以看成欧式空间,因此流形局部具有欧式空间性质。例如地球,从太空看,地球表面近似一个球面,但从地球上的我们来看(局部),地球表面是一个平面。

测地线距离是用来度量流形中的距离的。
当所在的空间是欧式空间(线性流形)时,测地线距离也就是我们常用的欧式距离;但当空间是非线性流形时,测地线距离不再是欧式距离。例如地球,假如限定在表面(一个非线性流形)去衡量南北极的距离,我们是不可能直接拉一根直线穿过地心去测量的,只能贴着表面去找最短距离,找出来的这个距离就叫测地线距离

简单来说,欧式距离不能满足非线性流形的约束,所以有了测地线距离。就像地球表面上南北极的欧式距离不满足球面约束,越出了球面这个空间。

为什么要学习流形?-降维
因为流形分布定律,即高维数据往往位于一个低维流形上或附近。
为了机器学习中的维度灾难问题,以往在低维度适用的算法都效果很差或者计算代价过高。如果我们能学习到数据位于的那个低维流形,那么我们就可以在这个流形或其嵌入的参数空间里去运用原先的低维学习算法了。

当下比较火的深度学习在高维数据中的表现优异,其很大程度上都是可以用流形来解释的。

总的来说,我们去学习流形可以减少计算机的内存负担和计算复杂度,并且可以使学习效果提升,特别是图像识别,手写体识别等。简而言之,流形学习是用来进行降维和帮助我们进行数据可视化。

学习流形的算法一般有两种学习方式:局部线性嵌入和等度量映射

  • 直接学习训练样本在流形上的嵌入,也就是计算出训练样本在参数空间的坐标表示。流形学习这个邻域就是基于这种学习的。
  • 学习高维空间到参数空间的映射,典型代表是自编码器。

自编码器可以依据两种动力去学习非线性流形:

  • 一种动力是对自身的重构误差要小,即解码器能恢复输入;
  • 第二种是通过约束(正则项)去学习对流形切平面上输入不敏感的函数。

两种结合成一个目标函数,这样自编码器就可以学习非线性流形了。

能学习自编码器的有两种:

  • 去噪自编码器:通过约束重构函数的梯度在数据点周围很小可以捕获流形的切平面结构。
  • 收缩自编码器:与去噪自编码器目标相同,只不过手段是通过约束编码器学习到的函数在数据点周围梯度很小。

以上是补充内容,下面回到《机器学习》一文中

自编码器跟其他很多机器学习算法一样,也利用了数据集中在一个低维流形或者一小组这样的流形的思想。其中一些机器学习算法仅能学习到在流形上表现良好但给定不在流形上的输入会导致异常的函数。自编码器进一步借此想法,旨在学习流形的结构。

流形的重要特性
流形的一个重要特征是流形可看作切平面(tangent plane)的集合。
d 维流形上的一点 x 的切平面由能张成流形上允许变动的局部方向的 d 维基向量给出,而这些局部方向决定了我们能如何微小地变动点 x 而保持于流形上。这里提到的切平面其实是我们用自编码器学习非线性流形所依赖的一个很重要的性质
如下图,这些局部方向决定了我们能如何微小地变动 x x x而保持于流形上。
2020-3-21 深度学习笔记14 - 自编码器 5(使用自编码器学习流形-降维,收缩自编码器CAE)_第1张图片
上图是正切超平面概念的图示。
我们在 784 784 784维空间中创建了 1 1 1维流形。
我们使用一张784像素的MNIST图像(入门级的计算机视觉数据集),并通过垂直平移来转换它。垂直平移的量定义沿着1维流形的坐标,轨迹为通过图像空间的弯曲路径。
该图显示了沿着该流形的几个点。
为了可视化,我们使用PCA将流形投影到 2 2 2维空间中。 n n n维流形在每个点处都具有 n n n维切平面。
该切平面恰好在该点接触流形,并且在该点处平行于流形表面。
它定义了为保持在流形上可以移动的方向空间。
1 1 1维流形具有单个切线。
我们在图中示出了一个点处的示例切线,其中图像表示该切线方向在图像空间中是怎样的。
灰色像素表示沿着切线移动时不改变的像素,白色像素表示变亮的像素,黑色像素表示变暗的像素。

所有自编码器的训练过程涉及两种推动力的折衷:
(1)学习训练样本x的表示h使得x能通过解码器近似地从h中恢复。
(2)满足约束或正则惩罚。

显然,单一的推动力是无用的——从它本身将输入复制到输出是无用的,同样忽略输入也是没用的。相反,两种推动力结合是有用的,因为它们驱使隐藏的表示能捕获有关数据分布结构的信息。

为了理解自编码器可用于流形学习的原因,我们可以将自编码器和其他方法进行对比。
学习表征流形最常见的是流形上(或附近)数据点的表示。 对于特定的实例,这样的表示也被称为嵌入。 它通常由一个低维向量给出,具有比这个流形的”外围”空间更少的维数。 有些算法(下面讨论的非参数流形学习算法)直接学习每个训练样例的嵌入,而其他算法学习更一般的映射(有时被称为编码器或表示函数),将周围空间(输入空间)的任意点映射到它的嵌入。

在上面的补充资料中已经有过说明,学习流形的算法一般有两种学习方式:局部线性嵌入和等度量映射。

流形学习大多专注于试图捕捉到这些流形的无监督学习过程。最初始的学习非线性流形的机器学习研究专注基于最近邻图(nearest neighbor graph)的非参数(non-parametric)方法。该图中每个训练样例对应一个节点,它的边连接近邻点对。如下图所示,这些方法将每个节点与张成实例和近邻之间的差向量变化方向的切平面相关联。
2020-3-21 深度学习笔记14 - 自编码器 5(使用自编码器学习流形-降维,收缩自编码器CAE)_第2张图片
观察上图,图片来自QMUL 多角度人脸数据集。
非参数流形学习过程构建的最近邻图,其中节点表示训练样本,有向边指示最近邻关系。
因此,各种过程可以获得与图的邻域相关联的切平面以及将每个训练样本与实值向量位置或嵌入相关联的坐标系。
我们可以通过插值将这种表示概括为新的样本。只要样本的数量大到足以覆盖流形的弯曲和扭转,这些方法工作良好。

局部非参数方法应用于流形学习的根本困难是:如果流形不是很光滑(它们有许多波峰、波谷和曲折),为覆盖其中的每一个变化,我们可能需要非常多的训练样本,导致没有能力泛化到没见过的变化。

收缩自编码器(Contractive Autoencoders,CAE)

衡量一个自编码器模型的效果可以从两个标准入手:
1.模型是否可以很好的重建输入信号
2.模型对输入数据在一定程度下的扰动是否具有不变性。

为了使自编码器在标准2下具有更好的效果,出现了收缩自编码器概念,其主要目的是为了抑制训练样本在所有方向上的扰动。

为了实现这一目标的方法是在传统自编码器的目标函数 h = f ( x ) h = f(x) h=f(x)上增加一个惩罚项(显式的正则项),来达到局部空间收缩的效果。该惩罚项是关于输入的隐藏层表达的Jacobian矩阵的Frobenius 范数(元素平方之和),其目的是为了使特征空间在训练数据附近的映射达到收缩效果。

表达式如下:
Ω ( h ) = λ ∣ ∣ ∂ f ( x ) ∂ x ∣ ∣ F 2 Ω(h)=λ∣∣\frac{∂f(x)}{∂x}∣∣^2_F Ω(h)=λxf(x)F2

收缩自编码器与去噪自编码器、流形学习和概率模型存在一定理论联系
收缩自编码模型趋于找到尽量少的几个特征值,特征值的数量对应局部秩和局部维数。收缩自编码模型可以利用隐单元建立复杂非线性流形模型。

去噪自编码器和收缩自编码器之间存在一定联系
在小高斯噪声的限制下,当重构函数将 x x x映射到 r = g ( f ( x ) ) r = g(f(x)) r=g(f(x))时,去噪重构误差与收缩惩罚项是等价的。换句话说, 去噪自编码器能抵抗小且有限的输入扰动,而收缩自编码器使特征提取函数能抵抗极小的输入扰动。
去噪AE是针对输入,收缩AE是针对输出

你可能感兴趣的:(深度学习,IT)