首页 > 其他分享 >GAN之最大最小博弈

GAN之最大最小博弈

时间:2023-09-25 17:14:08浏览次数:37  
标签:Loss 博弈 函数 生成器 最小 损失 GAN log 判别

我们已经知道,GAN使用的损失函数为特殊的二进制交叉熵函数(BCE Loss),公式常写作

\[\mathop{min} \limits_G \mathop{max} \limits_D V(D,G)=\mathbb{E}_{x \sim Pdata(x)}[logD(x)]+\mathbb{E}_{z \sim Pz(z)}[log(1-D(G(z)))] \]

但是,这其中的 \(\mathop{min} \limits_G \mathop{max} \limits_D\) 有着什么样的含义?在吴恩达生成对抗神经网络的课程中所提到的生成器想要“最大化”损失,判别器想要“最小化”损失,为什么在这个公式中刚好又是相反的?你可能会说,吴恩达课程中的交叉熵前面有个负号,那么这个负号是为什么会出现在前面?

首先我们先不看公式,先来看看吴恩达课程中是怎么描述这个最大最小博弈的。

生成器想要最大化损失函数,因为这意味着鉴别器表现不佳,并且其将假值判定为真值。判别器想要最小化损失函数,因为这意味着它正确的分类的图像。

讲人话,对于生成器来讲,生成的图像能够使得判别器判断不出真假,达到以假乱真的效果,那么生成器的目的就达到了。而对于判别器来讲,判别器当然希望自己越能分辨出图片的真假越好。这段话没毛病,但是好像跟我们的 \(\mathop{min} \limits_G \mathop{max} \limits_D\) 所违背?那我们来再仔细看眼这个公式。

我们先将公式分解一下,把交叉熵这个损失函数单独提取出来,即

\[V(D,G)=\frac{1}{m}\sum^m_{i=1}[logD(x_i)+log(1-D(G(z_i)))] \]

该式表示为,全部\(m\)个样本的交叉的均值(因为当真实数据和生成数据的样本点固定下来时,期望\(\mathbb{E}\)就等于均值)。在式中,\(x_i\)代表真实数据,\(z_i\)代表和真实数据相同结构的潜在噪声,也就是随机数据。则\(G(z_i)\)表示在生成器(Generator)中基于\(z_i\)生成的假数据,而\(D_i\)则表示判别器(Discriminator)在真实数据\(x_i\)上的判断结果,进一步\(D(G(z_i))\)则表示为判别器在生成器的假数据上的判断结果。其中,这两个结果都是基于“真”来讲的,即\(D(x_i)\)与\(D(G(z_i))\)都是样本为真(标签为1)的概率。

那么,看到了这个式子中,这么多的\(log\)函数,我们直接想到其函数图

通过函数图,我们更能够清晰看到,该函数是一个单调递增的函数。结合上面所描述的,\(D(x_i)\)与\(D(G(z_i))\)既然描述的都是样本为真的概率,那么其取值应当为\([0, 1]\),那么\(log\)函数在定义域\([0, 1]\)区间内,取值则应当为\((-\infty,0)\)。换句话说,在损失函数\(V\)上不存在最小值,只存在最大值。

根据上述结论,可以总结出:当\(logD(x_i)\)最大(即将真实数据判别为真),并且\(log(1-D(G(z_i)))\)最大时(即将假数据判断为假),损失函数达到最大值。即损失\(V\)在判别器的判别能力最强时达到最大值。那这个结论不就是说判别器判的越准确,损失越大?这好像违背我们“损失函数”这个词的意思。那么我们再从判别器和生成器两个角度来看下这个问题。

对于判别器来讲,判别器都需要判断真实数据和生成数据,也就是损失函数\(V\)的前半部分和后半部分都与其有关联。那么对于判别器的损失在数学形式上和函数\(V\)是一致的,我们用\(Loss_D\)来表示判别器的损失,则有

\[Loss_D=\frac{1}{m}\sum^m_{i=1}[logD(x_i)+log(1-D(G(z_i)))] \]

而对于生成器来讲,生成器无法影响\(D(x_i)\),因此只需要关注函数\(V\)的后半部分,我们用\(Loss_G\)来表示生成器的损失,则有

\[Loss_G=\frac{1}{m}\sum^m_{i=1}[log(1-D(G(z_i)))] \]


假如我们是一个收古董的中介,我们肯定希望自己有一双火眼金睛,可以一眼看出卖家给我们的画作是不是真迹,或者当我们无法确认的时候,我们给别人说“你的收藏品八成是真的”。这时我们就相当于判别器,希望自己判断尽量准确的同时,输出“为真的概率”。在带入\(Loss_D\)后,最佳的损失值则是

\[\begin{align} Loss_D&=\frac{1}{m}\sum^m_{i=1}[logD(x_i)+log(1-D(G(z_i)))]\nonumber\\ &=\frac{1}{m}\sum^m_{i=1}[log1+log(1-0)]\nonumber\\ &=0\nonumber \end{align} \]

这说明判别器希望最大化\(Loss_D\),并且理论上限是0,其本质是令\(D(x_i)\)逼近1,\(D(G(z_i)))\)逼近0。

