深度学习500问——Chapter07:生成对抗网络(GAN)(1)

文章目录

7.1 GAN基本概念

7.1.1 如何通俗理解GAN

7.1.2 GAN的形式化表示

7.1.3 GAN的目标函数是什么

7.1.4 GAN的目标函数和交叉熵有什么区别

7.1.5 GAN的Loss为什么降不下去

7.1.6 生成式模型、判别式模型的区别

7.1.7 什么是mode collapsing

7.1.8 如何解决mode collapsing


7.1 GAN基本概念

7.1.1 如何通俗理解GAN

生成对抗网络(GAN,Generative adversarial network)自从2014年被lan Goodfellow提出以来,掀起了一股研究热潮。GAN由生成器和判别器组成,生成器负责生成样本,判别器负责判断生成器的样本是否为真。生成器要尽可能迷惑判别器,而判别器要尽可能区分生成器生成的样本和真实样本。

在GAN的原作[1]中,作者将生成器比喻为印假钞票的犯罪分子,判别器则类比为警察。犯罪分子努力让钞票看起来逼真,警察则不断提升对于假钞的辨识能力。二者相互博弈,随着时间的进行,都会越来越强。那么类比于图像生成任务,生成器则不断生成尽可能逼真的假图像。判别器则判断图像是否是真实的图像,还是生成的图像,二者不断博弈优化。最终生成器生成的图像使得判别器完全无法判别真假。

7.1.2 GAN的形式化表示

上述例子只是简要介绍了一下GAN的思想,下面对于GAN做一个形式化的,更加具体的定义。通常情况下,无论是生成器还是判别器,我们都可以用神经网络来实现。那么,我们可以把通俗化的定义用下面这个模型表示:

上述模型左边是生成器G,其输入是z,对于原始的GAN,z是由高斯分布随机采样得到的噪声。噪声z通过生成器得到了生成器的假样本。

生成的假样本与真实样本放到一起,被随机抽样送入到判别器D,由判别器去区分输入的样本是生成的假样本还是真实的样本。整个过程简单明了,生成对抗网络中的“生成对抗”主要体现在生成器和判别器之间的对抗。

7.1.3 GAN的目标函数是什么

对于上述神经网络模型,如果想要学习其参数,首先需要一个目标函数。GAN的目标函数定义如下:

\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) \\= {\rm E}{x\sim{p{data}(x)}}[\log D(x)] + {\rm E}_{z\sim{p_z}(z)}[\log (1 - D(G(z)))]

第一部分:判别器的优化通过\mathop {\max}\limits_D V(D,G)实现,V(D,G)为判别器的目标函数,

其第一项{\rm E}{x\sim{p{data}(x)}}[\log D(x)]表示对于从真实数据分布中采用的样本,其被判别器判定为真实样本概率的数学期望。对于真实数据分布中采用的样本,其预测为正样本的概率当然是越接近1越好。因此希望最大化这一项。

第二项{\rm E}_{z\sim{p_z}(z)}[\log (1 - D(G(z)))]表示:对于从噪声P_z(z)分布当中采样得到的样本,经过生成器生成之后得到的生成图片,然后送入判别器,其预测概率的负对数的期望,这个值自然是越大越好,这个值越大,越接近0,也就代表判别器越好。

第二部分:生成器的优化通过\mathop {\min }\limits_G({\mathop {\max }\limits_D V(D,G)})来实现。注意,生成器的目标不是\mathop {\min }\limits_GV(D,G),即生成器不是最小化判别器的目标函数,二是最小化判别器目标函数的最大值,判别器目标函数的最大值代表的是真实数据分布生成数据分布的JS散度,JS散度可以度量分布的相似性,两个分布越接近,JS散度越小。

7.1.4 GAN的目标函数和交叉熵有什么区别

判别器目标函数写成离散形式即为:

V(D,G)=-\frac{1}{m}\sum_{i=1}^{i=m}logD(x^i)-\frac{1}{m}\sum_{i=1}^{i=m}log(1-D(\tilde{x}^i))

可以看出,这个目标函数的交叉熵是一致的,即判别器的目标是最小化交叉熵损失,生成器的目标是最小化生成数据分布和真实数据分的JS散度。

7.1.5 GAN的Loss为什么降不下去

