初识对抗生成网络(GAN)

  在研究语义通信的时候,发现解码端很多都是用GAN或基于GAN来完成的。带着对GAN的好奇,对GAN进行了一个初步学习。这篇文章介绍一下和GAN相关的一些常识吧~
  本文围绕以下几个内容展开:
    1.什么是GAN?
    2.为什么要研究GAN?
    3.GAN具体的训练过程?
    4.GAN的优缺点
    5.GAN的应用
    6.现有的开源GAN项目

一、什么是GAN?

  GAN全称是Generative adversarial network,生成对抗网络。里面有两个关键词“生成”“对抗”。生成是GAN的作用,对抗是GAN的思想(现在不懂这句话也没关系,后面会介绍的~)。
  GAN有两个组成部分:生成网络(Generator)和判别网络(Discriminator)。给这两个网络下个定义。
    生成网络(Generator)负责生成模拟数据;
    判别网络(Discriminator)负责判断输入的数据是真实的还是生成的。
  GAN的精髓都在这两个网络上,前面说GAN的作用是生成,使用者希望能生成有效数据,也就是使用者想要的是良好的生成网络,但未经训练的网络生成效果是很差的,这时它需要一个“老师”来告诉它生成的数据是否有效并告诉它如何改进,这就是判别网络的作用:判别网络会对生成网络结果进行判断,如果发现了问题就把问题告诉生成网络,生成网络优化自己,这样生成网络的性能就会得到提升。
  上面一段话大致是GAN的思想,下面细化一下。上面一段话有一个问题:判断网络是怎么判断存在问题的?问题到达指什么?
  GAN常用于图像,就拿图像生成举例子。在图像生成任务中生成网络的作用就是生成图像。GAN会把生成图像和真实图像混在一起,一起送入判别网络中,判别网路需要将生成的和真实的进行区分。如果区分的好说明生成器不合格,没办法以假乱真。如果完全区分不出来那就说明生成器完全OK了。把上面的文字转换成图就是下面这样:
在这里插入图片描述
图源:https://blog.csdn.net/m0_61878383/article/details/122462196
  介绍了思想再来回头看看名字,“生成”“对抗”。生成是最终的目的——生成有效的数据,对抗是指生成器和判别器之间的关系,它们两个在对抗中不断优化迭代。
  GAN首次提出是在2014年(但是我在网上发现有点儿争议~),以论文形式发表:https://arxiv.org/pdf/1406.2661.pdf。它作为一种无监督算法,得到了很好的推广。

二、为什么会研究GAN?

  这里我分享一下自己的观点:
  1)首先是应用需求导向,AI时代模型训练需要大量的数据,通过人工采集标注已经被证明远远不够,所以自动化的生成数据是时代需要。同时还要保证生成的数据的有效的,所以对有效数据的高效生成变成了AI从业者必须克服的难关。
  2)其次是业务发展了,以图像为例。对于图像的使用不仅限于传输了,还包图像修复、图像合成、图像个性化生成等。图像的创造主体从人变成了AI,开始研究用AI做个性化生成。
  3)最后可能是对于无监督学习的需要,开始让机器自己监督自己训练,去形成机器间的对抗学习是无监督学习的一种重要方式。

三、GAN的具体训练过程

  其实训练过程就是生成器和判别器的博弈过程了。

  第一阶段:固定判别器,训练生成器

  使用一个还 OK 判别器,让一个「生成器G」不断生成“假数据”,然后给这个「判别器D」去判断。一开始,「生成器G」还很弱,所以很容易被揪出来。但是随着不断的训练,「生成器G」技能不断提升,最终骗过了「判别器D」。

  第二阶段:固定「生成器G」,训练「判别器D」

判别器「D」通过不断训练,提高了自己的鉴别能力,最终它可以准确的判断出所有的假图片。到了这个时候,「生成器G」已经无法骗过「判别器D」。

  循环一阶段和二阶段

  参考:https://zhuanlan.zhihu.com/p/622307792

  上面简单介绍下过程,现在回归到真实的网络训练上来。生成器和判别器是两个神经网络,神经网络的训练就是后向传播,也就是必须要找到损失函数,下面介绍下生成器和判别器的损失函数。
在这里插入图片描述
  如果用图来形容loss变化就是下面这样的:
在这里插入图片描述
图源:https://blog.csdn.net/m0_61878383/article/details/122462196

