如何使用堆叠自动编码器进行预训练

How to use stacked autoencoders for pretraining

假设我希望使用堆叠自动编码器作为预训练步骤。

假设我的全自动编码器是 40-30-10-30-40。

我的步骤是:

  1. 使用输入层和输出层中的原始 40 个特征数据集训练 40-30-40。
  2. 仅使用上面训练的编码器部分,即 40-30 编码器,派生出原始 40 个特征的新的 30 个特征表示。
  3. 在输入层和输出层都使用新的 30 个特征数据集(在步骤 2 中导出)训练 30-10-30。
  4. 将第1步训练好的编码器,40-30,送入第3,30-10步的编码器,得到40-30-10的编码器。
  5. 使用步骤 4 中的 40-30-10 编码器并将其用作 NN 的输入。

a) 正确吗?

b) 我在训练 NN 时是否冻结 40-30-10 编码器中的权重,这与从原始 40 个特征数据集预生成 10 个特征表示并在新的 10 个特征表示上训练相同数据集.

PS。我已经有一个问题问我是否需要绑定编码器和解码器的权重

a) Is that correct?

这是典型的方法之一。您也可以尝试直接安装自动编码器,因为 "raw" 具有那么多层的自动编码器应该可以立即安装,作为替代方案,您可以考虑安装堆叠式降噪自动编码器,这可能会从 "stacked" 培训。

b) Do I freeze the weights in the 40-30-10 encoder when training the NN which would be the same as pregenerating the 10 feature representation from the original 40 feature data set and training on the new 10 feature representation data set.

当你训练整个 NN 时,你不会冻结任何东西。预训练只是优化过程的一种预处理——你告诉你的方法从哪里开始,但你不想限制实际监督学习的拟合过程。

PS. I already have a question out asking about whether I need to tie the weights of the encoder and decoder

不,你不必绑定权重,尤其是你实际上扔掉了你的解码器。为了使最小化过程成为可能(例如在 RBM 的情况下),绑定权重对于一些更具概率性的模型很重要,但对于自动编码器来说没有意义。