神经网络通俗理解学习笔记(4) 深度生成模型VAE、GAN

ops/2024/11/15 0:29:51/

深度生成模型

    • 什么是生成式模型
    • 蒙特卡洛方法
    • 变分推断Variational Inference
    • 变分自编码器VAE
    • 生成对抗网络Generative Adversarial Network
    • Diffusion 扩散模型

什么是生成式模型

判别式和生成式模型
判别式:CNN/RNN/transformer;生成式:AE/VAE/GAN
判别式模型学习类别边界,生成式学习数据分布

生成式模型以判别式模型为基础,通过一种组合得到的更复杂的模型

在这里插入图片描述

蒙特卡洛方法

用于求解复杂数学问题
或者实际生活中模拟概率事件
简单说就是求解概率分布问题的近似方法
目的就是估计数据的概率分布

采样 sampling
采样可以减小积分等计算量,便于各种统计推断和模型优化
蒙特卡洛采样:从概率分布中抽出样本,从而得到分布的近似

在这里插入图片描述

Importance Sampling
用于估计难以采样的分布的期望值
用易于采样的参考分布生成样本,然后用权重系数调整估计

在这里插入图片描述
马尔科夫链蒙特卡洛方法
Markov Chain Monte Carlo (MCMC)
生成系列状态来代表概率分布,不需要在整个分布空间中均匀采样

变分推断Variational Inference

参数估计
MLE:最大似然估计
最大后验估计MAP:
贝叶斯估计:直接推断后验概率分布

问题定义
Evidence通常是不可积的多重积分,导致后验分布无解析解
MCMC算法计算较慢,变分推断更适合求解大规模近似推断

算法思路
在这里插入图片描述

KL散度
用于衡量两个分布之间的距离
6个常见熵:信息熵、交叉熵、相对熵、联合熵、条件熵、互信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实现对后验分布的估计

与MCMC方法对比
计算效率方面

  • MCMC:时间复杂度高,不易扩展到大规模数据集和高维数据集上·
  • 变分推断VI:计算速度快,迭代次数少, 可以处理大规模数据集和高维数据集
    准确度方面
  • MCMC: 无需对后验分布进行近似,更准确
  • VI:需要对后验分布形式进行假设,只能得到一个近似值

MCMC适合小规模数据集
变分推断适合大规模和高维度数据集

变分自编码器VAE

降维思想
减少描述数据的特征数量的过程,例如主成分分析(PCA)方法
编码器-解码器结构也可以实现降维思想

在这里插入图片描述
压缩表示可以捕捉原始数据的重要特征
同时减少噪声和冗余信息

