当前位置: 首页 > article >正文

深度解析对抗训练自编码器(Adversarial Autoencoder, AAE)

深度解析对抗训练自编码器Adversarial Autoencoder, AAE在异常检测和生成模型领域自编码器AutoEncoder通过压缩与重构学习数据的内在规律。然而传统 AE 的隐藏空间Latent Space往往是无序的这限制了它在复杂分布下的表现。对抗训练自编码器Adversarial Autoencoder, AAE通过引入生成对抗网络GAN的思想强制隐藏空间服从特定的先验分布如正态分布从而实现了更强大的特征表达能力。一、 核心概念当 AE 遇见 GANAAE 的核心逻辑可以理解为用 GAN 的对抗机制来正则化 AE 的隐藏空间。1.1 结构组成AAE 由三个主要部分组成编码器 (Encoder)将输入xxx映射为隐藏向量zzz。它既是 AE 的压缩器也是 GAN 中的生成器。解码器 (Decoder)将zzz重构回xxx。判别器 (Discriminator)负责区分zzz是由编码器生成的还是从预定义的先验分布如P(z)∼N(0,1)P(z) \sim N(0, 1)P(z)∼N(0,1)中随机采样出来的。1.2 训练阶段AAE 的训练分为两个交替进行的阶段重构阶段 (Reconstruction Phase)编码器和解码器协同工作最小化输入与输出之间的重构误差MSE。对抗阶段 (Adversarial Phase)判别器更新尽量区分“真随机向量”和“生成的隐藏向量zzz”。编码器更新尽量让生成的zzz骗过判别器即使其分布接近先验分布。二、 常用使用技巧与调试2.1 隐藏空间的“流形”约束在 TSTD时序异常检测中AAE 的优势在于它能将正常数据紧密地约束在先验分布的高概率区域。一旦出现异常其编码后的zzz会偏离该区域。2.2 常见错误判别器过强现象编码器完全无法骗过判别器Loss 居高不下。原因判别器结构太复杂或者学习率过高。解决降低判别器的学习率或在判别器中加入 Dropout。2.3 调试技巧可视化zzz的分布在 Windows 环境下建议定期使用matplotlib绘制隐藏层zzz的散点图。如果zzz呈现出完美的球形对应高斯先验说明对抗平衡达到得很好。三、 相关背景知识讲解3.1 变分自编码器 (VAE) vs AAEVAE 使用 KL 散度来约束隐藏空间这需要解析的概率分布公式。而 AAE 使用对抗训练这使得我们可以使用任何不可微的先验分布如混合高斯、瑞士卷分布等灵活性更高。3.2 判别式正则化传统的 AE 使用L2L2L2正则项防止过拟合。AAE 则通过判别器提供了一种“结构性”的正则化使得隐藏空间不再仅仅是数据的简单压缩而是具备了统计学意义的分布特征。四、 实战演练基于 PyTorch 的 AAE 异常检测系统本项目将实现一个完整的 AAE并在 MNIST 模拟异常检测场景以数字 0 为正常数据其他数字为异常。4.1 环境准备Bashpip install torch torchvision matplotlib numpy4.2 完整代码实现我们将代码分为模型定义、训练逻辑和异常检测三个部分。importtorchimporttorch.nnasnnimporttorch.optimasoptimfromtorchvisionimportdatasets,transformsfromtorch.utils.dataimportDataLoader# 1. 定义 AAE 架构classEncoder(nn.Module):def__init__(self,input_dim,z_dim):super().__init__()self.netnn.Sequential(nn.Linear(input_dim,512),nn.ReLU(),nn.Linear(512,z_dim))defforward(self,x):returnself.net(x)classDecoder(nn.Module):def__init__(self,z_dim,output_dim):super().__init__()self.netnn.Sequential(nn.Linear(z_dim,512),nn.ReLU(),nn.Linear(512,output_dim),nn.Sigmoid())defforward(self,z):returnself.net(z)classDiscriminator(nn.Module):def__init__(self,z_dim):super().__init__()self.netnn.Sequential(nn.Linear(z_dim,256),nn.ReLU(),nn.Linear(256,1),nn.Sigmoid())defforward(self,z):returnself.net(z)# 2. 参数设置z_dim32lr0.0002batch_size64devicetorch.device(cudaiftorch.cuda.is_available()elsecpu)# 3. 初始化模型encoderEncoder(784,z_dim).to(device)decoderDecoder(z_dim,784).to(device)discriminatorDiscriminator(z_dim).to(device)# 优化器optim_reconoptim.Adam(list(encoder.parameters())list(decoder.parameters()),lrlr)optim_genoptim.Adam(encoder.parameters(),lrlr/5)optim_disoptim.Adam(discriminator.parameters(),lrlr/5)# 4. 训练逻辑deftrain(epochs,dataloader):forepochinrange(epochs):fori,(x,_)inenumerate(dataloader):xx.view(-1,784).to(device)curr_batch_sizex.size(0)# --- 阶段 1: 重构阶段 ---optim_recon.zero_grad()zencoder(x)x_hatdecoder(z)recon_lossnn.functional.mse_loss(x_hat,x)recon_loss.backward()optim_recon.step()# --- 阶段 2: 对抗阶段 (判别器更新) ---optim_dis.zero_grad()withtorch.no_grad():z_realtorch.randn(curr_batch_size,z_dim).to(device)# 先验分布采样z_fakeencoder(x).detach()dis_realdiscriminator(z_real)dis_fakediscriminator(z_fake)dis_loss-torch.mean(torch.log(dis_real1e-8)torch.log(1.0-dis_fake1e-8))dis_loss.backward()optim_dis.step()# --- 阶段 3: 对抗阶段 (编码器/生成器更新) ---optim_gen.zero_grad()z_fakeencoder(x)dis_fakediscriminator(z_fake)gen_loss-torch.mean(torch.log(dis_fake1e-8))gen_loss.backward()optim_gen.step()print(fEpoch [{epoch}/{epochs}] Recon Loss:{recon_loss.item():.4f}Dis Loss:{dis_loss.item():.4f})# 加载 MNIST 数据 (仅用数字 0 训练)transformtransforms.Compose([transforms.ToTensor()])mnistdatasets.MNIST(.,trainTrue,downloadTrue,transformtransform)indicesmnist.targets0loaderDataLoader(torch.utils.data.Subset(mnist,torch.where(indices)[0]),batch_sizebatch_size,shuffleTrue)train(10,loader)4.3 预期效果与执行训练阶段模型只学习如何重构数字 “0”。测试阶段当你输入数字 “1” 时即便编码器尝试压缩它由于其隐藏向量zzz无法匹配高斯分布且解码器未见过此类模式重构出的图像会非常模糊。判定指标通过计算MSE(x,x^)MSE(x, \hat{x})MSE(x,x^)作为异常得分。五、 生产部署要点先验分布的选择虽然高斯分布最常用但如果你处理的是循环业务时序可以尝试使用环形先验分布。判别器预训练在某些复杂的 CentOS7 工业环境下可以先固定编码器单独训练判别器几个 Batch让其建立初步的判别能力。模型轻量化AAE 包含三个模型推理时只需要 Encoder 和 Decoder。建议导出为 ONNX在生产环境只保留重构部分。

