【PyTorch][chapter 19][李宏毅深度学习]【无监督学习][ GAN]【理论】

前言:

       生成对抗网络(Generative Adversarial Nets,GAN)是一种基于对抗学习的深度生成模型。

 2014年,蒙特利尔博士 lan Goodfellow 发表了论文《Generative Adaversarial Networks》,

一经提出便成为了学术界研究的热点,也将生成模型的热度推向了另一个新的高峰。
对该领域要深入了解,需要重点看一下

   Yann LeCun 给于GAN 高度的评价


目录:

  1.      VAE 缺陷
  2.       GAN 简介
  3.       GAN 损失函数
  4.       训练方法
  5.       GAN 应用
  6.        GAN 模型的缺陷

一  VAE 缺陷

        无法产生新的风格图片

         VAE 通过Decoder 产生的图片只是要尽可能的跟输入的图像相似,但是无法产生新的以假乱真的图片


二  GAN 简介

2.1 模型结构

GAN 由一个生成模型和一个鉴别模型 组成.
生成模型(enerative Model):      输入特征向量z,产生假的数据,试图欺骗判别模型.
判别模型(Discriminative Model): 对生成数据进行真伪鉴别,试图识别出所有的假的数据

在训练的过程中,两个模型持续的进化和对抗,最终两个网络达到一个动态均衡:

    生成器生成的图像接近真实图像分布,判别器不能识别真假图像,对于
    给定图像的预测为真的概率接近0.5

2.2 算法流程(forward)

       s1:  输入特征z ,通过生成网络G 得到生成图片x_f=G(z)

       s2  : 输入图片x(真实的图片或生成的图片),鉴别图片真假y=D(x)


三   GAN  损失函数 

 

       L=min_{G}max_{D}V(G,D)

            =E_{x \sim p_{data(x)}}[logD(x)]+E_{x \sim p(x_f)}[1-D(x_f)]

         生成器G 和 判别器D  要分开来训练.

         鉴别器D: 输出图片真假的概率,是一个二分类问题.用交叉熵来作为损失函数

        P_{data}:  真实的图片

        x_f:       通过生成器生成的假图片

       3.1  针对判别器D

                 x \sim p_{data}   真实的图像的采样

                我们期望D(x)=1.0 , 所以 E_{x \sim p_{data(x)}}[logD(x)] 最大化

                 x_f=G(z) 生成的图像:

                  我们期望D(x_f)=0.0,则 1-D(x_f)=1.0, 所以E_{z \sim p_{z}}[1-D(x_f)]最大化。

   

                  在训练的鉴别器的时候我们L=-L,把它转化为求极小值问题

     

  3.2 针对生成器G   

          x_f 通过生成器生成的图片

          我们期望D(x_f)=1.0.

            则 1-D(x_f)=0.0 

             所以E_{z \sim p_{z}}[1-D(x_f)]最小化


 四   训练方法

     4.1 伪代码

        先训练k轮鉴别模型,再训练生成模型 

4.2 训练过程

   如上图: 黑线 真实数据的分布,

                   绿线 生成模型产生的分布

                   蓝线   鉴别器鉴别真假的概率

   图1:

                 生成模型很弱,绿线和黑线分布有较大的差异,鉴别模型很容易区分出真假.

   图2

              生成模型通过训练进化了,调整其参数,绿线和黑线分布接近了,鉴别模型还是能够分出真假

    图3     

              生成模型通过训练进化了,调整其参数,绿线和黑线分布一致,鉴别模型无法给出真假

识别真假的能力为50%


五   GAN的应用

   基于GAN 有大量的创新应用

GitHub - open-mmlab/mmgeneration: MMGeneration is a powerful toolkit for generative models, based on PyTorch and MMCV.

     1: 图像生成

     输入一段文字,通过生成模型得到图像。

     

  2: 图像风格迁移(CycleGAN)

    把一种图像的风格转换为另一种

  3  图像翻译——pix2pix模型