对于很多GAN的初学者在实践过程中可能会纳闷,为什么GAN的Loss一直降不下去。GAN到底什么时候才算收敛?其实,作为一个训练良好的GAN,其Loss就是降不下去的。衡量GAN是否训练好了,只能由人肉眼去看生成的图片质量是否好。不过,对于没有一个很好的评价是否收敛指标的问题,也有许多初学者做了一些研究,后文提及的WGAN就提出了一种新的Loss设计方式,较好的解决了难以判断收敛性的问题。

下面我们分析一下GAN的Loss为什么降不下去?对于判别器而言,GAN的Loss如下:

\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) \\= {\rm E}{x\sim{p{data}(x)}}[\log D(x)] + {\rm E}_{z\sim{p_z}(z)}[\log (1 - D(G(z)))]

\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G)可以看出,生成器和判别器的目的相反,也就是说两个生成器网络和判别器网络互为对抗,此消彼长。不可能Loss一直降到一个收敛的状态。

  • 对于生成器,其Loss下降快,很有可能是判别器太弱,导致生成器很轻易的就“愚弄”了判别器。
  • 对于判别器,其Loss下降快,意味着判别器很强,判别器很强则说明生成器生成的图像不够逼真,才使得判别器轻易判别,导致Loss下降很快。

也就是说,无论判别器,还是生成器。loss的高低不能代表生成器的好坏。一个好的GAN网络,其GAN Loss往往是不断波动的。

​ 看到这里可能有点让人绝望,似乎判断模型是否收敛就只能看生成的图像质量了。实际上,后文探讨的WGAN,提出了一种新的loss度量方式,让我们可以通过一定的手段来判断模型是否收敛。

7.1.6 生成式模型、判别式模型的区别

对于机器学习模型,我们可以根据模型对数据的建模方式将模型分为两大类,生成式模型和判别式模型。如果我们要训练一个关于猫狗分类的模型,对于判别式模型,只需要学习二者差异即可。比如说猫的体型会比狗小一点。而生成式的模型则不一样,需要学习猫长什么样,狗长什么样。有了二者的长相以后,再根据长相去区分。具体而言:

  • 生成式模型:由数据学习联合概率分布P(X,Y),然后由P(Y|X)=P(X,Y)/P(X)求出概率分布P(Y|X)作为预测的模型。该方法表示了给定输入X与产生输出Y的生成关系。
  • 判别式模型:由数据直接学习决策函数Y=f(X)或条件概率分布P(Y|X)作为预测模型,即判别模型。判别方法关心的是对于给定的输入X,应该预测什么样的输出Y。

对于上述两种模型,从文字上理解起来似乎是不太直观。我们举个例子来阐述一下,对于性别分类问题,分别用不同的模型来做:

1)如果用生成式模型:可以训练一个模型,学习输入人的特征X和性别Y的关系。比如现在有下面一批数据:

Y(性别)01
X(特征)01/43/4
13/41/4

这个数据可以统计得到,即统计人的特征X=0,1...的时候,其类别为Y=0,1的概率。统计得到上述联合概率分布P(X,Y)后,可以学习一个模型,比如让二维高斯分布去拟合上述数据,这样就学习到了X,Y的联合分布。在预测时,如果我们希望给一个输入特征X,预测其类别,则需要通过贝叶斯公式得到条件概率分布才能进行推断:P(Y|X)={\frac{P(X,Y)}{P(X)}}={\frac{P(X,Y)}{P(X|Y)P(Y)}}

2)如果用判别式模型:可以训练一个模型,输入人的特征X,这些特征包括人的五官,穿衣风格,发型等。输出则是对于性别的判断概率,这个概率服从一个分布,分布的取值只有两个,要么男,要么女,记这个分布为Y。这个过程学习了一个条件概率分布P(Y|X),即输入特征X的分布已知条件下,Y的概率分布。

显然,从上面的分析可以看出,判别式模型似乎要方便的多,因为生成式模型要学习一个X,Y的联合分布往往需要很多数据,而判别式模型需要的数据则相对少,因为判别式模型更关注输入特征的差异性,不过生成式既然使用了更多数据来生成联合分布,自然也能够提供更多的信息,现在有一个样本(X,Y),其联合概率P(X,Y)经过计算特别小,那么可以认为这个样本是异常样本。这种模型可以用来做outlier detection。