四、GAN的优缺点

  优点:

  1)本质上是一种架构,同时训练生成和判别网络,使两个问题都能变得很好,所以几乎适合所有问题。
  2)结果上看能生成更加清晰,更加真实的样本(理论一点儿说就是能更好的建模数据分布)
  3)使用无监督学习,不需要依赖大量标注数据。它可以从未标记的数据中学习出数据的分布和特征,可以被广泛的使用在无监督和半监督学习领域
  4)无需利用马尔科夫链反复采样,只是反向传播,无需在学习过程中进行推断,没有复杂的变分下界,避开近似计算棘手的概率的难题(我也不懂啥意思~),这点比VAE强。

  缺点:

  1)难训练,不稳定。训练GAN需要纳什均衡(存在优化方法使判别器和生成器都能达到最大收益),但是在实际训练中很容易D收敛,G发散。会有模式崩溃和模式塌缩的问题
  ps:模式崩溃和模式塌缩:生成器可能会陷入生成某些常见模式或样本的困境,导致模式崩溃。而模式塌缩是指生成器输出的样本缺乏多样性,倾向于生成同一或相似的样本。
  2)不适合离散形式数据,比如文本(目前GAN多用于生成图像数据)。
  3)评价指标困难:对于 GAN,很难找到一个普遍有效的评估指标来衡量生成样本的质量和多样性。通常需要结合人工评价和其他指标进行评估。
  4)训练时间较长:由于 GAN 模型的复杂性,训练时间往往较长。特别是对于复杂的数据集和高分辨率的图像,训练所需的计算资源可能很大。
  参考:https://zhuanlan.zhihu.com/p/73916148

五、GAN的应用:

  GAN的应用在这篇文章里面进行了介绍:https://zhuanlan.zhihu.com/p/73916148,总结一下还是图像的生成,这里写个目录
  1.生成图像数据集
  2.生成人脸照片
  3.生成照片,漫画人物
  4.图像到图像的转换
  5.文字到图像的转换
  6.语义到图像的转换
  7.自动生成模特
  8.照片到Emojis
  9.照片编辑
  10.预测不同年龄长相
  11.提高照片分辨率
  12.照片修复
  13.自动生成3D模型

六、现有的开源项目

  与GAN相关的成熟论文及源码都在下面这个项目里了:https://github.com/hindupuravinash/the-gan-zoo
  还发现一个pytorch版本的:https://github.com/eriklindernoren/PyTorch-GAN

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

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

相关文章

独立看门狗与窗口看门狗

一、简介 STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产…

buuctf-Misc 题目解答分解106-108

106.[DDCTF2018]流量分析 提示了私钥 ,无厘头,先不管了,应该是流量加密了,用wireshark 打开 看看,真个数据流量,没有http 直接找到TCP 协议的包追踪一下TCP 找到TCP 不是红色的包追踪,大量的数…

长虹智能电视ZLM60HiS机芯刷机方法及刷机固件,附进维修模式方法

