简单的自编码器(实际篇)|机器学习你会遇到的“坑”
作者头像
  • 向佳
  • 2018-12-31 14:07:27 0

无监督学习在统计学习中占据重要地位,它不依赖于数据的标签。实际上,无监督学习可以大致分为两大类:

  1. 特征降维:通过揭示数据内部的关系来简化数据结构。线性方法如主成分分析(PCA)和多维尺度分析(MDS)可以帮助我们理解数据的内在结构。非线性方法主要有两种:一种是利用核技巧,例如核主成分分析(KPCA);另一种是流形学习,例如局部线性嵌入(LLE)、t-分布随机邻域嵌入(t-SNE)和等距映射(ISOMAP)。具体细节可以参考之前的课程《线性降维方法》和《非线性降维方法》的实际篇和代码篇。

  2. 样本聚类:通过揭示数据间的联系来对数据进行分类。根据不同的指导思路,聚类方法可以分为几种类型:基于原型的聚类如K均值算法(K-means),基于密度的聚类如DBSCAN,基于集合的聚类如层次聚类(Hierarchical Clustering),以及基于网格的聚类等。具体细节可以参考之前的课程《聚类的几个重要问题》的实际篇和代码篇。

在实际应用中,降维往往比聚类更为关键。在深度学习中,隐层的作用是获取更好的数据表示,而降维过程正是通过线性或非线性组合来实现这一目标。根据万能近似定理,增加足够多的神经元可以拟合任意函数,这使得神经网络提取的特征具有更大的表示空间,只要合理运用,就能带来更好的性能。

是否可以使用神经网络来进行降维呢?答案是肯定的,其中一种简单的方法就是自编码器(Auto-encoder)。

简单自编码器的基本原理

自编码器是一种无监督学习的简单模型,它包含三个主要部分:输入层、隐层和输出层。从输入层到隐层的过程称为编码(Encoder),从隐层到输出层的过程称为解码(Decoder)。例如,假设我们希望将输入X转化为低维表示z,那么从X到z的过程就是编码,从z到输出X'的过程就是解码,这个中间层被称为瓶颈层(Bottle Layer)。

在自编码器中,编码过程就是将输入X转换为z=f(X),再通过解码将z恢复成与X有一定关系的X'。我们可以认为z是X的一个低维表示。关于自编码器,有四个常见的误解需要澄清:

  • 只有z才能被看作低维表示吗? 实际上,自编码器可以包含多个隐层,每个隐层都可以视为输入的低维表示。选择z作为低维表示的原因主要是因为它维度最低,最符合我们的需求。

  • 输入可以等于输入吗? 一般情况下,我们不希望输入等于输入,因为这会导致自编码器只是简单地复制输入数据。通过调节隐层的维度,我们可以避免这种情况,即使用欠完备(Undercomplete)自编码器,它通过学习低维表示来避免复制输入。

  • 编码器的深度如何确定? 编码器的深度不宜过深,因为过深的编码器可能会导致所有输入都映射到相同的编码。然而,根据万能近似定理,适当的深度有助于更好地压缩数据。实际应用中,合理的深度应根据具体任务来决定。

  • 自编码器与PCA的联系是什么? 当自编码器不使用激活函数且损失函数为均方误差时,它与主成分分析(PCA)等价。这意味着自编码器可以通过最小化重构误差来达到PCA的效果。

自编码器的主要用途是降维,但它的应用不仅限于此。接下来,我们将介绍两种经典的自编码器改进方法:稀疏自编码器(SAE)和去噪自编码器(DAE)。

稀疏自编码器(SAE)

稀疏自编码器通过引入稀疏性约束来解决传统自编码器需要固定隐层维度的问题。稀疏性意味着大多数神经元处于不活跃状态。为了实现这一点,可以在损失函数中添加惩罚项,例如L1正则化或KL散度。稀疏性约束可以提高模型的灵活性,但同时也需要仔细调节惩罚项的系数,以避免过度压缩或不足压缩。

去噪自编码器(DAE)

去噪自编码器通过引入噪声来增强模型的鲁棒性。训练时,输入数据会被人为添加噪声,模型的目标是恢复原始数据。这种方法可以有效提升模型对噪声的抵抗力。在损失函数中,可以通过添加梯度项作为正则化手段来进一步优化模型。虽然这种方法在深层网络中计算复杂度较高,但在浅层网络中表现良好。

通过以上方法,自编码器不仅可以有效地降维,还能提升模型的鲁棒性和泛化能力。

    本文来源:图灵汇
责任编辑: : 向佳
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
编码器实际遇到机器简单学习
    下一篇