深入理解GAN网络

Generative Adversarial Networks创造性地提出了对抗训练来代替人工指定的loss。之前的文章初步理解了一下,感觉还是不到位,在这里再稍微深入一点。

交叉熵cross entropy

鉴别器是GAN中重要的一部分,鉴别器和生成器交替训练的过程就是adversarial training的过程。而鉴别器的本质是一个二分类网络,所以要理解gan loss,就首先要熟悉二分类中经典的交叉熵。

交叉熵中的“交叉”指的是对数部分使用的概率分布和加权求和部分使用的概率分布不同。具体而言,对数部分使用的是预测的结果,而加权求和部分使用的是真实标签的分布。所以二分类的交叉熵为:

注意上面公式中的.表示乘积,并且等式右边应该整体取负数。

鉴别器discriminator 

当鉴别器输入为真实数据, 

预测结果标签交叉熵的负数
D(X)1

当鉴别器输入为生成器的输出,

预测结果标签交叉熵的负数
D(G(Z))0

这两个交叉熵取负的曲线如下所示:

因为上述曲线没有考虑负号,所以应该是取最大值时损失函数最小,结合横坐标取值范围是0~1,所以鉴别器的优化目标是上图中箭头所指的位置。对应公式为:

生成器Generator 

生成器和鉴别器做对抗,所以优化目标正好是上式最小:

但其实生成器只参与上式中的第二项。可以看到,为了使第二项最小,D(G(Z))要逼近1,这意味着生成器的目标是让鉴别器认为生成器的结果是真。

The Generator needs to fool the discriminator by generating images as real as possible.

需要说明的是,虽然生成器G的目标是log(1 − D(G(z)))和D(G(z))=1是一致的,但一开始生成器很弱,鉴别器可以轻松区分开来,所以在训练前期可以使用D(G(z))来获得更大的梯度。

进一步理解

交替训练

把生成器和鉴别器的优化目标合并在一起,可以写为:

这个公式优美地表示了生成器和鉴别器的优化方向是共线的,只不过方向正好相反。既然方向相反,那就不能同步训练,而是要交替进行:

The adversarial loss can be optimized by gradient descent. But while training a GAN we do not train the generator and discriminator simultaneously, while training the generator we freeze the discriminator and vice-versa!

不平衡

整体上看D和G是交替训练,但是比例却不同。D更新时有k step,G却只有1 step。这样只要G更新足够慢,D就可以一直保持在最优解附近。

这其实和受限玻尔兹曼机(Restricted Boltzmann Machine)有关。相关中文资料,英文资料。

受限玻尔兹曼机由多伦多大学的 Geoff Hinton 等人提出,是一种可通过输入数据集学习概率分布的随机生成神经网络。随机指的是如果神经元被激活时会产生随机行为;受限指的是同一层的不同节点之间是不进行通信的,而不同层之间会有信息双向流动,并且权值相同。

但是到这里仍然没有为什么D需要训练k step,有更懂的朋友可以解释一下。我的理解是D对于整个GAN网络的效果很关键,是需要维持在一个很高的水平。但一开始G很弱,D可以很轻松区分开来,没必要训练那么多次。所以一种可取的策略是先训练生成器k1次,然后再训练判别器k2次,然后再交替训练。

损失函数

我们知道有很多映射关系是无法准确写出表达式的,而CNN的本质是基于 Universal Approximation Theorem,可以实现对任意函数的拟合。为了去衡量CNN的好坏,还是需要Explicit loss function来指导CNN中的梯度更新。

Explicit loss function的问题是它需要人工指定,并且是和任务相关的,比如:

L1 loss (Absolute error)

Used for regression task

L2 loss (Squared error)

Similar to L1 but more sensitive to outliers.

Cross-entropy loss

Usually used in classification tasks.

Dice loss (IoU)

Used in segmentation tasks.

KL Divergence: 

For measuring the difference between two distributions.

