为字节序列分类训练自动编码器时出现问题



我正在执行一项分类任务,该任务使用字节序列作为样本。通过对每个字节x应用x/255,可以将字节序列标准化为神经网络的输入。通过这种方式,我训练了一个简单的MLP,准确率约为80%。然后,我在整个数据上使用"mse"损失训练了一个自动编码器,看看它是否能很好地完成任务。我冻结了编码器层的权重,并添加了一个softmax密集层进行分类。我重新训练了新模型(只训练了最后一层),令我惊讶的是,结果比MLP差得多,只有60%的准确率。

自动编码器不能从所有数据中学习好的功能吗?为什么结果如此糟糕?

可能采取的行动:

  • 检查自动编码器的错误,它真的能预测自己吗
  • 可视化自动编码器结果(降维),是否用较少的维度来解释方差
  • 使模型更复杂并不一定比简单的模型好,你有没有绘制验证mse与epoch的关系图?经过若干步骤后是否存在全局最小值
  • 您有足够的时期
  • 您的自动编码器中有多少单元?它可能太少(或者太多,如果填充不足),这取决于数据的行为及其容量
  • 您是否与PCA、NMF等其他降维方法进行了比较
  • 最后但同样重要的是,这是用自动编码器设计您的功能以完成此任务的最佳方式吗

"为什么结果这么糟糕?"这其实并不令人惊讶。您已经将一个模型训练为擅长压缩信息。它在每一层学习的转换根本不需要对任何其他类型的任务都有好处。事实上,它可能会丢弃大量信息,这些信息对你所拥有的任何辅助分类任务都非常有用,但对于纯粹压缩和重建序列的任务来说,这些信息是不需要的。

与其通过训练一个单独的自动编码器来实现它,不如将MLP层的稀疏性惩罚项添加到损失函数中,或者使用其他类型的正则化,如丢弃。最后,您可以考虑为1D序列修改更高级的网络架构,如ResNet/ODE层或Inception层。

相关内容

  • 没有找到相关文章

最新更新