适配机芯:ZLM60HiS 型号:Q1FU、D6000i、U3、D8000ID 软件强制升级方法: 1、下载后解压,找到upgrade_ZLM60HiS_MT5508_V1.00xxx_part.pkg 、chandroid_ota_ZLM60HiS_datapart.zip复制到U盘根目录(不要有任何文件夹&a…

AOP获取方法返回值

我们用Spring的AOP切面做日志收集或者记录的时候,在springboot中用Aspect注解。比如: Aspect public class AdviceTest {Before("execution(* com.abc.service.*.many*(..))")public void permissionCheck(JoinPoint point) {System.out.print…

多交朋友多条路

最近在找工作,然后有个朋友帮我推荐一个公司,很感激他,这个朋友是之前指导过他写简历认识的,然后人家也有给我讲过一些知识,最近帮我推一个公司,不免觉得,其实多交点志同道合的朋友,…

指增的超额来自于哪里,2024的乾坤九法,美股的宏观估值双杀

图片截止到:2024/1/4 上证 周四 -0.43% 市场热点分析 1. 2024元旦后国内外市场都出现了不同程度的下跌。技术面国内市场一直走在72日均线之下,而且没有形成底部,熊市还会延续。宏观方面,12月官方PMI持续向下,小企业更多…

初入职场工作应该怎么干?

上一篇文章说过了,踏入职场和同事和领导关系怎么处,接下来我说说工作怎么干。 初入职场可能对环境,人,事,工作都一脸懵逼,深怕工作干不好之类的,所以我要给你吃定心丸,让你可以驰骋…

DBA技术栈(二):MySQL 存储引擎

2.1 MySQL存储引擎概述 上个业余的图: MyISAM 存储引擎是 MySQL 默认的存储引擎,也是目前 MySQL 使用最为广泛的存储引擎之一。他的前身就是我们在 MySQL 发展历程中所提到的 ISAM,是 ISAM 的升级版本。在 MySQL最开始发行的时候是 ISAM 存…

CentOS上设置中文/英文语言环境

一、在CentOS上设置中文语言环境 1、安装中文字体支持: sudo yum install -y wqy-microhei-fonts2、设置系统默认语言为中文: sudo localectl set-locale LANGzh_CN.UTF-83、重新启动系统,以便应用语言更改: sudo reboot二、在…

解锁无限可能:深入探索Docker的奇妙世界

解锁无限可能:深入探索Docker的奇妙世界 1、Docker的简介: Docker是一个开源的容器化平台,它以轻量级和可移植的方式打包应用程序及其所有依赖项,并提供了一种标准化的部署方式。通过使用Docker,开发人员可以将应用程…

编程语言的发展趋势是什么样的?

随着计算机技术的不断发展,计算机编程语言也在不断更新和发展。 未来编程语言的发展特点趋势是更安全、人性化(可读性、可写性)、跨平台这三个方向进行发展。更加简单易学更加多样性,有更加专业面向某一领域的语言,也…

Lumeical Script------Script Prompt 中的两种输出方式

Lumeical Script------Script Prompt 中的两种输出方式 引言正文方法1方法2 引言 有时候,和众多编程语言一样,我们需要在 Script Prompt 中打印一些我们已经得到的数据,这样可以方便我们调试代码和查看代码中是否有错误。关于在 Script Prom…

ArrayList学生管理系统

文章目录 1.ArrayList集合和数组的优势对比:1.1 ArrayList类概述1.2 ArrayList类常用方法1.2.1 构造方法1.2.2 成员方法1.2.3 示例代码 1.3 ArrayList存储字符串并遍历1.3.1 案例需求1.3.2 代码实现 1.4 ArrayList存储学生对象并遍历1.4.1 案例需求1.4.2 代码实现 1…

集合的三种遍历方式

迭代器(Iterator) 概述:Iterator 是个接口,迭代器是集合的专用遍历方式 使用方法,我们想要使用迭代器,必须首先得到集合对象,通过集合对象生成迭代器对象,才能进行集合的遍历 常用…

系统运维-Apache服务的基础安装与使用

Apache:WEB服务器的软件 Apache HTTP是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的WEB服务器软件。 目录 HTTP HTTPS HTTP 首先安装apache yum install httpd* -y #install http 要有网站首…

苹果电脑菜单栏应用管理软件Bartender 4 mac软件特点

Bartender mac是一款可以帮助用户更好地管理和组织菜单栏图标的 macOS 软件。它允许用户隐藏和重新排列菜单栏图标,从而减少混乱和杂乱。 Bartender mac软件特点 菜单栏图标隐藏:Bartender 允许用户隐藏菜单栏图标,只在需要时显示。这样可以…

全网独家:基于openeuler-20.03-lts底包构建opengauss数据库V5.0.1LTS的单机容器

近期想测试一下opengauss数据库,官网上单机容器部署只有x86-64平台CentOS 7.6和ARM64平台 openEuler20.03 LTS两种底包方案。本文系全网独家在x86平台上基于openeuler-20.03-lts底包构建opengauss数据库V5.0.1LTS的单机容器。 opengauss官网上单机容器部署只有x86-64平台Cent…

利用ChatGPT在不同教学场景中的应用

教学策略与最佳实践: 课堂讨论:在课堂上可以利用ChatGPT作为一个辅助工具,回答学生的问题、提供解释和补充知识。教师可以利用ChatGPT快速获取相关信息,并且根据学生的提问进行回答和引导讨论。 个别辅导:对于个别辅导…

Golang leetcode160相交链表 map 双指针迭代

文章目录 相交链表 leetcode160暴力求解 map双指针1双指针2 巧妙 该部分源于leetcode官方题解 相交链表 leetcode160 由于链表深度不一致,所以不太好使用递归 检测方法 : 相交链表,即两个链表上一个节点的Next指向 同一个地址先检测同样Val…