以下內容皆出自於<Hands-On Machine Learning with Scikit-Learn and TensorFlow by Aurélien Géron>
AutoEncoder做了一件事,就是把输入资料复制一份到输出,听上去貌似很简单,仅仅只是一个复制而已。但是,典型的AE还会有所谓的内部表示层(Internal Representation),透过对内部表示层的一些纬度限制,或加入噪声到输入资料,让整个AE的结构更加复杂,整个流程就不是只有 “复制输入到输出”这样简单。
AE的结构更MLP (Multilayer perceptron)几乎如出一辙,但有一点限制:
输出的数量(神经元)要与输入一样!!!!
一个典型的AE结构,长这个样子:
image.png
结构上就是两部分:
其一:有Encoder将输入转译成内部表示层;
其二:再有Decoder,将内部表示层转译成输出;
上图中的例子很简单:
Encoder的部分只有一个含有两个神经元的HiddenLayer,Decdoer的部分只有一个含三个神经元的输出层;因为这种结构,将原先的三维输入,降纬成二维的内部表示层,我们称这种AE为 Undercomplete AutoEncoder。
Stacked AutoEncoder
当然,也可以设计复杂一点的结构,以MNIST的应用为例,其AE的结构长这样:
image.png
上面的AE总共有五层hidden layers,最中间的hiddenlayer(图示H3),书中给了一个叫做“codings”的称呼,又称为“coding layer”,或小名“central hidden layer”等昵称,重点是Stacked AE的结构,伴随着这个中心,必须要对称发展。其形如夹心饼干或三明治;
第一板斧:Tying Weights
理论上越多的hidden layers 貌似越厉害,但是过于复杂的AE,可能造成overfitting,下场就是洗白白。跑训练集的时候准确率超高超牛逼,但跑一个新的测试集时,就傻逼了,错误连篇。
使用tying weights 这个技巧,出了避免overfitting之外,据说可以提升训练效率减少训练时间。
这个技巧怎么使出来呢?有个公式:
套用上面的Stacked AE 的话,会是这样的情况:
不计输入层,从hidden layer1(图H1)开始计算,包含输出层共有6层,所以N=6。从hidden layer5(图H5)转换到输出到权重(W6)是输入转换到hidden layer1的权重(W1)的转置,然后W5是W2的转置,W4是W3的转置,以此类推,对照三明治是一样的。
TensorFlow 的实作上类似于下面这样:
Tie the weights of the encoder and the decoder
如果有去看 Aurélien Géron 在他的书中附录的代码,有三点值得注意的地方:
1.上面示意点W4~W6: 它们只是W3~W1 对应点倒置矩阵,不是变数。在程序代码上就是宣告成transpose,而不是veritable。
2.因为不是变数,所以W4~W6也没有必要去regularize 。程序代码里就只有看到W1~W3使用了regularize。
3.bias并没有与这些权重绑在一起,而且我们不回去regularize bias.
第二板斧:Training One Autoencoder at a Time
“我们不是一次完成整个栈式自编码器的训练,而是一次训练一个浅自编码器,然后将所有这些自编码器堆叠到一个栈式自编码器(因此名称)中,通常要快得多”
image.png
如果你原本用的AE就是上图最右边的,总共五层。我们在第一个阶段先跳过H2,H3,目标是重新仿造input,产出W1,B1,W4,B4跟被转换过的training set(H1的output)。第二阶段的目标测试重新仿造H1的output,考虑H2,H3,并利用第一阶段产生的H1 output当作训练资料,目标产出W2,B2,W3,B3.
第三板斧:Use a Single Graph to Train a Stacked Autoencoder
“使用包含整个栈式自编码器的单个图,以及执行每个训练阶段的一些额外操作,如图 ”
image.png
1,图中的中央列是完整的栈式自编码器。这部分可以在训练后使用。
2,左列是运行第一阶段训练所需的一系列操作。它创建一个绕过隐藏层 2 和 3 的输出层。该输出层与堆叠的自编码器的输出层共享相同的权重和偏置。此外还有旨在使输出尽可能接近输入的训练操作。因此,该阶段将训练隐藏层1和输出层(即,第一自编码器)的权重和偏置。
3,图中的右列是运行第二阶段训练所需的一组操作。它增加了训练操作,目的是使隐藏层 3 的输出尽可能接近隐藏层 1 的输出。注意,我们必须在运行阶段 2 时冻结隐藏层 1。此阶段将训练隐藏层 2 和 3 的权重和偏置(即第二自编码器)。
引用链接:
aotoEncoder 笔记
AE的应用:
1.特征提取,降纬(Feature extraction, Dimensionality reduction)
2.无监督预先训练 (Unsupervised pre-training for DNN, Why does unsupervised pre-training help deep learning?)
3.* 生成模型 (Generative models)













网友评论