有一类任务叫做image-to-image translation。也就是输入和输出是来自两个不同集合(设为A和B)的图片,且我们一般认为它们是有对应关系的。比如输入黑白照片(A)输出彩色照片(B),输入轮廓照片(A)输出色彩填充照片(B)等(如图1),本文介绍的pix2pix模型所处理的就是这类任务。并且原文作者通过一系列实验,证明了conditional GAN在这类问题上的有效性,也就是说,pix2pix本质上是一种特殊的conditional GAN。    

  5 声音的转换(CycleGAN-VC2)

        将自己的声音风格转换


六  GAN 问题

      问题:

        JS散度值有一个缺陷,当两个分布完全不重叠时,其JS散度值都是一个常数,以至于梯度为0

      6.1 优化目标

       V(D,G)=E_{x \sim p(x)}[logD(x)]+E_{x \sim q(x)}[log(1-D(x))]

                        =\int_x p(x)logD(x)+\int_x q(x) log(1-D(x))dx

        假设:

               真实的图像服从x \sim p(x) 的分布

               生成的图像服从x \sim q(x)的分布

      6.2  固定生成模型G, 判别模型D优化目标

              对D求微分

              \frac{p(x)}{D(x)}-\frac{q(x)}{1-D(x)}=0

              D^{*}(x)=\frac{p(x)}{p(x)+q(x)}

    6.3 固定判别模型D,生成模型优化目标

       V(G,D)=\int_x p log \frac{p}{p+q}+\int_x q log \frac{p}{p+q}

                     =JSD(p||q)-2log2

     

JS 散度度量了两个概率分布的相似度 。一般地,JS散度是对称的,其取值是 0 到 1 之间 ( “JS散度” 是基于 “KL散度” 的变体,解决了KL散度非对称的问题)。

JS散度值有一个缺陷,当两个分布完全不重叠时,即便两个分布的中心距离有多近,其JS散度值都是一个常数,以至于梯度为0

JSD(p||q)=\frac{1}{2 }\int_x p(x)log \frac{2p(x)}{p(x)+q(x)}dx+\frac{1}{2 }\int_x q(x)log \frac{2q(x)}{p(x)+q(x)}dx

                     =\frac{1}{2}\int p(x)log \frac{p(x)}{p(x)+q(x)}+\frac{1}{2}\int q(x)log \frac{q(x)}{p(x)+q(x)}+log2

                     =\frac{1}{2}V(G,D)+log2

所以

                 V(G,D)=2JSD(p||q)-2log2

     6.4 问题

如上图,当p(x) 和q(x) 分布完全不重叠的时候

JSD(p||q)=log2

V(G,D)= -log2  

 JSD(p||q)=\frac{1}{2 }\int_x p(x)log \frac{2p(x)}{p(x)+q(x)}dx+\frac{1}{2 }\int_x q(x)log \frac{2q(x)}{p(x)+q(x)}dx

                =\frac{1}{2}\int_{-\infty}p(x)log \frac{p(x)}{p(x)+0}+\frac{1}{2}\int_0^{\infty}q(x)log \frac{q(x)}{q(x)+0}+log2

                 =0 + log2


          

参考:

偏理论类(创新性更高,意义更大):ICLR,NIPS,ICML
偏重应用类(一般来说创新性有限):AAAI,IJCAI
计算机视觉:CVPR,ICCV,ECCV
自然语言处理:ACL,EMNLP,NaACL

使用 CycleGAN-VC2 实现【人声音色转换】!! - 知乎

https://www.cnblogs.com/Edison-zzc/p/17621424.html

GAN的语音翻译和音频样式传输如何使用频谱图和GAN将爵士乐转换为古典音乐_频谱图 风格转换-CSDN博客

吹爆!GAN生成对抗网络原理解读+论文讲解+代码实现被计算机博士由浅入深讲明白了!—人工智能/深度学习/机器学习/AI_哔哩哔哩_bilibili

AE CSDN

VAE CSDN

https//cs.stanford.edu/people/karpathy/gan/

MMGeneration开源图像生成算法库【OpenMMLab】_哔哩哔哩_bilibili

Hung-yi Lee

Adverarial Nets

