GAN 介绍

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

介绍

生成对抗网络Generative Adversarial Networks简称GANs是一种深度学习模型由Ian Goodfellow于2014年提出。GAN由两个神经网络组成一个生成器Generator和一个判别器Discriminator它们通过对抗的方式共同训练。

判别器Discriminator

判别器的任务是区分输入数据是来自真实数据集还是生成器产生的假数据。它的目标是在面对真实数据时输出高概率面对生成器产生的数据时输出低概率。

生成器Generator

生成器的目的是产生与真实数据尽可能相似的假数据。在训练的开始生成器通常会输出随机噪声但是随着训练的进行它会逐渐学习到如何生成越来越真实的数据。生成器不直接访问真实数据而是通过判别器给出的反馈来优化它的输出。

对抗训练

GAN的训练过程可以被看作是一个博弈游戏其中生成器尝试“欺骗”判别器而判别器则尝试不被欺骗。这个过程可以用以下步骤概括

  1. 训练判别器用真实数据和生成器产生的假数据训练判别器目标是准确地区分这两者。
  2. 训练生成器固定判别器更新生成器的参数使得判别器更可能将假数据误判为真实数据。

损失函数

GANs的训练通常涉及到最小化一些损失函数这些函数会衡量判别器和生成器的性能。最常用的一个损失函数是交叉熵损失函数但也有其他的变体和改进方法。

## 伪代码
for epoch in range(num_epochs):
    for batch_data in data_loader:
        # 更新判别器
        real_images = batch_data.to(device)
        z = torch.randn(batch_size, latent_dim).to(device)
        fake_images = generator(z).detach()
        d_loss_real = discriminator(real_images)
        d_loss_fake = discriminator(fake_images)
        # 判别器损失
        d_loss = -(torch.mean(d_loss_real) - torch.mean(d_loss_fake))
        discriminator.zero_grad()
        d_loss.backward()
        discriminator_optimizer.step()
        
        # 更新生成器
        z = torch.randn(batch_size, latent_dim).to(device)
        fake_images = generator(z)
        g_loss = -torch.mean(discriminator(fake_images))
        generator.zero_grad()
        g_loss.backward()
        generator_optimizer.step()

历史

  1. 最早概念提出
    2014年,Ian Goodfellow等在论文“Generative Adversarial Nets”中首次提出了GAN的概念。提出了一种判别器和生成器对抗并互相提升的框架。

https://arxiv.org/abs/1406.2661

2.CNN条件GAN

2015年,Mirza等人提出使用卷积神经网络(CNN)作为GAN的判别器和生成器,使其可以处理图像数据。

https://arxiv.org/abs/1411.1784

3.DCGAN

2015年,Radford等人提出了DCGAN,使用CNN并提供了许多改进训练GAN的指导,成为第一个有效训练GAN的框架。

https://arxiv.org/abs/1511.06434

4.理论分析

2016年,Arjovsky等人提出Wasserstein GAN,从理论上分析了GAN训练的不稳定性,提出了Wasserstein距离改善模型稳定性。

https://arxiv.org/abs/1701.07875

5.条件GAN

2014年,Mirza等人提出条件GAN,可以控制GAN的生成结果。

https://arxiv.org/abs/1606.03657

6.进一步扩展

此后陆续出现了InfoGAN、CycleGAN等框架,GAN的应用范围不断扩展。2017年CycleGAN实现无配对图像转换。

https://arxiv.org/abs/1703.10593

7.高分辨率GAN

2018年,Brock提出BigGAN,首次实现高分辨率、高质量的图像生成。

https://arxiv.org/abs/1809.11096

8.自监督GAN

2020年,Chen提出基于对比学习的自监督GAN SimGAN,无需数据标注即可训练。

https://arxiv.org/abs/2010.08895

9.大模型GAN

近年来,大模型GAN如Nvidia的StyleGAN等可以生成更逼真的图片。GAN技术仍在不断发展中。

https://arxiv.org/abs/1912.04958

应用场景

  • 生成逼真的人脸或物体图片
  • 风格迁移如将日常照片转换为名画风格
  • 图像超分辨率即从低分辨率图像生成高分辨率版本
  • 数据增强为数据集生成新的样本

缺点

GANs的训练是复杂的并且常常面临模式崩溃mode collapse等问题模式崩溃指的是生成器开始生成非常相似或重复的样本而没有多样性。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
返回列表

上一篇:【MySQL】基础(一)

没有最新的文章了...

“GAN 介绍” 的相关文章

Spring注解中@Configuration和@Component的区别是什么 - 开发技术

本文小编为大家详细介绍“Spring注解中@Configuration和@Component的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring注解中@Configuration和@Component的区别是什么”文章能帮助大家解决疑惑,下面跟着小...

『0009』 - Solidity Types - 布尔(Booleans)_c 布尔

作者:黎跃春,布尔(Booleans)bool: 可能的取值为常量值true和false。支持的运算符:! 逻辑非&& 逻辑与|| 逻辑或== 等于!= 不等于备注:运算符&&和||是短路运算符,如f(x)||g(y),当f(x)为真时,则不会继续执行g(y)在f(x...

如何用php搭建服务器 - 编程语言

这篇“如何用php搭建服务器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何用php搭建服务器”文章吧。 一、了解PHP语...

shell学习之路

多年以前,一直想学好一门脚本语言,那么它就是shell了,手头上有2本书,<<shell脚本学习指南>>,<<shell脚本专家指南>>,那么费话不多说,现在开始吧,希望有个good start and a g...

wubi改变分区容量工具LVPM

http://lubi.sourceforge.net/lvpm.html...

用例图

用例:在不展现一个系统或子系统内部结构的情况下,对系统或子系统的某个连贯的功能单元的定义和描述。用例是对包括变量在内的一组动作序列的描述,系统执行这些动作,并产生传递特定参与者的可观察结果。 参与者是系统外部的一个实体,它以某种方式参与了用例的执行过程,通过...