首页IT科技损失函数怎么用(GAN的损失函数)

损失函数怎么用(GAN的损失函数)

时间2025-04-30 11:31:02分类IT科技浏览6763
导读:1.GAN 在训练过程中,生成器和判别器的目标是相矛盾的,并且这种矛盾可以体现在判别器的判断准确性上。生成器的目标是生成尽量真实的数据,最好能够以假乱真、让判别器判断不出来,因此生成器的学习目标是让判别器上的判断准确性...

1.GAN

在训练过程中            ,生成器和判别器的目标是相矛盾的                   ,并且这种矛盾可以体现在判别器的判断准确性上            。生成器的目标是生成尽量真实的数据        ,最好能够以假乱真             、让判别器判断不出来         ,因此生成器的学习目标是让判别器上的判断准确性越来越低;相反                  ,判别器的目标是尽量判别出真伪           ,因此判别器的学习目标是让自己的判别准确性越来越高                   。

当生成器生成的数据越来越真时      ,判别器为维持住自己的准确性                  ,就必须向辨别能力越来越强的方向迭代        。当判别器越来越强大时              ,生成器为了降低判别器的判断准确性   ,就必须生成越来越真的数据         。在这个奇妙的关系中                  ,判别器判断的准确性由GAN论文中定义的特殊交叉熵

V

V

V来衡量                 ,判别器与生成器共同影响交叉熵

V

V

V
,同时训练                    、相互内卷               ,对该交叉熵的控制时此消彼长的                    ,这是真正的零和博弈                  。

2. 特殊交叉熵

V

V

V

在生成器与判别器的内卷关系中    ,GAN的特殊交叉熵公式如下:

V

(

D

,

G

)

=

1

m

i

=

1

m

[

log

D

(

x

i

)

+

log

(

1

D

(

G

(

z

i

)

)

)

]

V(D,G)=\frac1m\sum_{i=1}^{m}[\log D(x_i) +\log(1-D(G(z_i)))]

V(D,G)=m1i=1m[logD(xi)+log(1D(G(zi)))]
其中            ,字母

V

V

V
是原始GAN论文中指定用来表示该交叉熵的字母                   ,对数

log

\log

log
的底数为自然底数

e

e

e
       ,

m

m

m
表示共有

m

m

m
个样本         ,因此以上表达式是全部样本交叉的均值

表达式           。

除此之外                  ,

x

i

x_i

xi
表示任意真实数据           ,

z

i

z_i

zi
与真实数据相同结构的任意随机数据      ,

G

(

z

i

)

G(z_i)

G(zi)
表示在生成器中基于

z

i

z_i

zi
生成的假数据                  ,而

D

(

x

i

)

D(x_i)

D(xi)
表示判别器在真实数据

x

i

x_i

xi
上判断出的结果              ,

D

(

G

(

z

i

)

)

D(G(z_i))

D(G(zi))
表示判别器在假数据

G

(

z

i

)

G(z_i)

G(zi)
上判断出的结果   ,其中

D

(

x

i

)

D(x_i)

D(xi)

D

(

G

(

z

i

)

)

D(G(z_i))

D(G(zi))
都是样本为“真            ”的概率                  ,即标签为

1

1

1
的概率      。

在原始论文中                 ,这一交叉熵被认为是一种“损失                   ”,但它有两个特殊之处:

不同于二分类交叉熵等常见的损失函数               ,损失

V

V

V
上不存在最小值                    ,反而存在最大值                  。具体来看    ,

D

(

x

i

)

D(x_i)

D(xi)

D

(

G

(

z

i

)

)

D(G(z_i))

D(G(zi))
都是概率            ,因此这两个值的范围都在

(

,

1

)

(0,1)

(0,1)
之间              。对于底数为

e

e

e
的对数函数来说                   ,在定义域为

(

,

1

)

(0,1)

(0,1)
之间意味着函数的值为

(

,

)

(-\infty,0)

(,0)
   。因此理论上来说        ,损失

V

V

V
的值域也在

(

,

)

(-\infty,0)

(,0)
                  。 损失

V

V

V
在判别器的判别能力最强时达到最大值         ,这就是说判别器判断得越准确时                  ,损失反而越大           ,这违背我们对普通二分类网络中的损失函数的期待                 。但我们从判别器和生成器角度分别来看待公式

V

V

V
      ,则可以很快理解这一点。

不难发现                  ,在