GAN论文逐段精读【论文精读】_哔哩哔哩_bilibili

精读CycleGAN论文-拍案叫绝的非配对图像风格迁移_哔哩哔哩_bilibili

https://www.bilibili.com/video/BV1Ya411a78P/?spm_id_from=333.337.search-card.all.click&vd_source=a624c4a1aea4b867c580cc82f03c1745

GAN代码实战和原理精讲 PyTorch代码进阶 最简明易懂的GAN生成对抗网络入门课程 使用PyTorch编写GAN实例 2021.12最新课程_哔哩哔哩_bilibili 

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

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

相关文章

Python CGI编程

文章目录 什么是CGICGI架构Web服务器支持及配置CGI程序示例CGI环境变量GET和POST方法GET方法POST方法区别注意事项 使用POST方法传递数据1. 创建HTML表单2. 编写CGI脚本3. 配置服务器4. 提交表单5. 服务器处理请求注意事项 通过CGI程序传递checkbox数据创建HTML表单编写CGI脚本…

二维码门楼牌管理系统技术服务:门牌编设规则详解

文章目录 前言一、门牌编设规则解读二、区间编号与分段编号策略三、多出入口建筑物的门牌编设 前言 随着城市化的快速推进,门楼牌管理成为城市管理中不可或缺的一环。二维码门楼牌管理系统的引入,不仅提升了管理的效率,也为市民提供了更为便…

波奇学Liunx:信号的产生,保存,处理

信号的产生,信号的保存,信号的处理 在操作系统中进程接受到信号会保存,产生 进程必须识别和能够处理信号,处理信号是进程的内置功能 进程收到信号时不一定会立即执行,所以进程必然有一套识别,保存&#xff…

Leetcode 3066. Minimum Operations to Exceed Threshold Value II

Leetcode 3066. Minimum Operations to Exceed Threshold Value II 1. 解题思路2. 代码实现 题目链接:Leetcode 3066. Minimum Operations to Exceed Threshold Value II 1. 解题思路 这一题的话只需要排序之后按照题目条件逐一进行执行直至满足条件即可。 唯一…

Pytorch中,dim形象化的确切意义是什么?

在Pytorch中涉及张量的操作都会涉及“dim”的设置,虽然也理解个大差不差,但是偶尔还是有点犯迷糊,究其原因还是没有形象化的理解。 首先,张量的维度排序是有固定顺序的,0,1,2,.....…

(1)预处理

我们需要的文件结构如上 main.cpp add.h add.cpp add.h 这里使用riscv的工具链编译为.i文件,需要使用-E,就是只进行预处理,我们可以得到两个.i文件即main.i和add.i main.i 这里看到main.i里头文件全部替换,然后多了三万多行 所以…

Leetcode 3068. Find the Maximum Sum of Node Values

Leetcode 3068. Find the Maximum Sum of Node Values 1. 解题思路2. 代码实现 题目链接:3068. Find the Maximum Sum of Node Values 1. 解题思路 这一题虽然标记为一道hard的题目,但其实就是一个脑筋急转弯的题目。 我们只需要想明白一点即可&…

4G/5G执法记录仪、智能安全帽走国标GB28181接入海康、宇视等大平台,也可走平台与平台对接,以下级平台级联到上级大平台

AIoT万物智联,智能安全帽生产厂家,执法记录仪生产厂家,智能安全帽、智能头盔、头盔记录仪、执法记录仪、智能视频分析/边缘计算AI盒子、车载DVR/NVR、布控球、智能眼镜、智能手电、无人机4G补传系统等统一接入大型融合通信可视指挥调度平台VM…

Vue3和ElementPlus封装table组件

最近学习vue3.2并自己在写一个项目,然后发现好几个页面都是列表页,重复写table和column也是觉得累,学习的项目列表页不算多,要是公司项目就不一样了,所以就想着自己封装一个table组件,免去大量重复工作和co…

滑动窗口

题目 思路 对于一个数组区间的最值,可以开辟一个队列记录(当然这里不能叫队列只是和队列相似,习惯性叫法)。 每个区间的最值等于队首元素。扫描数组时,如果该元素大于队尾元素(取最大值时)将该队尾元素出队…

