【TensorFlow深度学习】自我编码器的演变:从基础AE到变分AE模型

自我编码器的演变:从基础AE到变分AE模型

      • 一、基础自我编码器:维度的压缩与重构
      • 二、变分自我编码器:从确定性到概率性
      • 三、理论与实践的桥梁:变分推理与KL散度
      • 四、变分AE的应用拓展
      • 五、结论

自我编码器(Autoencoder, AE)作为深度学习领域的一种强大工具,经历了从简单到复杂,从基础到高级的演变历程。在自我监督学习框架下,AE不仅在降维和特征学习上展现出了非凡的能力,而且通过变分AE(Variational Autoencoder, VAE)的引入,更是将生成模型推向了一个新的高度。本文将追溯AE的发展脉络,重点分析基础AE到变分AE的转变,探讨其背后的理论支撑与应用价值,并通过关键代码片段展示这一演变过程。

一、基础自我编码器:维度的压缩与重构

基础自我编码器的核心目标是对输入数据进行编码后重构,这一过程促进了对数据的有效表示学习。它通常包含两个主要部分:编码器和解码器,分别负责数据的压缩和重构。

代码示例:基础AE模型

import torch
import torch.nn as nn

class BasicAutoencoder(nn.Module):
    def __init__(self, input_dim, encoding_dim):
        super(BasicAutoencoder, self).__init__()
        self.encoder = nn.Sequential(
            nn.Linear(input_dim, encoding_dim),
            nn.ReLU(True)
        )
        self.decoder = nn.Sequential(
            nn.Linear(encoding_dim, input_dim),
            nn.Sigmoid()  # 使用Sigmoid激活函数以约束输出范围在0-1之间
        )
        
    def forward(self, x):
        encoded = self.encoder(x)
        decoded = self.decoder(encoded)
        return decoded

# 实例化模型
input_dim = 784  # 假设输入数据维度为MNIST图像的像素数量
encoding_dim = 32  # 编码维度
model = BasicAutoencoder(input_dim, encoding_dim)

# 训练模型的伪代码
optimizer = torch.optim.Adam(model.parameters())
loss_fn = nn.MSELoss()

for epoch in range(num_epochs):
    for data in dataloader:
        img, _ = data
        output = model(img)
        loss = loss_fn(output, img)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

二、变分自我编码器:从确定性到概率性

变分AE模型引入了概率视角,通过引入隐变量并利用贝叶斯推断来学习数据分布。核心思想是将编码过程视为从输入数据分布到潜在变量(z)的近似后验分布的学习,而解码则是基于这个潜在变量重构输入。

代码示例:变分AE模型

class VariationalAutoencoder(nn.Module):
    def __init__(self, input_dim, latent_dim, hidden_dim):
        super(VariationalAutoencoder, self).__init__()
        self.encoder = nn.Sequential(
            nn.Linear(input_dim, hidden_dim),
            nn.ReLU(True),
            nn.Linear(hidden_dim, 2 * latent_dim)  # 输出均值和对数方差
        )
        
        self.decoder = nn.Sequential(
            nn.Linear(latent_dim, hidden_dim),
            nn.ReLU(True),
            nn.Linear(hidden_dim, input_dim),
            nn.Sigmoid()
        )
    
    def reparameterize(self, mu, logvar):
        std = torch.exp(0.5*logvar)
        eps = torch.randn_like(std)
        return mu + eps*std
        
    def forward(self, x):
        h = self.encoder(x)
        mu, logvar = torch.chunk(h, 2, dim=1)
        z = self.reparameterize(mu, logvar)
        decoded = self.decoder(z)
        return decoded, mu, logvar

# 训练变分AE的损失函数包括重构损失和KL散度损失
def vae_loss_function(recon_x, x, mu, logvar):
    MSE = nn.functional.binary_cross_entropy(recon_x, x, reduction='sum')
    KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
    return MSE + KLD

# 与基础AE类似,但损失函数使用vae_loss_function

三、理论与实践的桥梁:变分推理与KL散度

变分AE的核心在于变分推理,它通过最大化数据的证据下界(ELBO)来最小化重构误差并鼓励潜在空间的正则化。KL散度项确保了潜在变量z接近一个先验分布(通常是标准正态分布),这一特性为生成新的数据样本提供了可能性。

四、变分AE的应用拓展

变分AE不仅限于数据压缩和降维,还广泛应用于数据生成、图像合成、风格迁移等领域。其强大的生成能力源自于对潜在空间的有效探索,允许模型在训练完成后创造未见过的数据实例。

五、结论

从基础AE到变分AE的进化,不仅是技术上的突破,也是对数据本质理解的深化。变分AE通过引入概率框架,不仅提高了模型的表达能力,还为其在生成任务上的应用打开了新世界的大门。未来,随着对变分推断技术的进一步优化和新架构的探索,自我编码器将继续在深度学习领域扮演重要角色,引领更多创新应用的诞生。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/754989.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DP(动态规划)【2】 最大连续子列和 最长不降子序列

1.最大连续子列和 #include <iostream> #include <vector> #include <cmath> #include <string> #include <cstring> #include <queue> using namespace std; const int N10002,maxn10;int n,m,k,f[N]{0},dp[N]{0};int main() {scanf(&quo…

1.SQL注入-数字型

SQL注入-数字型(post) 查询1的时候发现url后面的链接没有传入1的参数。验证为post请求方式&#xff0c;仅显示用户和邮箱 通过图中的显示的字段&#xff0c;我们可以猜测传入数据库里面的语句&#xff0c;例如&#xff1a; select 字段1,字段2 from 表名 where id1; 编辑一个…

【漏洞复现】宏景HCM人力资源信息管理系统——任意文件读取漏洞

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 宏景HCM人力资源信息管理系统是一款全面覆盖人力资源管理各模块…

