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

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

时间2025-08-03 07:54:44分类IT科技浏览7938
导读: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主要优化什么)