V

V

V的表达式中              ,两部分对数都与判别器

D

D

D
有关   ,而只有后半部分的对数与生成器

G

G

G

有关               。因此我们可以按如下方式分割损失函数:

对判别器:

L

o

s

s

D

=

1

m

i

=

1

m

[

log

D

(

x

i

)

+

log

(

1

D

(

G

(

z

i

)

)

)

]

Loss_D=\frac1m\sum_{i=1}^m[\log D(x_i) +\log(1-D(G(z_i)))]

LossD=m1i=1m[logD(xi)+log(1D(G(zi)))]
从判别器的角度来看                  ,由于判别器希望自己尽量能够判断正确                 ,而输出概率又是“数据为真        ”的概率,所以最佳情况就是所有的真实样本上的输出

D

(

x

i

)

D(x_i)

D(xi)
都无比接近

1

1

1
               ,而所有的假样本上的输出

D

(

G

(

z

i

)

)

D(G(z_i))

D(G(zi))
都无比接近0

                    。因此对判别器来说                    ,最佳损失值是:

L

o

s

s

D

=

1

m

i

=

1

m

[

log

D

(

x

i

)

+

log

(

1

D

(

G

(

z

i

)

)

)

]

=

1

m

i

=

1

m

[

log

1

+

log

(

1

)

]

=

Loss_D=\frac1m\sum_{i=1}^m[\log D(x_i) +\log(1-D(G(z_i)))]= \frac1m\sum_{i=1}^m[\log 1+\log (1-0)]= 0

LossD=m1i=1m[logD(xi)+log(1D(G(zi)))]=m1i=1m[log1+log(10)]=0
这说明判别器希望以上损失

L

o

s

s

D

Loss_D

LossD
越大越好    ,且最大值理论上可达0            ,且判别器追求大

L

o

s

s

D

Loss_D

LossD
的本质是令

D

(

x

)

D(x)

D(x)
接近

1

1

1
                   ,令

D

(

G

(

z

)

)

D(G(z))

D(G(z))
接近0    。不难发现        ,对判别器而言         ,

V

V

V
更像是一个存在上限的积极的指标(比如准确率)            。

而从生成器的角度来看                  ,生成器无法影响

D

(

x

i

)

D(x_i)

D(xi)           ,只能影响

D

(

G

(

z

i

)

)

D(G(z_i))

D(G(zi))

      ,因此只有损失的后半段与生成器相关                   。因此对生成器:

L

o

s

s

G

=

1

m

i

=

1

m

[

常数

+

log

(

1

D

(

G

(

z

i

)

)

)

]

Loss_G=\frac1m\sum_{i=1}^m[常数+\log(1-D(G(z_i)))]

LossG=m1i=1m[常数+log(1D(G(zi)))]
生成器的目标是令输出的数据越真越好                  ,最好让判别器完全判断不出              ,因此生成器希望

D

(

G

(

z

i

)

)

D(G(z_i))

D(G(zi))
越接近

1

1

1

越好        。因此对生成器来说   ,最佳损失是(去掉常数项):

L

o

s

s

G

=

1

m

i

=

1

m

log

(

1

D

(

G

(

z

i

)

)

)

=

log

(

1

1

)

=

Loss_G=\frac1m\sum_{i=1}^m\log(1-D(G(z_i)))= \log(1-1)= -\infty

LossG=m1i=1mlog(1D(G(zi)))=log(11)=
这说明生成器希望以上损失

L

o

s

s

G

Loss_G

LossG
越小越好                  ,且最小理论值可达负无穷                 ,且生成器追求小

L

o

s

s

G

Loss_G

LossG
的本质是令

D

(

G

(

z

)

)

D(G(z))

D(G(z))
接近

1

1

1
         。对生成器而言,

V

V

V
更像是一个损失               ,即算法表现越好                    ,该指标的值越低                  。从整个生成对抗网络的角度来看    ,我们(使用者)的目标与生成器的目标相一致            ,因此对我们而言                   ,

V

V

V
被定义为损失        ,它应该越低越好           。

在原始论文当中         ,该损失

V

V

V

被表示为如下形式:

min

G

max

D

V

(

D

,

G

)

=

E

x

P

d

a

t

a

(

x

)

[

log

D

(

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
seo零基础入门(从零开始学习SEO) capture one's attention(neoCapture.exe – neoCapture是什么进程 有什么用)