相关文章:

深度解析对抗训练自编码器(Adversarial Autoencoder, AAE)

深度解析对抗训练自编码器(Adversarial Autoencoder, AAE) 在异常检测和生成模型领域,自编码器(AutoEncoder)通过压缩与重构学习数据的内在规律。然而,传统 AE 的隐藏空间(Latent Space&#xf…...

Leetcode:单调栈系列

本人总结的单调栈大概有三类: 求右边第一个比该元素大(小)的元素求左边第一个比该元素大(小)的元素求两边比该元素大(小)的元素 前两类一般是中等难度的题,完成一次单调栈即可&…...

联合循环——23 电厂建筑屋顶防雷,盘柜中性点地排设计说明

一、屋顶防雷 (1)放电类型: 90%云对地放电是负极性,总的来说,放电开始于云端的负电荷而扩展到正电荷的地面。然而,大量的放电现象发生在云层之间。 (2)雷电波幅: 80%雷击…...

【广度优先搜索】【分类讨论】900. 最佳运动员的比拼回合

作者推荐 视频算法专题 本文涉及知识点 广度优先搜索 分类讨论 LeetCode : 1900. 最佳运动员的比拼回合 n 名运动员参与一场锦标赛,所有运动员站成一排,并根据 最开始的 站位从 1 到 n 编号(运动员 1 是这一排中的第一个运动员&#xff…...

【计网】什么是移动计算?中国Java之父余胜军被刷爆的CDN又是什么?

目录 一、移动计算 1. 理解移动计算 2. 应用实例 二、数据缓存和内容分发网络(CDN) 1. 数据缓存 2. 内容分发网络(CDN) 3. CDN与数据缓存的联系 三、余胜军开了个网站,说CDN被刷爆了,他是什么意思&…...

史上最全msys2下载配置操作步骤

史上最全msys2下载配置操作步骤一,MSYS2简介二,软件下载三,pacman配置四,总结!推荐参考B站视频:《3分钟搞定msys2的安装与配置》 一,MSYS2简介 面向Windows的软件分发与构建平台 MSYS2是一个…...

wow-iot 编码指南

项目地址&#xff1a;https://github.com/wow-iot3/wow_linux_eval 1、命名规则 &#xff08;1&#xff09;数据类型整数类型使用<stdint.h>内定义格式&#xff0c;约束为&#xff1a;int8_t/uint8_tint16_t/uint16_tint32_t/uint32_tint64_t/uint64_t&#xff08;2&…...

【大数据】分布式存储系统GFS与HDFS、高可用与高容错解析

目录 一、Chunk & Block 二、Master & Chunk Server&#xff1a;存储与计算的解耦&#xff1f; 1. 不准确&#xff01; 2. 调度与存储处理的解耦 解耦的具体含义 为什么这样设计&#xff1f; 3. NameNode & DataNode NameNode&#xff08;元数据管理&…...

PyCaret高性能计算:GPU加速训练指南

PyCaret高性能计算&#xff1a;GPU加速训练指南 【免费下载链接】pycaret An open-source, low-code machine learning library in Python 项目地址: https://gitcode.com/gh_mirrors/py/pycaret PyCaret是一个开源的低代码机器学习库&#xff0c;通过GPU加速功能可以显…...

pydata-book沟通技巧:如何向非技术人员解释数据分析结果

pydata-book沟通技巧&#xff1a;如何向非技术人员解释数据分析结果 【免费下载链接】pydata-book wesm/pydata-book: 这是Wes McKinney编写的《Python for Data Analysis》一书的源代码仓库&#xff0c;书中涵盖了使用pandas、NumPy和其他相关库进行数据处理和分析的实践案例和…...

从Swin到VMamba:视觉Transformer的效率革命

从Swin到VMamba&#xff1a;视觉Transformer的效率革命 【免费下载链接】VMamba 项目地址: https://gitcode.com/gh_mirrors/vm/VMamba 在计算机视觉领域&#xff0c;设计计算效率高的网络架构一直是持续的需求。随着视觉Transformer的发展&#xff0c;从Swin Transfor…...

终极SSH文件系统指南:sshfs如何让远程文件访问像本地一样简单

终极SSH文件系统指南&#xff1a;sshfs如何让远程文件访问像本地一样简单 【免费下载链接】sshfs File system based on the SSH File Transfer Protocol 项目地址: https://gitcode.com/gh_mirrors/ssh/sshfs sshfs是一款基于SSH文件传输协议的文件系统客户端&#xff…...

IEC 61850标准协议解读 5.基于Java的MMS实现 lec61850bean

专栏文章目录 第一章 IEC 61850标准协议解读 0.导言 第二章 IEC 61850标准协议解读 1.建模讲解 第三章 IEC 61850标准协议解读 2.基于Java的MMS实现 目录 专栏文章目录 前言 1 依赖库引入 2 创建服务端 3 创建客户端 4 读写模型 4.1 服务端读写 4.2 客户端读写 5.报告 6 文件服…...

wow-time时间操作说明

wow-time文件说明 项目地址&#xff1a;https://github.com/wow-iot3/wow_linux_eval本文件的功能主要用于处理时间操作&#xff0c;主要涉及时间信息获取(普通格式与cp56格式)、设置时间、格式转换、获取时间戳、获取毫秒数&#xff1b; 获取时间信息 int wow_time_get_cp56(C…...

探秘 ESCRCPY:一款高效便捷的无线屏幕镜像工具

探秘 ESCRCPY&#xff1a;一款高效便捷的无线屏幕镜像工具 【免费下载链接】escrcpy &#x1f4f1; Graphical Scrcpy to display and control Android, devices powered by Electron. | 使用图形化的 Scrcpy 显示和控制您的 Android 设备&#xff0c;由 Electron 驱动。 项目…...

100元打造便携显示器:PocketLCD完整物料清单与采购指南

100元打造便携显示器&#xff1a;PocketLCD完整物料清单与采购指南 【免费下载链接】PocketLCD 带充电宝功能的便携显示器 项目地址: https://gitcode.com/gh_mirrors/po/PocketLCD PocketLCD是一款带充电宝功能的便携显示器开源项目&#xff0c;让你花最少的成本拥有一…...

CGAL计算几何算法库完全指南:从入门到精通的终极教程

CGAL计算几何算法库完全指南&#xff1a;从入门到精通的终极教程 【免费下载链接】cgal The public CGAL repository, see the README below 项目地址: https://gitcode.com/gh_mirrors/cg/cgal CGAL&#xff08;Computational Geometry Algorithms Library&#xff09;…...

WHAT - 浏览器缓存机制系列(二)强缓存、协商缓存和启发式缓存

目录 一、介绍 二、强缓存 三、协商缓存 三、html & js 缓存策略 四、启发式缓存 启发式缓存什么时候发生 浏览器的推算规则 如果没有 Last-Modified DevTools 里怎么看出是启发式缓存 启发式缓存的风险 1. 浏览器行为不一致 2. 更新不可控 3. CDN 行为不同 总结 今天主要介…...

如何使用CoreRT:.NET Core终极AOT编译优化指南

如何使用CoreRT&#xff1a;.NET Core终极AOT编译优化指南 【免费下载链接】corert This repo contains CoreRT, an experimental .NET Core runtime optimized for AOT (ahead of time compilation) scenarios, with the accompanying compiler toolchain. 项目地址: https:…...

如何快速上手LedisDB:高性能NoSQL数据库的完整指南

如何快速上手LedisDB&#xff1a;高性能NoSQL数据库的完整指南 【免费下载链接】ledisdb A high performance NoSQL Database Server powered by Go 项目地址: https://gitcode.com/gh_mirrors/le/ledisdb LedisDB是一个由Go语言驱动的高性能NoSQL数据库服务器&#xff…...

mmdetection目标检测API封装:Python SDK开发全攻略

mmdetection目标检测API封装&#xff1a;Python SDK开发全攻略 【免费下载链接】mmdetection open-mmlab/mmdetection: 是一个基于 PyTorch 的人工智能物体检测库&#xff0c;支持多种物体检测算法和工具。该项目提供了一个简单易用的人工智能物体检测库&#xff0c;可以方便地…...

如何在Linux终端使用sc-im?新手入门的完整指南

如何在Linux终端使用sc-im&#xff1f;新手入门的完整指南 【免费下载链接】sc-im sc-im - Spreadsheet Calculator Improvised -- An ncurses spreadsheet program for terminal 项目地址: https://gitcode.com/gh_mirrors/sc/sc-im sc-im是一款功能强大的终端电子表格…...

TOMs插件生态系统:10个必装的官方认证扩展推荐

TOMs插件生态系统&#xff1a;10个必装的官方认证扩展推荐 【免费下载链接】TOMs TOMs is a fully open-source, high-performance, systematic, plugin-oriented, and scenario-agnostic general-purpose development framework. 项目地址: https://gitcode.com/gh_mirrors…...

探索未来桌面体验:AeroSpace Beta,专为Mac打造的高级窗口管理器

探索未来桌面体验&#xff1a;AeroSpace Beta&#xff0c;专为Mac打造的高级窗口管理器 【免费下载链接】AeroSpace AeroSpace is an i3-like tiling window manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ae/AeroSpace 在数字化的世界里&#xff0…...

如何快速入门Wireshark?Computer-Networking-A-Top-Down-Approach-NOTES实验教程

如何快速入门Wireshark&#xff1f;Computer-Networking-A-Top-Down-Approach-NOTES实验教程 【免费下载链接】Computer-Networking-A-Top-Down-Approach-NOTES 《计算机网络&#xff0d;自顶向下方法(原书第6版)》编程作业&#xff0c;Wireshark实验文档的翻译和解答。 项目…...

python-docx常见问题解答:新手必知的15个错误和解决方案

python-docx常见问题解答&#xff1a;新手必知的15个错误和解决方案 【免费下载链接】python-docx Create and modify Word documents with Python 项目地址: https://gitcode.com/gh_mirrors/py/python-docx python-docx是一个强大的Python库&#xff0c;用于创建和修改…...

智动群剪视频矩阵引

链接&#xff1a;https://pan.quark.cn/s/358832aed834智动群剪视频矩阵引擎&#xff0c;批量制作视频软件软件使用步骤&#xff1a;1.加入素材&#xff08;手动添加或复制素材到对应目录&#xff09; 2.勾选需要用到的素材 3.选择功能&#xff0c;修改数值 4.一键开始制作视频…...

AI变声器

链接&#xff1a;https://pan.quark.cn/s/fa61e826ee5e...

AI变声器+

链接&#xff1a;https://pan.quark.cn/s/9b9dd9ddd66d...

终极指南:Upspin核心架构完全解析——三大服务如何构建全球命名系统

终极指南&#xff1a;Upspin核心架构完全解析——三大服务如何构建全球命名系统 【免费下载链接】upspin Upspin: A framework for naming everyones everything. 项目地址: https://gitcode.com/gh_mirrors/up/upspin Upspin是一个创新的全球命名系统框架&#xff0c;旨…...