当任务更加复杂时,比如对黑白图像上色,传统的loss 函数会遇到各种问题。如MSE倾向于求平均的特性,预测结果是几种可能性的加权结果,带来的问题就是要么图像变模糊,要么出现不切实际的结果(两个可能性是真实存在的,强行加权求和的结果是不存在的)。

既然loss 函数也是函数,那么和之前的思想一样,也可以再使用一个CNN来拟合。这其实就是GAN的思想。判别网络潜在学习到的损失函数隐藏在网络之中,不同的问题这个函数就不一样,所以说可以自动学习这个潜在的损失函数 learned loss function,而不用人为地根据任务去调整。

学习分布

GAN新加了一个CNN去拟合损失函数,而这个CNN是一个分类网络。分类网络的损失函数是交叉熵,衡量两个分布的差异,所以可以认为整个GAN其实就是在学习一个概率分布。

D的本质是比较两个分布的差异,所以G的输出本质也是一种分布,而G的输入可以是均匀分布的噪声,所以G的学习目标其实是学习分布的迁移。可以看到,G的输入是均匀分布的z,G的输出x的分布绿色曲线一点点在向真实正态分布靠近。

所以说GAN是在学习给定GT的分布。

https://www.slideshare.net/slideshow/improved-trainings-of-wasserstein-gans-wgangp/104146363#4

reference:

1. https://zhuanlan.zhihu.com/p/149186719

2.Understanding GANs — Deriving the Adversarial loss from scratch

3.https://openai.com/index/generative-models/

4.https://medium.com/vitalify-asia/gans-as-a-loss-function-72d994dde4fb

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PCL 移动立方体三维重建——RBF算法【2024最新版】

目录 一、算法原理1、算法概述2、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接,首发于:2024年9月1日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、算法概述 该算法实现的是Reconstruction a…

微信小程序服务器费用一年多少?微信小程序开发

在互联网时代,微信小程序已成为众多企业和个人拓展业务、提升服务品质的有力工具。然而对于许多准备涉足小程序领域的朋友来说【开发一个小程序大概需要多少钱】以及【微信小程序服务器费用一年需要多少】是首要关注的问题,今天飞飞将和你们分享小程序服…

OPenCV结构分析与形状描述符(3)计算一个点集的最小外接矩形的函数boundingRect()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算一个点集的最小右上边界矩形或灰度图像中的非零像素。 该函数计算并返回指定点集或灰度图像中非零像素的最小右上边界矩形。 在OpenCV中&am…

ardupilot开发 --- MQTT 篇

原图:ardupilot-onboardComputer-4Glink-console.drawio 白嫖党请点赞、收藏、关注 你说在一起要算命 前言参考文献 前言 为什么在ardupilot开发过程中要用到MQTT ? 客户要求向他们的指挥中心平台推送视频流和飞控数据,即要将图数传数据推送给…

LTM4622双路电源芯片的相关测试

最近需要使用LTM4622电源芯片,所以做了demo板进行测试: 1.原理图如下: 2.用AD画的电路板如下: 3.芯片相关知识: 芯片的封装: 典型应用: 管脚定义 VIN:电源的输入管脚。 RUN:相当于输出使能脚…

C语言 | Leetcode C语言题解之第387题字符串中的第一个唯一字符

题目&#xff1a; 题解&#xff1a; struct hashTable {int key;int val;UT_hash_handle hh; };int firstUniqChar(char* s) {struct hashTable* position NULL;int que[26][2], left 0, right 0;int n strlen(s);for (int i 0; i < n; i) {int ikey s[i];struct has…

UnityShaderGraph 卡通水面效果

效果预览&#xff1a; 原理&#xff1a; 使用三张噪声贴图&#xff0c;结合UV偏移制作水面波纹混合的假象效果 噪声图1&#xff1a; 噪声图2&#xff1a; 噪声图3&#xff1a; 三次采样都是同样的方法&#xff0c;使用step函数来二分噪声 三张噪声采样结果相乘得到最终的波纹…

JVM系列(五) -内存相关的调优参数

