噪声数据是最常见的机器学习问题之一,使用自动编码器能够有效解决此类问题。本文就将介绍自动编码器,从自动编码器的结构开始,教大家如何正确训练自动编码器。
自动编码器是一种人工神经网络,用于以无监督方式学习数据编码。其目的是通过训练网络捕获输入图像的最重要部分,为高维数据学习低维表示(编码),通常用于降维。
自动编码器的架构
自动编码器由3部分组成:
1.编码器:将训练-验证-测试集输入数据压缩成编码表示的模块,通常比输入数据小几个数量级。
2.瓶颈:包含压缩知识表示的模块,因此是网络中最重要的部分。
3.解码器:帮助网络“解压缩”知识表示并从其编码形式重构数据的模块。然后将输出与地面实况进行比较。
整个架构看起来像这样,如下图:
编码器、瓶颈和解码器之间的关系
编码器
编码器是一组卷积块,后面是池化模块,将模型的输入压缩到称为瓶颈的紧凑部分。
瓶颈之后是解码器,它由一系列上采样模块组成,用于将压缩后的特征恢复为图像形式。在简单的自动编码器的情况下,输出预计与噪声降低的输入相同。
然而,对于变分自动编码器,它是一个全新的图像,由模型作为输入提供的信息形成。
瓶颈
作为神经网络中最重要的部分,会限制信息从编码器流向解码器,只允许最重要的信息通过。
由于瓶颈的设计是为了捕获图像所拥有的特征信息,我们可以说瓶颈帮助形成输入的知识表示。编码器-解码器结构帮助我们以数据的形式从图像中提取更多信息,并为网络中的各种输入之间建立有用的相关性。
作为输入的压缩表示的瓶颈会进一步防止神经网络记忆输入和对数据的过度拟合。瓶颈越小,过度拟合的风险就越低。但非常小的瓶颈会限制可存储的信息量,这会增加重要信息从编码器的池化层中漏出的机会。
解码器
最后,解码器是一组上采样和卷积块,用于重建瓶颈的输出。
由于解码器的输入是压缩的知识表示,因此解码器充当“解压缩器”并从其潜在属性重建图像。
了解完自动编码器的结果和关系后,我们接着来看如何正确训练自动编码器。
如何训练自动编码器?
在训练自动编码器之前需要设置4个超参数:
1.代码大小
代码大小或瓶颈大小是用于调整自动编码器的最重要的超参数。瓶颈大小决定了必须压缩多少数据。这也可以作为正则化项。
2.层数
与所有神经网络一样,调整自动编码器的一个重要超参数是编码器和解码器的深度。虽然较高的深度会增加模型的复杂性,但较低的深度处理速度更快。
3.每层节点数
每层节点数定义了我们每层使用的权重。通常,节点的数量随着自动编码器中每个后续层的减少而减少,因为这些层中的每一个的输入在层中变得更小。
4.重建损失
我们用来训练自动编码器的损失函数高度依赖于我们希望自动编码器适应的输入和输出类型。如果我们处理图像数据,最流行的重建损失函数是MSE损失函数和L1损失函数。如果输入和输出在[0,1]范围内,就像在MNIST数据集中一样,我们也可以使用二元交叉熵作为重建损失。