Effective C++ 学习笔记 条款07 为多态基类声明virtual析构函数

有许多种做法可以记录时间,因此,设计一个TimeKeeper base class和一些derived classes作为不同的计时方法很合理: class TimeKeeper { public:TimeKeeper();~TimeKeeper();// ... };class AtomicClock : public TimeKeeper { /* ... */ }; …

DM数据库学习之路(二十)DM8基于主备集群技术的两地三中心集群部署及测试(全网最详细)

DM两地三中心介绍 摘要 金融行业对数据的可靠性和连续性有着极其严格的要求,任何数据丢失或服务中断都可能导致严重的经济损失。针对这一问题,基于达梦主备集群技术的两地三中心解决方案能够切实有效解决业务数据的可靠性和连续性需求。该方案通过构建两个数据中心和一个灾备…

MyBatis标签获取数组或者集合长度的方法

1、判断列表长度&#xff1a; <if test"list ! null and list.size() > 0">... </if> 可结合in条件使用&#xff1a;SELECT * FROM users<where><if test"idList ! null and idList.size() > 0">id IN<foreach item"…

leetcode热题100学习计划-链表-相交链表

思路 两条链表长短不一&#xff0c;找公共交点必须先对齐。记录两个链表各自长度&#xff0c;长的向短的看齐&#xff0c;长的先走多出来的那么一截&#xff0c;之后两者一起走&#xff0c;直到相遇或抵达末尾 代码 /*** Definition for singly-linked list.* public class …

解密Lawnchair:打造个性化极致的Android桌面体验

解密Lawnchair&#xff1a;打造个性化极致的Android桌面体验 1. 简介 Lawnchair是一款知名的Android桌面定制工具&#xff0c;旨在为用户提供个性化极致的桌面体验。作为一个开源项目&#xff0c;Lawnchair融合了简洁、灵活和强大的特点&#xff0c;让用户能够自由定制其Andro…

Python | Conda安装包报错:PackagesNotFoundError

Conda在下载安装包时报错&#xff1a; PackagesNotFoundError: The following packages are not available from current channels:- XXXXXX&#xff08;包名&#xff09;有如下两种解决方法&#xff1a; 方法一&#xff1a;将conda-forge添加到搜索路径上 在命令行运行下方指令…

深入理解C语言:开发属于你的三子棋小游戏

三子棋 1. 前言2. 准备工作3. 使用二维数组存储下棋的数据4. 初始化棋盘为全空格5. 打印棋盘6. 玩家下棋7. 电脑下棋8. 判断输赢9. 效果展示10. 完整代码 1. 前言 大家好&#xff0c;我是努力学习游泳的鱼&#xff0c;今天我们会用C语言实现三子棋。所谓三子棋&#xff0c;就是…

Android 开发环境搭建的步骤

本文将为您详细讲解 Android 开发环境搭建的步骤。搭建 Android 开发环境需要准备一些软件和工具&#xff0c;以下是一些基础步骤&#xff1a; 1. 安装 Java Development Kit (JDK) 首先&#xff0c;您需要安装 Java Development Kit (JDK)。JDK 是 Android 开发的基础&#xf…

TS总结10、ts的 class 类型(配置项strictPropertyInitialization、非空断言)

一、简介 1.类(class)是面向对象编程的基本构件,封装了属性和方法 1.1、属性的类型:类的属性可以在顶层声明,也可以在构造方法内部声明,如果不给出类型;TypeScript 会认为x和y的类型都是any;如果声明时给出初值,可以不写类型,TypeScript 会自行推断属性的类型; c…

【Android 内存优化】怎么理解Android PLT hook?

文章目录 前言什么是hook?PLT hook作用基本原理PLT hook 总体步骤 代码案例分析方案预研面临的问题怎么做&#xff1f;ELFELF 文件头SHT&#xff08;section header table&#xff09; 链接视图&#xff08;Linking View&#xff09;和执行视图&#xff08;Execution View&…