机器学习之自编码器

自编码器(autoencoder)是神经网络的一种,经过训练后能尝试将输入复制到输出。其内部有一个隐藏层h,可以产生编码表示输入。该网络由两部分组成:一个由函数 h = f ( x ) 表示的编码器和一个产生重构的解码器 r = g ( h ) 。一般我们需要加一些约束给自编码器,使得其输出只是近似于输入,强制模型考虑输入数据的哪些部分需要被优先复制,从而学习数据中的有用特性。传统的自编码器被用于降维或特征学习,目前更多的会用到生成式建模。


1、欠完备自编码器

通常我们希望通过训练自编码器对输入复制从而使h获得有用的特性。一种方法是限制h的维数小于输入x,这种编码维度小于输入维度的编码器称为 自编码器。学习欠完备的表示将强制自编码器捕捉数据中最显著的特性。学习过程可以描述成最小化一个损失函数:

L ( x , g ( f ( x ) ) )

L是一个损失函数,惩罚 g ( f ( x ) ) 与x的差异,如均方误差。当解码器是线性且L是均方误差时,欠完备的自编码器会学习出与PCA相同的生成子空间。当f,g都是非线性时,理论上可以学习到很强大的PCA非线性推广,但是自编码器被赋予过大的容量,自编码器可能无法学习到数据集的任何有用信息。

2、正则自编码器

同样,如果隐藏编码的维数等于甚至大于输入的 过完备 情况下,即使编码和解码都是线性的,自编码器仍然将学会将输入复制到输出,而学不到任何有关数据分布的有用信息。
理想情况下,根据要建模的数据分布的复杂性,选择合适的编码维数和编码器、解码器容量,就可以成功训练任意架构的自编码器。正则自编码器具有这样的能力。正则自编码器使用的损失函数可以鼓励模型学习其他特性(除了将输入复制到输出),而不必限制使用浅层的编码器和解码器以及小的编码维数来限制模型的容量。这些特征包括稀疏表示、表示的小导数以及对噪音或输入缺失的鲁棒性。即使模型容量大到足以学到一个无意义的恒等函数,非线性且过完备的正则自编码器仍然能够从数据中学到一些关于数据分布的有用信息。

2.1 稀疏自编码器

稀疏自编码器简单的在训练时结合编码层的稀疏惩罚 Ω ( h ) 和重构误差:

L ( x , g ( f ( x ) ) ) + Ω ( h )

通常h是编码器的输出,g(h)是解码器的输出, h = f ( x )

关于稀疏编码:它是一种无监督学习方法,它用于寻找一组超完备的基向量来更高效地表示样本数据。稀疏编码的目的是找到这样的一组基向量 ϕ i ,使得我们能将输入向量x表示称这些基向量的线性组合:

x = i = 1 k a i ϕ i

虽然形如主成分分析技术(PCA)能使我们方便地找到一组“完备”基向量,但是这里我们想要做的是找到一组“超完备”基向量来表示输入向量 x R n (也就是说,k > n)。超完备基的好处是它们能更有效地找出隐含在输入数据内部的结构与模式。然而,对于超完备基来说,系数 a i 不再由输入向量 x 唯一确定。因此,在稀疏编码算法中,我们另加了一个评判标准“稀疏性”来解决因超完备而导致的退化(degeneracy)问题。
这里,我们把“稀疏性”定义为:只有很少的几个非零元素或只有很少的几个远大于零的元素。要求系数 ai 是稀疏的意思就是说:对于一组输入向量,我们只想有尽可能少的几个系数远大于零。选择使用具有稀疏性的分量来表示我们的输入数据是有原因的,因为绝大多数的感官数据,比如自然图像,可以被表示成少量基本元素的叠加,在图像中这些基本元素可以是面或者线。同时,比如与初级视觉皮层的类比过程也因此得到了提升。

我们把有 m 个输入向量的稀疏编码代价函数定义为:

minimize a i ( j ) , ϕ i j = 1 m | | x ( j ) i = 1 k a i ( j ) ϕ i | | 2 + λ i = 1 k S ( a i ( j ) )

此处 S ( . ) 是一个稀疏代价函数,由它来对远大于零的 ai 进行“惩罚”。我们可以把稀疏编码目标函式的第一项解释为一个重构项,这一项迫使稀疏编码算法能为输入向量 x 提供一个高拟合度的线性表达式,而公式第二项即“稀疏惩罚”项,它使 x 的表达式变得“稀疏”。常量 λ 是一个变换量,由它来控制这两项式子的相对重要性。

虽然“稀疏性”的最直接测度标准是 “L0” 范式( S ( a i ) = 1 ( | a i | > 0 ) ),但这是不可微的,而且通常很难进行优化。在实际中,稀疏代价函数 S(.) 的普遍选择是L1 范式代价函数 S ( a i ) = | a i | 1 及对数代价函数 S ( a i ) = log ( 1 + a i 2 )

此外,很有可能因为减小 ai 或增加 ϕ i 至很大的常量,使得稀疏惩罚变得非常小。为防止此类事件发生,我们将限制 | | ϕ | | 2 要小于某常量 C 。包含了限制条件的稀疏编码代价函数的完整形式如下:

minimize a i ( j ) , ϕ i j = 1 m | | x ( j ) i = 1 k a i ( j ) ϕ i | | 2 + λ i = 1 k S ( a i ( j ) ) subject to | | ϕ i | | 2 C , i = 1 , . . . , k

2.2 去噪自编码器

除了向代价函数增加一个惩罚项,我们也可以通过改变重构误差项来获得一个能学到有用信息的自编码器。
去噪自编码器(DAE)最小化: L ( x , g ( f ( x ~ ) ) ) ,其中 x ~ 是被某种噪音损坏的x的副本。因此去噪自编码器必须去掉这些损坏,而不是简单的复制输入。去噪过程强制f和g隐式的学习 p d a t a ( x ) 的结构。

2.3 惩罚导数作为正则

另一正则化策略是使用一个类似稀疏自编码器中的惩罚项 Ω L ( x , g ( f ( x ) ) ) + Ω ( h , x ) ,但其形式不同: Ω ( h , x ) = λ i | | x h i | | 2
这样迫使模型学习一个在x变化小时目标也没有太大变化的函数,因为惩罚只对训练数据适用,它使得自编码器学习可以反映2训练数据分布信息的特征。这样的正则化自编码器成为收缩自编码器(CAE)。

猜你喜欢

转载自blog.csdn.net/wyisfish/article/details/80003456