深度学习中的 GANs 详解从原理到实践1. 背景与动机生成对抗网络Generative Adversarial Networks, GANs是深度学习领域的重要突破它由 Ian Goodfellow 等人于 2014 年提出。GANs 通过对抗训练的方式让生成器和判别器相互竞争从而生成逼真的样本。GANs 在许多领域取得了显著的成果图像生成生成逼真的人脸、风景等图像图像修复修复图像中的缺失部分风格迁移将图像从一种风格转换为另一种风格超分辨率提高图像的分辨率文本到图像生成根据文本描述生成对应图像数据增强生成用于训练的合成数据2. 核心概念与原理2.1 GANs 的基本结构GANs 由两个主要组件组成生成器Generator负责从随机噪声中生成假样本判别器Discriminator负责区分真实样本和生成的假样本2.2 GANs 的工作原理GANs 的训练过程是一个极小极大博弈minimax game生成器试图生成尽可能逼真的样本以欺骗判别器判别器试图正确区分真实样本和生成的假样本最终生成器能够生成与真实样本无法区分的假样本2.3 GANs 的数学模型GANs 的目标函数为[ in_{G} ax_{D} V(D, G) athbb{E}{x im p{data}(x)}[og D(x)] athbb{E}{z im p{z}(z)}[og (1 - D(G(z)))] ]其中p_{data}(x) 是真实数据的分布p_{z}(z) 是噪声的分布G(z) 是生成器生成的假样本D(x) 是判别器判断样本为真实的概率3. GANs 的实现3.1 基本 GAN 的实现import torch import torch.nn as nn import torch.optim as optim import numpy as np import matplotlib.pyplot as plt from torch.utils.data import DataLoader from torchvision import datasets, transforms # 超参数 latent_dim 100 batch_size 64 lr 0.0002 epochs 50 # 数据预处理 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) # 加载数据 dataset datasets.MNIST(root./data, trainTrue, downloadTrue, transformtransform) dataloader DataLoader(dataset, batch_sizebatch_size, shuffleTrue) # 生成器 class Generator(nn.Module): def __init__(self, latent_dim): super(Generator, self).__init__() self.model nn.Sequential( nn.Linear(latent_dim, 256), nn.LeakyReLU(0.2), nn.Linear(256, 512), nn.LeakyReLU(0.2), nn.Linear(512, 1024), nn.LeakyReLU(0.2), nn.Linear(1024, 28*28), nn.Tanh() ) def forward(self, z): img self.model(z) img img.view(img.size(0), 1, 28, 28) return img # 判别器