首页IT科技生成对抗网络gan原理(对抗生成网络(GAN)中的损失函数)

生成对抗网络gan原理(对抗生成网络(GAN)中的损失函数)

时间2025-08-05 05:59:41分类IT科技浏览5574
导读:目录...

目录

GAN的训练过程:

L1和L2损失函数的区别

基础概念

相同点

差异

GAN的训练过程:

1             、先定义一个标签:real = 1             ,fake = 0              。当然这两个值的维度是按照数据的输出来看的                    。再定义了两个优化器       。用于生成器和判别器       。

2                     、随机生成一个噪声z                    。将z作为生成器的输入                     ,输出gen_imgs(假样本)              。

3       、计算生成器的损失

定义:生成器的损失为g_loss       。损失函数为adverisal_loss()                    。判别器为discriminator()              。 g_loss = adverisal_loss(discriminator(gen_imgs), real) g_loss.backward() optimizer_G.step()

可以看出来       ,g_loss是根据一个输出(将生成的样本作为输入的判别器的输出)与real的一个损失。

1)discriminator(gen_imgs) 的输出是个什么?

既然是判别器             ,意思就是判别gen_imgs是不是真样本                    。如果是用softmax输出                     ,是一个概率       ,为真样本的概率                    。

2)g_loss = adverisal_loss(discriminator(gen_imgs), real)

计算g_loss就是判别器的输出与real的差距      ,让g_loss越来越小                     ,就是让gen_imgs作为判别器的输出的概率更接近valid。就是让gen_imgs更像真样本              。

3)要注意的是              ,这个g_loss用于去更新了生成器的权重                    。这个时候      ,判别器的权重并没有被更新       。

4             、分别把假样本和真样本都送入到判别器              。

real_loss = adverisal_loss(discriminator(real_imgs), real) fake_loss = adverisal_loss(discriminator(gen_imgs.detach()), fake) d_loss = (real_loss + fake_loss) / 2 d_loss.backward() optimizer_D.step()

real_loss是判别器去判别真样本的输出                    ,让这个输出更接近与real                    。

fake_loss是判别器去判别假样本的输出              ,让这个输出更接近与fake       。

d_loss是前两者的平均       。

损失函数向后传播,就是为了让d_loss ---> 0                    。也就是让:

real_loss ---> 0 ===> 让判别器的输出(真样本概率)接近 real

fake_loss ---> 0 ===> 让判别器的输出(假样本概率)接近 fake

也就是说                    ,让判别器按照真假样本的类别                     ,分别按照不同的要求去更新参数              。

5                     、损失函数的走向?

g_loss 越小,说明生成器生产的假样本作为判别器的输入的输出(概率)越接近real             ,就是生成的假样本越像真样本       。

d_loss越小                     ,说明判别器越能够将识别出真样本和假样本                    。

所以       ,最后是要让g_loss更小             ,d_loss更接近0.5              。以至于d_loss最后为0.5的时候                     ,达到最好的效果。这个0.5的意思就是:判别器将真样本全部识别正确       ,所以real_loss=0                    。把所有的生成的假样本识别错误(生成的样本很真)      ,此时fake_loss = 1                    。最后的d_loss = 1/2。

补充:

L1和L2损失函数的区别

基础概念

    L1损失函数又称为MAE(mean abs error)                     ,即平均绝对误差              ,也就是预测值和真实值之间差值的绝对值              。

    L2损失函数又称为MSE(mean square error)      ,即平均平方误差                    ,也就是预测值和真实值之间差值的平方                    。

相同点

    因为计算的方式类似              ,只有一个平方的差异,因此使用的场合都很相近                    ,通常用于回归任务中       。

差异

    1)L2没有L1鲁棒                     ,直观来说,L2会将误差平方             ,如果误差大于1                     ,则误差会被放大很多       ,因此模型会对异常样本更敏感             ,这样会牺牲许多正常的样本              。当训练集中含有更多异常值的时候                     ,L1会更有效                    。

    2)如果是图像重建任务       ,如超分辨率       、深度估计      、视频插帧等      ,L2会更加有效                     ,这是由任务特性决定了              ,图像重建任务中通常预测值和真实值之间的差异不大      ,因此需要用L2损失来放大差异                    ,进而指导模型的优化       。

    3)L1的问题在于它的梯度在极值点会发生跃变              ,并且很小的差异也会带来很大的梯度,不利于学习                    ,因此在使用时通常会设定学习率衰减策略       。而L2作为损失函数的时候本身由于其函数的特性                     ,自身就会对梯度进行缩放,因此有的任务在使用L2时甚至不会调整学习率             ,不过随着现在的行业认知                     ,学习率衰减策略在很多场景中依然是获得更优模型的手段                    。

 

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

展开全文READ MORE
华为手机怎么看蓝牙传输记录(华为手机蓝牙传输记录在哪)