8 、自编码器
一、基本概念📌
使用自监督学习pretrain得到auto-encoder
graph LR
A[Image] --> B[NN Encoder]
B --> C[Vector]
C --> D[NN Decoder]
D --> E[Reconstructed Image]
目标:使输入图像和输出图像尽可能接近,这与 CycleGAN 的目标非常相似。通过自监督学习的方式,编码器学习将输入图像压缩为潜在向量(Latent Vector),解码器再根据该潜在向量重建原始图像。在训练过程中,我们并不直接使用标签数据,而是通过 自监督任务(如添加噪声、预测重建等)来强迫模型学习如何有效地提取输入数据的特征。
用于下游任务:经过自监督学习预训练的 编码器 部分,可以作为下游任务的特征提取器。在这个过程中,编码器将输入数据映射到一个 低维潜在空间(即bottleneck,Latent Vector),其中包含了数据的最重要特征。这个潜在表示(Latent Vector)被认为是对输入数据的一个紧凑而有用的描述。
去噪自编码器(Denoising Autoencoder,简称 DAE):其实和BERT很像,也是在输入中加入了噪声
graph LR
A[Noisy Image] --> B[NN Encoder]
B --> C[Latent Vector]
C --> D[NN Decoder]
D --> E[Reconstructed Image]
A -.-> F[Add Noise]
F --> A
style F stroke:#ff3,stroke-width:2px,stroke-dasharray: 5, 5
二、特征解耦📌
通过编码器得到一个潜在向量时,向量里的每个数字代表了输入数据的一部分信息,但我们不知道每个数字具体表示什么。这是因为编码器把所有信息混在了一起,像形状、颜色、背景等都混在同一个向量里,没办法分开。这叫做“特征纠缠”。
“特征解耦”就是想把这些混在一起的信息分开,让每个数字代表一个独立的特征,比如某个数字只代表颜色,另一个数字只代表形状。这样可以让模型更容易理解,也能让它在新数据上表现得更好。
1、离散表示📌
在离散表示的过程中,我们常用 二元表示 或者 one-hot表示 来表示一个潜在向量(latent vector)。这些表示方式主要用于将连续的潜在空间离散化,从而让模型能够在离散的空间中进行学习和生成。
VQ-VAE(Vector Quantized Variational Autoencoder)是一种基于离散潜在表示的变分自编码器,它通过引入量化操作将潜在空间映射到离散的表示中。具体来说,它会将连续的潜在向量映射到一个固定大小的离散字典中,而这个字典是由一组离散的编码向量组成的。这样,VQ-VAE就能够利用这种离散表示来生成和重构数据,而不是像传统的变分自编码器那样使用连续潜在空间。
三、更多应用📌
把decoder当作生成器用,比如VAE,Anomaly Detection
1、异常检测📌
graph LR
A[Input data x] -->|Similar to training data| B[Anomaly Detector]
A -->|Different from training data| C[Anomaly Detector]
B --> D[Normal]
C --> E[Anomaly<br>(outlier, novelty, exceptions)]
Bug
比较容易收集正常资料,异常资料难以收集(one class) → auto-encoder
训练出auto-encoder然后看输入输出差异,如果差异很大则为异常