自编码器(Autoencoder
输入层和输出层具有相同的大小,隐藏层的大小通常小于二者
最小化输入数据和解码数据之间的重构误差来学习参数

在这里插入图片描述
确保只有重要的数据能够通过并且重建

自编码器(Autoencoder)
编码器和解码器都是深度非线性时,自动编码器降维能力更强
编解码器有足够的自由度时,甚至可以将任何初始维度减少到1

在这里插入图片描述
自编码器(Autoencoder)
要尽量将数据主要的结构信息保留在简化的表示中
仔细控制和调整潜空间的大小和自编码器的“深度

在这里插入图片描述

器的局限自编码
自编码器训练,以最小损失为目标,而不管潜空间如何组织
受制于严重的过拟合问题,:很难直接用于内容生成任务

在这里插入图片描述

VAE基本思想
引入正则化来避免过拟合,输入编码不再是点,而是概率分布

概率生成模型
正则化:求MLE最大似然改求最大后验估计MAP

在这里插入图片描述
积分 形式 无解析解

怎么求?

所以引入变分

变分推理
设置一个参数化分布族,并在该族中寻找目标分布的最佳近似

通过最小化KL散度用q逼近p(真实的概率分布)

在这里插入图片描述

变分推理
损失函数:尽量无损重构+正则项

正则项使浅空间规则化

在这里插入图片描述

潜在空间可视化
鼓励隐变量分布接近高斯先验,但必要时偏离以描述输入特征

在这里插入图片描述
AE 空的地方容易生成无意义数据
只有KL正则项 无法区分

神经网络实现
编码器内共享结构和权重
协方差矩阵简化为对角阵
使用重参数化技巧

在这里插入图片描述

在这里插入图片描述

生成对抗网络Generative Adversarial Network

发展历史和重要意义
对抗学习:生成器+判别器
提供了全新的数据生成方法
推动了深度学习的发展
激发了对于机器创造力的思考

对抗生成思想
通过对抗双方的不断改进,达到一个最优解
生成器生成数据,判别器判别真伪

举一个例子
假设有一个画家和一个鉴赏家,画家要画出逼真画作,鉴赏家要能分辨真假,但是画家并不知道如何让画更逼真,而鉴赏家也没有固定的准则来分辨画的真伪,于是开始对抗学习
画家先开始画画,鉴赏家不断给出评判看是不是真的, 画家会根据反馈不断改进,鉴赏家也会根据画家画的提高鉴赏标准,来进一步提升画的准不准,通过对抗学习,直到画的足够真实,鉴赏家也能判断真伪

模型结构
生成器输入随机噪声向量,生成一幅手写数字的合成图像
判别器输入包括训练集图像和生成器合成数据,输出为真假判断

在这里插入图片描述

判别器
标准分类器:尝试区分真实数据和生成器创建的数据
训练数据:真实的数据集做正例,虚假数据做负例

在这里插入图片描述
生成器
生成器的输入是随机噪声,损失由由判别器计算决定
损失函数训练期间,判别器是固定的

在这里插入图片描述

训练流程
交替训练:判别器→生成器→判别器→.
生成器不断改进,判别器性能开始变差

在这里插入图片描述

训练流程
黑虚线:真实分布;
蓝虚线:判别器分布;
绿实线:生成分布

在这里插入图片描述

损失函数

在这里插入图片描述
判别器固定的情况下,训练生成器

在这里插入图片描述

无论VAE还是GAN 基本结构都是先前学过的网络,只是把他们重新组合起来,协同训练产生数据生成的效果而已

Diffusion 扩散模型

图像生成上优于GAN模型

模型对比:

  • VAE和GAN潜变量维度降低
  • Diffusion中隐变量和原图像尺寸大小一样
  • Diffusion有两个传播过程:前向传播噪声化+后向传播复原图片

在这里插入图片描述

VAE和GAN都可以看成先把一个高维的图像先降维 得到隐变量Z,然后再上采样扩展维度得到新的输出x‘

diffusion基本思想
马尔科夫链的平稳性:从任何状态开始,最终会达到稳定状态
扩散模型:马尔可夫链每步的转移概率,本质上都是在加噪声

在这里插入图片描述
相当于2种溶液均匀混合

前向过程
通过T次传播不断添加高斯噪声,越来越接近纯噪声

在这里插入图片描述
重参数(reparameterization)
潜变量分布中采样,会导致弟度无法传递,用重参数化解决
基本思想是把随机变量表示为确定性函数和独立噪声项的和

在这里插入图片描述
前向传播
在这里插入图片描述
逆向过程
在这里插入图片描述
逆向过程
利用贝叶斯公式,巧妙地将逆向过程全部变回了前向
在这里插入图片描述

简单说,扩散模型就是先假设前向传播还有逆向传播都是高斯的,然后 沿着时间轴倒腾出均值和方差的迭代公式 。

损失函数
定义交叉熵损失然后用变分推断

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

训练流程
通过对随机噪声序列的逐步演化来学习分布的参数

在这里插入图片描述
在这里插入图片描述
扩散原理,其实就i是高斯噪声不断向前扩散,然后逆向去噪
损失函数推导最终目的不同时刻高斯噪声间的均方误差


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

相关文章

linux-系统备份与恢复-系统恢复

Linux 系统备份与恢复:系统恢复 1. 概述 Linux 系统的恢复是系统管理的重要组成部分,它指的是在系统崩溃、硬件故障、误操作或安全问题后,恢复系统到可用状态的过程。良好的系统恢复计划可以有效避免数据丢失和业务中断,并确保系…

HarmonyOS开发5.0【骨架屏】 app界面制作

实现原理 1.定义组件和状态变量: 使用 Entry 和 Component 装饰器定义了一个名为 IvSkeleton 的组件。 定义了一个状态变量 translageX,初始值为 -100%,用于控制闪电效果的位置。 定义了两个数值变量 widthValue 和 heightValue,…

C# Redis 框架开发技术详解

引言 Redis 是一个高性能的键值存储系统,广泛用于缓存、消息队列和实时分析等场景。在 C# 中,有几个著名的库和框架可以方便地与 Redis 进行交互。以下是几个常用的 C# Redis 库: StackExchange.Redis: 这是目前最流行、最推荐的 C# Redis 客…

Flutter-底部选择弹窗(showModalBottomSheet)

前言 现在有个需求,需要用底部弹窗来添加定时的重复。在这里使用原生的showModalBottomSheet来实现 showModalBottomSheet的Props 名称 描述 isScrollControlled全屏还是半屏isDismissible外部是否可以点击,false不可以点击,true可以点击&a…

【STM32】单级与串级PID控制的C语言实现

【STM32】单级与串级PID的C语言实现 前言PID理论什么是PIDPID计算过程PID计算公式Pout、Iout、Dout的作用单级PID与串级PID PID应用单级PID串级PID 前言 笔者最近在学习PID控制器,本文基于Blog做以总结。CSDN上已有大量PID理论知识的优秀文章,因此本文将…

【Kubernetes】(K8S)彻底卸载详细教程

以下全部操作都是使用root用户进行(非root用户可以使用sudo),并且全部命令都需要在Kubernetes集群的所有节点分别执行: 第一步、停止K8S 所有节点执行: 1 2 3 systemctl stop kubelet systemctl stop etcd systemct…

[Web安全 网络安全]-XSS跨脚本攻击

文章目录: 一:前言 1.定义 2.漏洞出现的原因 3.鉴别可能存在XSS漏洞的地方 4.攻击原理 5.危害 6.防御 7.环境 7.1 靶场 7.2 自动扫描工具 7.3 手工测试工具 8.payload是什么 二:常用的标签语法 三:XSS的分类 反射…

ubuntu系统服务器离线安装python包

一、根据工程需要本地下载所需python包 1. 下载环境requirements.txt pip freeze > requirements.txt2. 根据requirements.txt下载python包 注意:查看服务器属于x_86架构还是arm架构、cpython还是pypy 2.1 确定服务器架构(终端输入) …