什么是自编码器?代码举例讲解

自编码器(Autoencoder)是一种无监督学习的神经网络,它的目标是学习一个数据的压缩表示。
它包含两个部分:编码器(Encoder)和解码器(Decoder)。编码器用于压缩原始输入数据,解码器用于重构原始输入数据。

其工作原理为:

  1. 输入数据x输入到编码器中。
  2. 编码器压缩x成低维的编码c。
  3. 解码器将编码c重构为重构数据x’。
  4. 调整encoder和decoder的参数,最小化x和x’之间的损失函数,学习输入数据的特征表示。

其 Mathematica 表示为:

encoder: c = f(x; θe) 
decoder: x' = g(c; θd)
loss = L(x, x')

typical的代码实现为:

python
class Autoencoder(nn.Module):
    def __init__(self):
        super(Autoencoder, self).__init__()

        #编码器
        self.encoder = nn.Sequential(
            nn.Linear(28*28, 128),
            nn.Tanh(),
            nn.Linear(128, 64), 
            nn.Tanh(), 
            nn.Linear(64, 12),  
            nn.Tanh()
        )

        #解码器
        self.decoder = nn.Sequential(
            nn.Linear(12, 64),
            nn.Tanh(),
            nn.Linear(64, 128),
            nn.Tanh(), 
            nn.Linear(128, 28*28),
            nn.Sigmoid()
        )

    def forward(self, x):
        encoded = self.encoder(x)
        decoded = self.decoder(encoded)
        return encoded, decoded

所以,自编码器通过重构输入数据,可以发现其内在的特征结构,并学习数据的有效特征编码。它是一种简单而有效的无监督特征学习方法,可应用于数据压缩、特征表达学习、异常检测等任务。