一、摘要 在上篇文章中,我们详细介绍了 JVM 的内存布局。 今天这篇文章,并结合之前的介绍知识,一起了解一下 JVM 内存相关的调优参数。 二、内存设置相关的命令 所有内存溢出的问题,除了代码可能存在问题以外,更直观的问题是内存空间不足,如何通过参数来控制各区域的…

网络层 III(划分子网和构造超网)【★★★★★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 一、网络层转发分组的过程 分组转发都是基于目的主机所在网络的&#xff0c;这是因为互联网上的网络数远小于主机数&#xff0c;这样可以极大地压缩转发表的大小。…

三诺动态血糖管理在医院中的应用

一、引言 随着糖尿病患病率的逐年上升&#xff0c;糖尿病管理已成为医疗体系中的重要挑战。特别是在医院环境中&#xff0c;针对重症及需要精细化治疗的患者&#xff0c;动态血糖管理显得尤为重要。传统血糖监测手段的局限性日益凸显&#xff0c;而三诺生物传感股份有限公司&am…

微服务CI/CD实践(四)Jenkins部署及环境配置

微服务CI/CD实践系列&#xff1a; 微服务CI/CD实践&#xff08;一&#xff09;环境准备及虚拟机创建 微服务CI/CD实践&#xff08;二&#xff09;服务器先决准备 微服务CI/CD实践&#xff08;三&#xff09;gitlab部署及nexus3部署 微服务CI/CD实践&#xff08;四&#xff09…

英伟达AI超级计算机SuperPod:H100→GH200→GB200

英伟达的 DGX SuperPOD 是一台完整的数据中心级 AI 超级计算机&#xff0c;采用模块化的设计&#xff0c;支持不同规模大小的设计。每台超级计算机都在出厂前完成了搭建、布线和测试&#xff0c;从而大大加快了在用户数据中心的部署速度 。 NVIDIA DGX SuperPOD是下一代数据中心…

DML、DQL、DCL的基础介绍

1.DML、DQL、DCL 1.1DML-介绍 DML英文全称Data Manipulation Language&#xff08;数据操作语言&#xff09;&#xff0c;用来对数据库中表的数据记录进行增删改操作 添加数据&#xff08;INSERT&#xff09;修改数据&#xff08;UPDATE&#xff09;删除数据&#xff08;DEL…

echarts环形图

let dataValue[{value: 30,name: 桥梁,percent: 0.25,color: rgba(248,95,94,1),radius: [75%, 80%],center: [22%, 50%],},{value: 15,name: 隧道,percent: 0.25,color: rgba(243,185,71,1),radius: [65%, 70%],center: [22%, 50%],},{value: 18,name: 路基,percent: 0.25,col…

基于Android Studio的行程记录APK开发指南(三)---界面设计及两种方法获取用户位置

前言 本系列教程我们来看看如何使用Android Studio去开发一个APK用于用户的实时行程记录 第一期&#xff1a;基于Android Studio的用户行程记录APK开发指南(一)&#xff1a;项目基础配置与速通Kotlin-CSDN博客第二期&#xff1a;基于Android Studio的行程记录APK开发指南(二):…

设计模式学习-简单的命令模式例子

上一章节介绍过了命令模式&#xff0c;这一篇文章就简单的做一个小案例来巩固学习 搭建场景 简单的搭建一个场景就行 &#xff0c;随便准备一个物体放在场景中位置Reset一下即可。 代码编写 定义接口&#xff08;或者抽象类&#xff09;ICommand 用来规范Command的行为。注意…

Linux查看jar包错误日志及持久化运行jar包

一、查看jar包运行信息命令&#xff1a;ps -ef | grep java 如图&#xff0c;给出了所部署jar包的环境变量&#xff0c;服务名称&#xff0c;服务端口信息。 这样便能得到部署的jar包是否在服务器成功运行及基本信息。 二、查看日志 启动信息无误&#xff0c;查看日志是否有报错…

SprinBoot+Vue在线商城微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

基于ssm+vue+uniapp的跑腿平台小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

SSM非物质文化遗产社区APP---附源码98956

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…