0Pricing
Learn AI with Python · 课时

用于表示学习的自编码器

编码器-解码器架构、瓶颈层、重构损失,以及在异常检测中的应用。

用于表示学习的自编码器 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

什么是自编码器?

自编码器会学习将数据压缩成一个小型编码,再将其重建出来。它包含两部分:负责压缩的编码器和负责重建的解码器。中间的压缩过程迫使它学习真正重要的信息。

import torch
import torch.nn as nn

瓶颈概念

中间的窄层称为瓶颈或潜在编码。通过迫使所有信息经过少量数值,网络必须丢弃噪声,同时保留数据的基本结构。

构建编码器

对于 28x28 的图像(784 个像素),编码器会逐步缩小输入:从 784 到 256,再到 64 维的潜在编码。每个 Linear 层后面都会接一个 ReLU 非线性变换。

encoder = nn.Sequential(
    nn.Linear(784, 256),
    nn.ReLU(),
    nn.Linear(256, 64)
)

构建解码器

解码器镜像编码器,将 64 维代码扩展回 784 个像素。最后的 Sigmoid 将输出压缩到 [0,1],以匹配归一化后的像素值。

decoder = nn.Sequential(
    nn.Linear(64, 256),
    nn.ReLU(),
    nn.Linear(256, 784),
    nn.Sigmoid()
)

完整的自编码器

将编码器和解码器连接到一个模块中。前向传递先进行编码,再进行解码,返回一个与输入形状相同的重建结果。

class AutoEncoder(nn.Module):
    def __init__(self, enc, dec):
        super().__init__()
        self.enc, self.dec = enc, dec
    def forward(self, x):
        z = self.enc(x)
        return self.dec(z)

重建损失(MSE)

训练目标就是输入本身。均方误差逐像素衡量重建结果与原始图像之间的差异。最小化该误差可以教会模型进行忠实的压缩。

criterion = nn.MSELoss()

x_flat = x.view(x.size(0), -1)
recon = model(x_flat)
loss = criterion(recon, x_flat)

训练自编码器

训练采用无监督方式:没有标签,只有输入。循环使用标准的 zero_grad、forward、backward、step 流程,但损失比较的是输出与输入。

optimizer.zero_grad()
recon = model(x_flat)
loss = criterion(recon, x_flat)
loss.backward()
optimizer.step()

潜在空间

训练完成后,编码器会将每个输入映射到潜在空间中的一个点。相似的输入会落在彼此附近,因此这个 64 维代码是模型学到的数据紧凑表示。

z = model.enc(x_flat)
print(z.shape)  # [batch, 64]

使用 t-SNE 进行可视化

64 维潜在空间很难直接观察。t-SNE会将其投影到二维空间以便绘图。图中的簇表明,自编码器从未看到标签,却将相似的项目分到了一起。

from sklearn.manifold import TSNE

codes = model.enc(all_data).detach().numpy()
proj = TSNE(n_components=2).fit_transform(codes)
# scatter plot proj colored by true label

异常检测

在正常数据上训练的自编码器能够很好地重建这些数据,但面对从未见过的异常时就会表现不佳。较高的重建误差会标记出离群点,这是一种强大的无监督异常检测器。

errors = ((model(data) - data) ** 2).mean(dim=1)
anomalies = errors > threshold

为什么要进行表示学习

真正有价值的是潜在代码:这是一个学到的特征向量,您可以将其用于聚类、可视化、异常检测,或将其作为另一个模型的输入,而且整个过程无需标签。

快速检查

测试您对自编码器的理解。

回顾:自编码器

您构建了一个编码器(784 到 256 到 64)和一个镜像式解码器,使用MSE 重建损失进行训练且不需要标签。您使用潜在代码进行表示学习,利用t-SNE将其可视化,并通过较高的重建误差检测异常。

常见问题解答

「用于表示学习的自编码器」课时是免费的吗?

是的 — 「用于表示学习的自编码器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「用于表示学习的自编码器」这节课中我会学到什么?

编码器-解码器架构、瓶颈层、重构损失,以及在异常检测中的应用。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「用于表示学习的自编码器」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 用于表示学习的自编码器
  2. 变分自编码器(VAE)
  3. GAN:生成器与判别器
  4. 条件 GAN 与风格迁移
← 返回 Learn AI with Python