7.1.7 什么是mode collapsing

某个模式(mode)出现大量重复样本,例如:

上图左侧的蓝色五角星表示真实样本空间,黄色的是生成的。生成样本缺乏多样性,存在大量重复。比如上图右侧中,红框里面人物反复出现。

7.1.8 如何解决mode collapsing

方法一:针对目标函数的改进方法

为了避免前面提到的由于优化maxmin导致mode跳来跳去的问题,UnrolledGAN采用修改生成器loss来解决。具体而言,UnrolledGAN在更新生成器时更新k次生成器,参考的Loss不是某一次的loss,是判别器后面k次迭代的loss。注意,判别器后面k次迭代不更新自己的参数,只计算loss用于更新生成器。这种方式使得生成器考虑到了后面k次判别器的变化情况,避免在不同mode之间切换导致的模式崩溃问题。此处务必和迭代k次生成器,然后迭代1次判别器区分开[8]。

DRAGAN则引入博弈论中的无后悔算法,改造其loss以解决mode collapse问题[9]。

前文所述的EBGAN则是加入VAE的重构误差以解决mode collapse。

方法二:针对网络结构的改进方法

Multi agent diverse GAN(MAD-GAN)采用多个生成器,一个判别器以保障样本生成的多样性。具体结构如下:

相比于普通GAN,多了几个生成器,且在loss设计的时候,加入一个正则项。正则项使用余弦距离惩罚三个生成器生成样本的一致性。

MRGAN则添加了一个判别器来惩罚生成样本的mode collapse问题。具体结构如下:

输入样本x通过一个Encoder编码为隐向量E(x),然后隐向量被Generator重构,训练时,Loss有三个。D_MR(重构误差)用于指导生成real-like的样本。而D_D则对E(x)z生成的样本进行判别,显然二者生成样本都是fake samples,所以这个判别器主要用于判断生成的样本是否具有多样性,即是否出现mode collapse。

方法三:Mini-batch Discrimination

Mini-batch Discrimination在判别器的中间层建立一个mini-batch layer用于计算基于L1距离的样本统计量,通过建立该统计量,实现了一个batch内某个样本与其他样本有多接近。这个信息可以被判别器利用到,从而甄别出哪些缺乏多样性的样本。对生成器而言,则要试图生成具有多样性的样本。

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

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

相关文章

论文| Convolutional Neural Network-based Place Recognition - 2014

2014-Convolutional Neural Network-based Place Recognition

PID c++算法学习和实现

原理图: (1)位置式PID 是1:当前系统的实际位置,与你想要达到的预期位置的偏差, 2:进行PID控制,误差会一直累加,会使当前输出与过去的所有输入相关,输入uk出错&#xff…

为什么别人能拿到大厂offer?你应该明白这些java面试技巧!

言简意赅的说明自己的工作时间,擅长技术栈和自己的工作预期。 注意准备两份自我介绍,一个是跟面试官说的,一个是跟HR说的。 项目经验介绍 选一个自己感觉是最成功的,而且还是最有把握的项目,讲给面试官。 简单说下…

Lvgl9 WindowsSimulator Visual Studio2017

因为在操作过程中遇到了一些错误,所以将操作及解决问题的过程记录下来。 一、下载lv_port_pc_visual_studio github链接:GitHub - lvgl/lv_port_pc_visual_studio: Visual Studio projects for LVGL embedded graphics library. Recommended on Windows. Linux su…

Linux系统使用Docker部署MeterSphere并实现公网访问本地测试平台

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

JavaWeb的简单了解

一、什么是JavaWeb 1. JavaWeb:是使用jsp和JavaBean技术开发动态网站的 2.是什么动态网站 和html的区别在哪:thml开发的网站只能在你自己电脑上访问其他人可以访问 3.那怎么开发JavaWeb:我们首先需要eclipse还需要Tomcat 小tips&am…

跨站请求伪造漏洞(CSRF)

什么是CSRF CSRF(Cross-Site Request Forgery),也被称为 one-click attack 或者 session riding,即跨站请求伪造攻击。 漏洞原理 跨站请求伪造漏洞的原理主要是利用了网站对用户请求的验证不严谨。攻击者会在恶意网站中构造一个…

正信法律:老板一直拖欠工资怎么办

