社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

彻底搞懂深度学习-生成对抗网络(GAN)(动图讲解)

架构师带你玩转AI • 3 周前 • 62 次点击  
2014年,一个叫Ian Goodfellow的研究生在酒吧里灵光一现:能不能让两个AI互相较劲,一个专门造假,一个专门打假?
这个看似简单的想法,彻底改变了人工智能的历史轨迹。
在GAN之前,AI就像一个只会考试的学霸——能识别图片里是猫还是狗,能预测股价涨跌,但从来不会"创作"。GAN的出现,让AI第一次拥有了创造力。
Generate Realistic Human Face using GAN - KDnuggets

一、从分类到生成的范式转换

传统机器学习的局限是什么?

在GAN出现之前,机器学习本质上是一个判别式模型的世界。判别式模型不关心数据X本身是如何产生的,只关心如何根据X做出正确的判断Y。
判别式模型的目标:学习 P(Y|X)# 例子:P(猫|图像) = 0.8        # 这张图是猫的概率80%P(垃圾邮件|邮件内容) = 0.9  # 这封邮件是垃圾邮件的概率90%P(房价|房屋特征) = 50万    # 根据房屋特征预测价格
这种模式的核心问题是:AI只能理解和分类现有数据,无法创造新数据。
判别式模型基于条件概率,通过最小化训练误差,模型能够自动发现数据中的规律,并将这些规律应用到新的、未见过的数据上。
# 给定特征向量x,预测类别y的概率P(y|x) = f(x; θ)
# 其中:# x:输入特征(如图像像素、文本词汇等)# y:输出标签(如图像类别、情感倾向等)  # θ:模型参数(需要从数据中学习)# f:参数化函数(如神经网络)
The Categorisation of Discriminative Models - by Avi Chawla
生成对抗网络(GAN)的技术突破是什么?
GAN最核心的突破是彻底改变了机器学习的目标——从判别式的"理解数据"转向生成式的"创造数据"。这是AI第一次从"分类现有数据"转向"生成全新数据"。
# 判别式模型:条件概率建模P(Y|X) - 给定输入X,预测输出Y目标:学习决策边界,区分不同类别# GAN:数据分布建模  P(X) - 直接学习数据本身的分布规律目标:理解数据如何产生,进而创造新数据

传统机器学习依赖标注数据和明确的优化目标,GAN创造了全新的自对抗学习范式。它通过两个网络相互对抗,在博弈中自动达到最优状态,无需人类设计复杂的学习规则或提供标准答案。

# 传统生成模型的困境1. 必须显式定义概率分布:P(x) = 某种数学形式2. 计算复杂积分:P(x) = ∫ P(x|z)P(z)dz (通常无解)3. 强分布假设限制了模型表达能力# GAN的突破性解决方案生成器G: Z → X  # 神经网络直接映射无需显式概率密度函数通过对抗过程隐式学习任意复杂分布

    二、对抗训练中的判别器和生成器

    什么是GAN对抗训练的核心机制?

    GAN的对抗训练本质上是一个博弈论中的零和游戏。生成器G试图生成足够逼真的假数据来欺骗判别器D,而判别器D则努力区分真实数据和生成数据。这种对抗关系驱动两个网络在竞争中共同进步。

    • 生成器的目标:最大化判别器的分类错误率
    • 判别器的目标:最小化自身的分类错误率
    • 训练过程:两个网络交替优化,在对抗中达到纳什均衡
    • 最终状态:生成器生成的数据与真实数据无法区分
    # 对抗训练的数学表达min_G max_D V(D,G) = E_{x~p_data(x)}[log D(x)] + E_{z~p_z(z)}[log(1-D(G(z)))]# 其中:# D(x):判别器对真实数据x的判断概率# G(z):生成器从噪声z生成的假数据# p_data(x):真实数据分布# p_z(z):先验噪声分布(通常为高斯分布)

    GAN的判别器网络D的设计原理是什么?

    判别器D是一个二分类器,接收数据样本并输出该样本为真实数据的概率。判别器的架构通常采用卷积神经网络,通过层次化特征提取来识别生成数据中的伪造痕迹。

    • 输入层:接收真实数据或生成数据
    • 特征提取:多层卷积操作提取判别性特征
    • 分类层:全连接层输出真假概率
    • 激活函数:最后一层使用Sigmoid输出0-1概率值
    # 判别器的前向传播过程class Discriminator:    def forward(self, x):        # x可能是真实图像或生成图像        features = self.conv_layers(x)      # 特征提取        flattened = self.flatten(features)   # 特征展平        probability = self.classifier(flattened)  # 输出概率        return probability  # 输出范围[0,1]# 判别器的损失函数D_loss = -[log(D(x_real)) + log(1-D(G(z)))]# 第一项:正确识别真实数据的奖励# 第二项:正确识别生成数据的奖励

    Looking back at the original vanilla GAN and its evolution over time | by  Anjana Samindra Perera | Towards AI

    GAN的生成器网络G的设计原理是什么?

    生成器G是一个映射网络,将低维随机噪声z映射到高维数据空间。生成器通常采用转置卷积(反卷积)架构,通过上采样操作逐步将噪声向量扩展为完整的数据样本。

    • 输入层:接收随机噪声向量(通常100-1000维)
    • 上采样:转置卷积层逐步增加空间分辨率
    • 特征合成:多层网络学习数据的复杂模式
    • 输出层:生成与真实数据同维度的样本
    # 生成器的前向传播过程  class Generator:    def forward(self, z):        # z是随机噪声向量,如shape=[batch_size, 100]        x = self.dense_layer(z)              # 全连接层扩展维度        x = self.reshape(x)                  # 重塑为特征图        x = self.deconv_layers(x)            # 转置卷积上采样        fake_data = self.output_layer(x)     # 生成最终数据        return fake_data# 生成器的损失函数G_loss = -log(D(G(z)))# 目标:最大化判别器对生成数据的误判概率
    Understanding ProGAN

    Python社区是高质量的Python/Django开发社区
    本文地址:http://www.python88.com/topic/185270
     
    62 次点击