GPT-4o首次引入!全新图像自动评估基准发布!

目录 01 什么是DreamBench&#xff1f; 02 与人类对齐的自动化评估 03 更全面的个性化数据集 04 实验结果 面对层出不穷的个性化图像生成技术&#xff0c;一个新问题摆在眼前&#xff1a;缺乏统一标准来衡量这些生成的图片是否符合人们的喜好。 对此&#xff0c;来自清华大…

心理辅导平台系统

摘 要 中文本论文基于Java Web技术设计与实现了一个心理辅导平台。通过对国内外心理辅导平台发展现状的调研&#xff0c;本文分析了心理辅导平台的背景与意义&#xff0c;并提出了论文研究内容与创新点。在相关技术介绍部分&#xff0c;对Java Web、SpringBoot、B/S架构、MVC模…

lvs+上一章的内容

书接上回这次加了个keepalived 一、集群与分布式 1.1 集群介绍 **集群&#xff08;Cluster&#xff09;**是将多台计算机组合成一个系统&#xff0c;以解决特定问题的计算机集合。集群系统可以分为以下三种类型&#xff1a; **LB&#xff08;Load Balancing&#xff0c;负载…

Golang | Leetcode Golang题解之第203题移除链表元素

题目&#xff1a; 题解&#xff1a; func removeElements(head *ListNode, val int) *ListNode {dummyHead : &ListNode{Next: head}for tmp : dummyHead; tmp.Next ! nil; {if tmp.Next.Val val {tmp.Next tmp.Next.Next} else {tmp tmp.Next}}return dummyHead.Next …

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 数字排列游戏(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

【论文复现】——基于LM优化的NDT点云配准算法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 1、论文概述 传统的正态分布变换配准算法处理初始位姿变换相…

修改网络的结构用于预训练

目录 一、模型准备 二、修改结构 1、在网络中添加一层 2、在classifier结点添加一个线性层 3、修改网络中的某一层(features 结点举例&#xff09; 4、替换网络中的某一层结构&#xff08;与第3点类似&#xff09; 5、提取全连接层的输入特征数和输出特征数 6、删除网络…

springboot + Vue前后端项目(第二十一记)

项目实战第二十一记 写在前面1. springboot文件默认传输限制2. 安装视频插件包命令3. 前台Video.vue4. 创建视频播放组件videoDetail.vue5. 路由6. 效果图总结写在最后 写在前面 本篇主要讲解系统集成视频播放插件 1. springboot文件默认传输限制 在application.yml文件中添…

《昇思25天学习打卡营第2天|快速入门》

文章目录 前言&#xff1a;今日所学&#xff1a;1. 数据集处理2. 网络的构建3. 模型训练4. 保存模型5. 加载模型 总体代码与运行结果&#xff1a;1. 总体代码2. 运行结果 前言&#xff1a; 今天是学习打卡的第2天&#xff0c;今天的内容是对MindSpore的一个快速入门&#xff0…

Selenium IDE 的使用指南

Selenium IDE 的使用指南 在自动化测试的领域中&#xff0c;Selenium 是一个广为人知且强大的工具集。而 Selenium IDE 作为其中的一个组件&#xff0c;为测试人员提供了一种便捷且直观的方式来创建和执行自动化测试脚本。 一、Selenium IDE 简介 Selenium IDE 是一个用于录…

第十三章 常用类

一、包装类 1. 包装类的分类 &#xff08;1&#xff09;针对八种基本数据类型相应的引用类型—包装类 &#xff08;2&#xff09;有了类的特点&#xff0c;就可以调用类中的方法。 2. 包装类和基本数据的转换 jdk5 前的手动装箱和拆箱方式&#xff0c;装箱&#xff1a;基本…

【Qt】信号和槽机制

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

操作系统之《PV操作》【知识点+详细解题过程】

1、并发进程 &#xff1a; 并发的实质是一个处理器在几个进程之间的多路复用&#xff0c;并发是对有限的物理资源强制行使多用户共享&#xff0c;消除计算机部件之间的互等现象&#xff0c;以提高系统资源利用率。 &#xff08;1&#xff09;并发进程——互斥性&#xff1a; 进…

使用Jetpack Compose实现具有多选功能的图片网格

使用Jetpack Compose实现具有多选功能的图片网格 在现代应用中,多选功能是一项常见且重要的需求。例如,Google Photos允许用户轻松选择多个照片进行分享、添加到相册或删除。在本文中,我们将展示如何使用Jetpack Compose实现类似的多选行为,最终效果如下: 主要步骤 实现…

【redis】Redis AOF

1、AOF的基本概念 AOF持久化方式是通过保存Redis所执行的写命令来记录数据库状态的。AOF以日志的形式来记录每个写操作&#xff08;增量保存&#xff09;&#xff0c;将Redis执行过的所有写指令记录下来&#xff08;读操作不记录&#xff09;。AOF文件是一个只追加的文件&…

Redis 高级数据结构业务实践

0、前言 本文所有代码可见 > 【gitee code demo】 本文会涉及 hyperloglog 、GEO、bitmap、布隆过滤器的介绍和业务实践 1、HyperLogLog 1.1、功能 基数统计&#xff08;去重&#xff09; 1.2、redis api 命令作用案例PFADD key element [element ...]添加元素到keyPF…

PortSip测试

安装PBX 下载 免费下载 PortSIP PBX 安装PBX&#xff0c;安装后&#xff0c;运行 &#xff0c;默认用户是admin 密码是admin&#xff0c;然后配置IP 为192.168.0.189 设置域名为192.168.0.189 配置分机 添加分机&#xff0c;添加了10001、10002、9999 三个分机&#xff0c…