【深度学习】自编码器(Autoencoder, AE)

ops/2025/1/16 5:25:43/

自编码器(Autoencoder, AE)是一种无监督学习模型,主要用于特征提取、数据降维、去噪和生成模型等任务。它的核心思想是通过将输入压缩到一个低维的潜在空间表示(编码过程),然后再从这个潜在表示重构输入(解码过程),从而使得模型能够学习数据的内在结构。

自编码器的基本结构

自编码器通常由两个部分组成:

  1. 编码器(Encoder)

    • 将高维输入数据映射到低维的潜在表示空间。
    • 通常用一个或多个全连接层(或卷积层)实现,激活函数常用ReLU或其他非线性函数。
  2. 解码器(Decoder)

    • 将潜在表示重新映射到原始输入空间,试图重建输入。
    • 结构通常对称于编码器,输出层的维度与输入层相同。

损失函数
自编码器的目标是最小化输入与重构之间的误差,常用均方误差(MSE)作为损失函数:

其中,x为输入数据,x^为重构数据。


自编码器的种类

  1. 基本自编码器(Vanilla Autoencoder)最简单的形式,编码和解码均为全连接神经网络

  2. 去噪自编码器(Denoising Autoencoder, DAE)在训练时对输入添加噪声,但目标是还原无噪声的原始输入,从而提高模型的鲁棒性。

  3. 稀疏自编码器(Sparse Autoencoder, SAE)通过在潜在表示中添加稀疏性约束(例如KL散度),使模型仅激活少量神经元,达到特征选择的效果。

  4. 变分自编码器(Variational Autoencoder, VAE)引入概率分布,将潜在表示建模为一个分布(如高斯分布),并通过最大化证据下界(ELBO)进行优化。

  5. 卷积自编码器(Convolutional Autoencoder, CAE)适用于图像数据,用卷积层和池化层代替全连接层进行编码和解码。

  6. 条件自编码器(Conditional Autoencoder, CAE)在编码过程中引入条件信息(如类别标签)以进行有条件的生成或特征提取。

  7. 对抗自编码器(Adversarial Autoencoder, AAE)结合生成对抗网络(GAN)的思想,通过对潜在空间分布施加对抗性约束,得到更好的分布表示。


自编码器的应用

  1. 数据降维
    自编码器可以作为一种非线性降维工具,与PCA类似,但更灵活。

  2. 去噪
    去噪自编码器可以从带噪数据中恢复原始数据,应用于信号处理、图像处理等领域。

  3. 异常检测
    使用重构误差作为检测指标,大的重构误差通常表明输入是异常数据。

  4. 生成模型
    变分自编码器和对抗自编码器可以生成逼真的新数据。

  5. 特征学习
    自编码器的潜在表示可以作为输入的紧凑特征,用于下游任务(如分类或回归)。

  6. 图像处理
    卷积自编码器被广泛应用于图像压缩、去模糊和超分辨率等任务。


实现示例(PyTorch):用PyTorch构建一个基本的自编码器,并对图像数据(如MNIST)进行重构任务。

import torch
import torch.nn as nn
import torch.optim as optim# 定义自编码器模型
class Autoencoder(nn.Module):def __init__(self):super(Autoencoder, self).__init__()# 编码器self.encoder = nn.Sequential(nn.Linear(784, 128),nn.ReLU(),nn.Linear(128, 64),nn.ReLU(),nn.Linear(64, 32))# 解码器self.decoder = nn.Sequential(nn.Linear(32, 64),nn.ReLU(),nn.Linear(64, 128),nn.ReLU(),nn.Linear(128, 784),nn.Sigmoid()  # 将输出值压缩到[0,1]范围)def forward(self, x):x = self.encoder(x)x = self.decoder(x)return x# 创建模型
model = Autoencoder()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 模拟训练
for epoch in range(10):for data in dataloader:  # 假设dataloader已定义并提供批量输入inputs = data.view(-1, 784)  # 将输入展平outputs = model(inputs)loss = criterion(outputs, inputs)  # 计算重构误差optimizer.zero_grad()loss.backward()optimizer.step()print(f"Epoch [{epoch+1}/10], Loss: {loss.item():.4f}")


http://www.ppmy.cn/ops/150473.html

相关文章

Spring官网构建Springboot工程

注意:基于Idea的 Spring Initializr 快速构建 SpringBoot 工程时需要联网。 1.进入SpringBoot官网 Spring | Home 点击QUICKSTART 点击start.spring.io进入spring initializr 2.选择依赖 3.生成工程 下载好后解压用IDEAD导入即可。

redhat安装docker 24.0.7

1、下载docker镜像包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz 2、解压 tar -xvf docker-24.0.7.tgz 3、解压的docker文件夹全部移动至/usr/bin目录 cd docker cp -p docker/* /usr/bin 4、注册服务 vi /usr/lib/systemd/syste…

CNN中模型的参数量与FLOPs计算

CNN中模型的参数量与FLOPs计算 一个卷积神经网络的基本构成一般有卷积层、归一化层、激活层和线性层。这里我们就通过逐步计算这些层来计算一个CNN模型所需要的参数量和FLOPs吧. 另外,FLOPs的全程为floating point operations的缩写(小写s表复数&#x…

2_CSS3 背景 --[CSS3 进阶之路]

CSS3 中的背景属性提供了许多强大的功能来增强网页设计,包括但不限于多背景图像、渐变、背景大小控制等。以下是一些关键的 CSS3 背景属性及其用法示例。 1. 多重背景图像 CSS3 允许你为一个元素设置多个背景图像。这些图像按照它们在 background-image 属性中定义…

软件设计:工厂设计模式

工厂模式分为简单工厂模式,工厂方法模式和抽象工厂模式,它们都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,目的是降低系统中代码耦合度,并且增强了系统的扩展性。 ​ 还有一个很重要的原因…

python识别图片中指定颜色的图案并保存为图片

示例代码: def chuli(color):import cv2import numpy as np# 定义颜色名称到HSV阈值范围的映射color_thresholds {red: ([0, 100, 100], [10, 255, 255], [160, 100, 100], [180, 255, 255]),yellow: ([20, 100, 100], [30, 255, 255]),blue: ([90, 100, 100], [1…

C++实现设计模式---策略模式 (Strategy)

策略模式 (Strategy) 策略模式 是一种行为型设计模式,它定义了一系列算法,并将每种算法封装到独立的类中,使得它们可以相互替换。策略模式让算法的变化不会影响使用算法的客户端。 意图 将算法的定义与使用分离。通过封装和组合的方式&…

【Linux】正则表达式

正则表达式是一种可供Linux工具过滤文本的自定义模板,Linux工具(如sed、gawk)会在读取数据时使用正则表达式对数据进行模式匹配。 正则表达式使用元字符来描述数据流中的一个或多个字符。它是由正则表达式引擎实现的。正则表达式引擎是一种底…