假如我们是个专业古董造假团队,我们肯定希望自己造出来的东西越真越好,最好真的连顶尖仪器都扫描不出来,因此这时候我肯定希望我的\(D(G(z_i))\)是无限接近1的,也就是让判别器判断我的东西就是真的。在带入\(Loss_G\)后,最佳损失值则是

\[\begin{align} Loss_G&=\frac{1}{m}\sum^m_{i=1}[log(1-D(G(z_i)))]\nonumber\\ &=\frac{1}{m}\sum^m_{i=1}[log(1-1)]\nonumber\\ &=-\infty\nonumber \end{align} \]

这说明生成器希望最小化\(Loss_G\),并且理论下限是无穷小,其本质是令\(D(x_i)\)逼近1,\(D(G(z_i)))\)逼近0。

由此,通过共享损失函数\(V\),判别器与生成器实现了互相对抗,也就是我们所说的最大最小博弈,即 \(\mathop{min} \limits_G \mathop{max} \limits_D\) 。只要训练过程很顺利,那么\(D(x_i)\)与\(D(G(z_i)))\)都应该在理论上非常接近0.5

这时候,我们再回到我们的损失函数,再次看到这个函数,你可能还是认为“这个log函数太抽象了!怎么会判真的概率越大,损失越大呢!不行,我觉得还是应该判真的概率越大,损失越小才对!”那没关系,我们在log函数的前面加个负号,那这整个函数图像就上下颠倒了,就变为了在定义域\([0,1]\)中没有最大值,只有最小值,且最小值为0的单调递减函数了。同样的,我们需要给损失函数\(V\)加上个负号,再把我们以上所有结论全部都取反一遍。这时候,吴恩达老师课程中所述的生成器想要“最大化”损失,判别器想要“最小化”损失也就能解释了。

标签:Loss,博弈,函数,生成器,最小,损失,GAN,log,判别
From: https://www.cnblogs.com/ToryRegulus/p/17728338.html

相关文章

  • 博弈论——连续产量古诺模型
    连续产量古诺模型连续产量古诺模型是博弈论中非常经典的模型,以两厂商连续产量古诺博弈为例:1、模型建立Player:两个供应相同产品的厂商产量:厂商1的产量为q1,厂商2的产量为q2,市场总供给为Q=q1+q2。市场出清价格P:市场总供给的函数P(Q)=8-Q(市场出清价格是可以将产品全部卖出的价格)成本......
  • Strategic game POJ - 1463 树的最小点覆盖,树形dp
    题意:树的最小点覆盖,选择最少的点覆盖所有边。分析:状态:f[u][0/1]表示不选/选编号u的点的最优解转移:不选u,则一定选u的儿子v,即f[u][0]+=f[v][1]选u,则可以选,也可以不选u的儿子v,即f[u][1]+=min(f[v][0],f[v][1]);目标:ans=min(f[rt][0],f[rt][1]);点击查看代码#inc......
  • 基于已知点云数据的最小外接圆matlab函数
    基于已知点云数据的最小外接圆matlab函数–MATLAB中文论坛(ilovematlab.cn) %该函数是在其他网站看到的,以此共享。有两种方法(函数)实现。%第一种比较费时:function[xc,yc,r]=smallestcircle(x,y)%Thisfindsthecircleofsmallestareacontainingall%thepoint......
  • [IJCAI 2023]Fighting against Organized Fraudsters Using Risk Diffusion-based Par
    [IJCAI2023]FightingagainstOrganizedFraudstersUsingRiskDiffusion-basedParallelGraphNeuralNetwork文章设计了一种基于社区的医疗保险欺诈行为检测。模型为了提高精度,模型设计了一组异构图模型和一组同构图模型。输入的异构图是保险受益人-医疗服务提供者的图,......
  • 计算机最小存储单位bit
    计算机最小存储单位bit,一个bit位只能存储0或者1,计算机是二进制那么两个bit能存11,10,01,00,这四个数字,如果映射到十位数,那就是,0,1,2,3三个bit位,能寸,111,110,101,100,011,010,001,000,这八个数字,映射到十进制,那就是0,1,2,3,4,5,6,7,8以此类推,1B=8bit,也就是能存2八次方个二进制组合,映射到十进制,也就是0......
  • 最小二乘法求解线性回归模型
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • rsyslog loganalyzer 日志审计
      rsyslog服务器端/etc/rsyslog.conf配置增加:$Modloadommysql$ModLoadimmark*.info;mail.none;authpriv.none;cron.none:ommysql:localhost,Syslog,rsyslog,myl@588Xx rsyslog客户端/etc/rsyslog.conf增加配置*.*@192.168.0.228:514命令行执行记录......
  • 【LeetCode】删除数对后的最小数组长度
    题目给你一个下标从0开始的非递减整数数组nums。你可以执行以下操作任意次:选择两个下标i和j,满足i<j且nums[i]<nums[j]。将nums中下标在i和j处的元素删除。剩余元素按照原来的顺序组成新的数组,下标也重新从0开始编号。请你返回一个整数,表示执行......
  • leetcode 二叉树的最小深度
    给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例1:输入:root=[3,9,20,null,null,15,7]输出:2示例2:输入:root=[2,null,3,null,4,null,5,null,6]输出:5解题思路如果当前节点为null,返......
  • 力扣-使用最小花费爬楼梯
    1.问题数组的每个索引作为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为0或1的元素......