深入理解GAN网络

news2024/12/27 11:53:41

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

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

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

相关文章

秒开WebView? Android性能优化全攻略

​ 大家好,我是程序员小羊! 前言: 秒开 WebView 是很多 Android 开发者追求的目标,尤其是在需要加载复杂网页内容或与 Web 进行频繁交互的应用中。然而,由于 WebView 的启动速度较慢且加载资源耗时较多,优化…

时间戳有什么重要作用

1 问题: 今天做前后端联调的时候,发现请求url路径后面跟了一段数据:“t1725537660463”,我蒙圈了,为什么是一段乱码 明明我的后端写了id这个参数,而且前端传给后端的参数只有这个7,那“ &#…

解决:使用Charles查看本机的ip地址

✨本人自己开发的开源项目:土拨鼠充电系统 ✨踩坑不易,还希望各位大佬支持一下,在GitHub给我点个 Start ⭐⭐👍👍 ✍GitHub开源项目地址👉:https://github.com/cheinlu/groundhog-charging-syst…

WIFI贴项目到底是不是“骗局”呢?由我来揭秘!

各位亲爱的朋友们,大家好!我是你们的老朋友鲸天科技千千,一直在这片互联网的热土上耕耘。相信你们对我都不会陌生,因为我常常分享一些互联网上的新奇项目和实用技巧。如果你对我的内容感兴趣,别忘了点个关注哦&#xf…

【C++ Primer Plus习题】11.6

问题: 解答: main.cpp #include <iostream> #include "Stonewt.h" using namespace std; const int SIZE 6;int main() {Stonewt stone_arr[SIZE] { 253.6,Stonewt(8,0.35),Stonewt(23,0) };double input;Stonewt eleven Stonewt(11, 0.0);Stonewt max st…

C++特殊类设计,

目录 ​编辑 一、不能拷贝的类 二、只能在栈上创建的类&#xff0c; 三、只能在堆上创建的类&#xff0c; 四、不能被继承的类&#xff0c; 五、只有一个对象的类 一、不能拷贝的类 c98&#xff1a;将拷贝构造和运算符重载私有化 C11&#xff1a;delete删除成员函数 /…

[数据集][目标检测]电梯内广告牌电动车检测数据集VOC+YOLO格式2787张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2787 标注数量(xml文件个数)&#xff1a;2787 标注数量(txt文件个数)&#xff1a;2787 标注…

2024-09-03升级问题记录:编译打包出错java.lang.OutOfMemoryError: GC overhead limit exceeded

Android工程升级&#xff0c;debug构建apk可以正常生成&#xff0c;但是release构建时出现以上错误。 按字面意思&#xff0c;GC回收时内存不够。 那么&#xff0c;解决方法&#xff1a; 在在项目根目录的gradle.properties中&#xff0c;注意不是Administrator\.gradle 的 …

linux中vim常用命令大全详细讲解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; Vim 是 Linux 系统中功能强大的文本编辑器&#xff0c;广泛用于代码编辑和配置文件的编辑。以下是 Vim 常用命令的详细讲解&#xff0c;包括基本操作、文本编辑、查找与替换、窗口操作等。 一、Vim 基本操…

Epoll 用法

Epoll 监听 EPOLL_CTL_DEL EPOLL_CTL_ADD epoll_event event event.events event.data.fd

初识redis(String,Hash,List,Set,SortedSet)

认识NoSql sql关系型数据库 nosql非关系型数据库 nosql具有非结构化&#xff0c;Key/Value&#xff0c;Document&#xff0c;Draph 无关联的&#xff0c;非sql&#xff0c;BASE&#xff08;原子性&#xff0c;持久性&#xff0c;一致性&#xff0c;隔离性&#xff09; 认识r…

盘点4款超好用的电脑数据恢复工具

如今我们的生活和工作越来越离不开电脑&#xff0c;因此电脑里面也储存了我们大量的数据&#xff1a;图片&#xff0c;文档&#xff0c;工作资料等。但是这些重要数据却会因为误删除、病毒攻击、系统崩溃等原因遭到丢失。所以数据恢复软件就变得十分的重要&#xff0c;今天&…

maya无法导出fbx

很多小伙伴使用Maya软件导出fbx格式文件时会提示“无法识别文件类型”&#xff0c;这主要是因为没有开启fbx插件造成的&#xff0c;只要开启fbx插件就能解决这个问题。 在Maya软件的“Modeling”模式下&#xff0c;点击菜单栏的“Windows”&#xff0c;在弹出的下拉框中选择“S…

Altium AD20差分对走线设置方法

Altium AD20差分对走线设置方法 1、在PCB界面右下角点击panels&#xff0c;选择"PCB"选项&#xff0c;则左下角就会出现PCB的窗口选项 2、在PCB窗口内&#xff0c;将上面的下拉菜单选择Differential Pairs Editor选项&#xff0c;然后按下图操作 3、增加差分网络分…

服务器数据恢复—OneFS文件系统下数据被删除的数据恢复案例

服务器数据恢复环境&故障&#xff1a; EMC NAS&#xff08;Isilon S200&#xff09;&#xff0c;共3个节点&#xff0c;每个节点配置12块STAT硬盘。数据分两部分&#xff1a;一部分数据为vmware虚拟机&#xff08;WEB服务器&#xff09;&#xff0c;通过NFS协议共享到ESX主…

【数据库】MySQL表的基本查询

关于表的增删查改主要分为CRUD&#xff1a;Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; 目录 1.Creat&#xff08;增加内容&#xff09; 1.1指定列插入 1.2全列插入 1.3多行插入 1.4插入冲突更新 1.5替换 2.R…

Springboot3.x.x使用SpringSecurity6(一文包搞定)

SpringSecurity6 什么是SpringSecurity? Spring Security 是一个强大的、高度可定制的身份验证&#xff08;Authentication&#xff09;和访问控制&#xff08;Authorization&#xff09;框架。它是 Spring 框架家族的一员&#xff0c;主要用于保护基于 Java 的应用程序&#…

鸿蒙开发有必要学吗

在科技飞速发展的今天&#xff0c;新的技术不断涌现&#xff0c;开发者们也面临着众多选择。其中&#xff0c;鸿蒙开发成为了一个备受关注的话题。那么&#xff0c;鸿蒙开发有必要学吗? 一、鸿蒙系统的崛起 鸿蒙操作系统是华为推出的一款面向全场景的分布式操作系统。它的出现…

CPU飙高排查步骤

1&#xff1a;top指令(查看进程信息) top指令&#xff1a;查看进程运行信息 此处1313占用90多CPU 2&#xff1a;ps指令&#xff08;查看进程中每个线程信息&#xff0c;锁定问题线程&#xff09; 查看进程里每个线程的详细占用 ps H -eo pid,tid,%cpu | grep 1313ps H:查看进…

信息学奥赛初赛天天练-83-NOIP2014普及组-基础题2-输入设备、输出设备、操作系统、二进制、整数除法、while、do while循环

1 NOIP 2014 普及组 基础题2 4 以下哪一种设备属于输出设备( ) A 扫描仪 B 键盘 C 鼠标 D 打印机 5 下列对操作系统功能的描述最为完整的是( ) A 负责外设与主机之间的信息交换 B 负责诊断机器的故障 C 控制和管理计算机系统的各种硬件和软件资源的使用 D 将没有程序编译成目…