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

news2024/11/13 10:40:54

深度生成模型

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

什么是生成式模型

判别式和生成式模型
判别式: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是高斯噪声不断向前扩散,然后逆向去噪
损失函数推导最终目的不同时刻高斯噪声间的均方误差

VAE和GAN 代码实现

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux:RPM软件包管理以及Yum软件包仓库

挂载光驱设备 RPM软件包管理 RPM软件包简介 区分软件名和软件包名 软件名:firefox 软件包名:firefox-52.7.0-1.el7.centos.x86_64.rpm 查询软件信息 查询软件(参数为软件名) ]# rpm -qa #当前系统中所有已安装的软件包 ]# r…

Unity实战案例全解析 :PVZ 植物脚本分析

植物都继承了Pants脚本,但是我因为没注意听讲,把Pants也挂在植物上了,所以子类的PlantEnableUpdate和PlantDisableUpdate抢不过父类,无法正确触发动画,我还找不到哪里出了问题,所以就使用了携程加while强行…

Navicat使用 笔记04

Navicat调用数据库 1.创建一个自己的链接(文件-->新建连接-->MySQL) 进入到这个界面中: 【注意:密码是下载登录软件时设定过的】 创建一个连接完成(通过双击激活)。 2.在创建好的连接中创建数据库…

神经网络通俗理解学习笔记(5) 自然语言处理

自然语言处理 词嵌入和word2vec词义搜索和句意表示预训练模型Hugging Face库介绍经典NLP数据集代码案例-电影评论情感分析 词嵌入和word2vec 词嵌入是一种 将高维的数据表示映射到低维空间的方法 word embedding 是将语言中的词编码成向量便于后续的分析和处理 词嵌入和词向量…

感知器神经网络

1、原理 感知器是一种前馈人工神经网络,是人工神经网络中的一种典型结构。感知器具有分层结构,信息从输入层进入网络,逐层向前传递至输出层。根据感知器神经元变换函数、隐层数以及权值调整规则的不同,可以形成具有各种功能特点的…

宿舍管理系统的设计与实现 (含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 宿舍管理系统拥有三个角色,分别为系统管理员、宿舍管理员以及学生。其功能如下: 管理员:宿舍管理员管理、学生管理、宿舍楼管理、缺勤记录管理、个人密…

django学习入门系列之第十点《A 案例: 员工管理系统8》

文章目录 10.6 重写样式10.7 判断数据是否合法10.8 保存内容至数据库10.9 修改入职时间10.10 错误提示10.11 重写错误信息往期回顾 10.6 重写样式 注意:因为他框架都已经给你写好了,所以如果要使用样式的话可能要自己重新定义框架来进行修改 他有两种方…

衣食住行的投资与消费

机器人工程课程与科研采取敏捷开发的弊端和反思_工业机器人适合敏捷开发吗-CSDN博客 →学历消费者←自我救赎↑2024↓(*Φ皿Φ*)-CSDN博客 大部分衣食住行相关的产品都是消费品,只有极少部分是能保值的资产。 物以稀为贵,量产供应的一般而言都是消费品…

第二百三十五节 JPA教程 - JPA Lob列示例

JPA教程 - JPA Lob列示例 以下代码显示了如何使用Lob注释将字节数组保存到数据库。 LOB在数据库中有两种类型:字符大对象(称为CLOB)和二进制大对象(或BLOB)。 CLOB列保存大字符序列,BLOB列可存储大字节序…

JDK的选择安装和下载

搭建Java开发环境 要使用Java首先必须搭建Java的开发环境;Java的产品叫JDK(Java Development Kit:Java开发工具包),必须安装JDK才能使用Java。 JDK发展史 那么这么多JDK,应该使用哪个版本,此处…

C# 比较对象新思路,利用反射技术打造更灵活的比较工具

前言 嘿,大家好!如果你之前看过我分享的文章《C# 7个方法比较两个对象是否相等》,你可能会意识到对象比较在实际业务中经常出现的场景。今天,我想继续与大家分享一个在实际项目中遇到的问题。 有一次,我接手了一个别…

LLVM PASS-PWN-前置

文章目录 参考环境搭建基础知识![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/dced705dcbb045ceb8df2237c9b0fd71.png)LLVM IR实例1. **.ll 格式(人类可读的文本格式)**2. **.bc 格式(二进制格式)**3. **内存表示** …

无心剑英译张九龄《望月怀远》

望月怀远 Watching the Moon and Missing You Far Away 张九龄 By Zhang Jiuling 海上生明月,天涯共此时 情人怨遥夜,竟夕起相思 灭烛怜光满,披衣觉露滋 不堪盈手赠,还寝梦佳期 The bright moon rises from the sea, So far apart…

【宠物小精灵之收服(待更新)】

题目 代码 #include <bits/stdc.h> using namespace std; int f[1010][510]; int main() {int n, m, k;cin >> n >> m >> k;int c 0;for(int i 1; i < k; i){int cost, hp;cin >> cost >> hp;for(int j n; j > cost; j--){for(i…

java技术栈介绍

Java技术栈是一个庞大而丰富的生态系统&#xff0c;它包含了从基础语言特性到高级框架、库和工具的整个集合。这个技术栈为开发者提供了构建各种类型应用&#xff08;包括企业级应用、Web应用、移动应用、大数据应用等&#xff09;所需的全部组件。以下是对Java技术栈的一个更详…

【webpack4系列】编写可维护的webpack构建配置(四)

文章目录 构建配置包设计功能模块设计和目录结构设计功能模块设计目录结构设计 使用ESLint规范构建脚本冒烟测试介绍和实际运用冒烟测试 (smoke testing)冒烟测试执行判断构建是否成功判断基本功能是否正常 单元测试和测试覆盖率测试框架编写单元测试用例单元测试接入测试覆盖率…

新发布!Streamlab X系列第二版:短视频电影直播全能主题,赋能苹果CMS

Streamlab X系列第二版强势登陆&#xff0c;专为苹果CMS设计的短视频与电影直播融合的多功能主题模板震撼首发&#xff01; 这款主题以其非凡的适应性和极致的视觉效果&#xff0c;重新定义了网站构建的边界。采用独家精心研发的框架&#xff0c;它能够无缝跨越从移动设备到超…

在实际LabVIEW开发中,哪些算法是常用的?

在LabVIEW的实际开发中&#xff0c;常用的算法主要集中在数据处理、控制系统、信号处理、图像处理等领域。以下是一些常用算法的介绍&#xff1a; 1. PID控制算法 PID&#xff08;比例-积分-微分&#xff09;控制是LabVIEW中常用的算法之一&#xff0c;广泛应用于工业自动化和…

【四】k8s部署 TDengine集群

k8s部署 TDengine集群 目录 k8s部署 TDengine集群 一、在 Kubernetes 上部署 TDengine 集群 第一步&#xff1a;创建命名空间 第二步&#xff1a;从yaml创建有状态服务 StatefulSet 第三步&#xff1a;配置 Service 服务 二、集群测试 一、在 Kubernetes 上部署 TDengine…

【数据结构-扫描线】力扣57. 插入区间

给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表 intervals&#xff0c;其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束&#xff0c;并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval [start, end] 表示另一个区间的开始和…