在职场中,薪酬是劳动者辛勤工作的直接回报,然而不幸的是,拖欠工资的现象时有发生。面对老板一直拖欠工资的困境,员工应采取一系列明智而有效的措施来维护自己的合法权益。 与雇主进行沟通。清晰、冷静地表达自己的诉求&#xff0c…

电脑怎么下载微信小程序的视频

电脑怎么下载微信小程序中的视频资源,本篇文章就教大家如何下载微信小程序的视频资源的方法,这里要借助一个工具:下载高手 下载高手链接:https://pan.baidu.com/s/1qJ81sNBzzzU0w6DWf-9Nxw?pwdl09r 提取码:l09r --来自百度网盘…

个人在线要饭网站源码

源码简介 施舍也要讲究便捷,如果能像购物一样,那也是很美的一件事情; 接入了支付宝当面付系统. 安装环境 php5.6 Nginx 安装教程 1.上传源码压缩包到网站目录并解压即可 2.支付配置 /修改文件 app/config.php /*** 请填写以下配置信…

互联网大厂ssp面经之路:计算机网络part1

1. 计算机网络的组成部分有哪些? a. 硬件设备:计算机网络由各种硬件设备组成,包括计算机、服务器、路由器、交换机、网卡等。这些设备通过物理连接(如网线、光纤)相互连接。 b. 协议:计算机网络中的通信需…

vue商城项目vue shop vite

Vue Shop 是一个基于 Vue.js 框架构建的电子商务平台,它利用了 Vue 的响应式数据绑定和组件化的特点,为用户提供了一种快速开发和部署在线商店的解决方案。Vite 是一种现代化的前端构建工具,它提供了快速的冷启动、即时模块热更新&#xff08…

数据安全之路:Databend 用户与角色管理应用

Databend 目前支持基于角色的访问控制 (RBAC) 和 自主访问控制 (DAC) 模型,用于访问控制功能。 通过本指南,我们会了解权限和角色在 Databend 中的基本概念,以及如何管理角色、继承角色与建立层级、设置默认角色以及所有权的重要性。这些功能…

springboot-开源项目-追踪法-简单有效,从F12到SQL数据库表

使用的技术栈:springbootmybatis,edge浏览器 插件:MybatisX 第一步: 按F12,选择网络 第二步: 进入IDEA编辑器,键盘按两次shift键,点击第一个,快速定位到该操作 3: 我…

解码rmallox勒索病毒:深入了解与全面应对这一网络威胁

随着科技的不断发展,我们的生活已经与数字世界紧密相连。然而,这种紧密的联系也带来了新的安全隐患,其中勒索病毒就是近年来网络安全领域的一个突出问题。特别是rmallox勒索病毒,它以其独特的加密性和破坏性,给全球范围…

一起找bug之购物

如果不是购物车满了,大概都不会发现这个 bug 淘宝 APP 修复了购物车满的情况下,往里面添加新商品时,会把一个老商品移入收藏夹, 但是如果这个老商品是已失效状态,就无法自动移入收藏夹,而且会一直在购物车…

Qt之QSS样式表

QSS简介 QSS(Qt Style Sheet)样式表是一种用于描述图形用户界面(GUI)样式的语言。它允许开发者为应用程序的控件定义视觉外观,例如颜色、字体、尺寸和布局等。 QSS 样式表的主要目的是提供一种简洁而灵活的方式来美化…

Vue 读取后台二进制文件流转为图片显示

Vue 读取后台二进制文件流转为图片显示 后台返回格式 <img :src"payImg" id"image" style"width: 150px;height: 150px;" alt"">axios写法 重点 responseType: ‘blob’ &#xff0c; 使用的是res中的data blob this.$axios.…

Windows安装MySQL

文章目录 一、下载MySQL安装包1、选择版本以及Windows系统点击下载2、选择No thanks,just start my download.3、下载到指定目录解压即可 二、添加环境变量三、添加配置文件四、初始化MySQL数据库服务器五、安装启动服务六、修改连接登录密码七、停止MySQL服务 一、下载MySQL安…

Linux网络的封包和拆包

一般使用socket 到令牌环网然后向上逐渐拆包 MTU:最大的传输单元 以太网&#xff1a;1500 mss&#xff1a;网络类型&#xff0c;线路&#xff0c;以及特性相关