gan网络学习笔记

对于gan网络的定义有很多参考文章,此处不再过多赘述,本文仅博主学习时对自己的知识体系补充,有一定的参考性。

  1. gan的优点:
    1. 相比于变分自动编码器(vae),gan没有引入任何决定性偏置,变分方法引入决定性偏置,因为他们优化对数似然的下界,而不是似然度本身,导致了vae生成的实例比gan更模糊
    2. 相比vae,gan没有变分下界,如果判别器训练的好,则生成器可以完美地学习到训练样本的分布。即gan是渐进一致的,但vae是有偏差的。
    3. gan应用到一些场景上,比如图片风格迁移,超分辨率,图像补全,去躁,避免了损失函数的困难,只要一个基准,就可以使用判别器,然后就可以交给对抗训练了
  2. gan的缺点:
    1. 训练gan需要到达纳什均衡,有时可以使用梯度下降法做到,有时不行,目前还未找到很好的可以达到纳什均衡的方法,所以训练gan相比vae是不稳定的。
    2. gan存在训练不稳定、梯度消失、模式崩溃的问题
      1. 模式崩溃的原因:一般出现在gan训练不稳定的时候,具体表现为生成出来的结果非常差,且加长训练时间也无法得到很好的改善。
        1. 具体原因:如果某一次g生成的样本不是很真实,,但d给出的评判概率很高,或g生成结果中的一些特征得到了d的认可,则g就会根据这个依据继续生成,然后g和d就一起自我欺骗下去。
  3.     gan不选择sgd作为优化器的原因:
    1. sgd容易振荡,易使gan训练不稳定

    2. gan的目的是在高维非凸空间中找到纳什均衡点,gan的纳什均衡点是一个鞍点,但sgd只能找到局部极小值,因为sgd解决的是一个寻找最小值到的问题,gan是一个博弈问题。

  4. 训练gan的一些技巧:

    1. 输入规范化到(-1,1)之间,最后一层的激活函数使用tanh(双曲正切)(BEGAN除外)

    2. 如果有标签数据的话,尽量使用标签,也有人提出使用反转标签效果很好,另外使用标签平滑,单边标签平滑或者双边标签平滑

    3. 使用mini-batch norm, 如果不用batch norm 可以使用instance norm 或者weight norm

    4. 避免使用RELU和pooling层,减少稀疏梯度的可能性,可以使用leakrelu激活函数

    5. 优化器尽量选择ADAM,学习率不要设置太大,初始1e-4可以参考,另外可以随着训练进行不断缩小学习率,

    6. 给D的网络层增加高斯噪声,相当于是一种正则

    7. 不要early stopping:

      1. 一个常见的错误:当发现损失值不变时,或者生成的图像一直模糊时,通常会终止训练,调整模型。但GAN的训练通常非常耗时,有时多等一等会有意想不到的“收获”。

      2. 但当判别器的损失值快速接近0时,通常生成器很难学到任何东西了,就需要及时终止训练,修改网络、重新训练。

  5. gan的广泛应用:分类领域:将判别器替换为一个分类器,做多分类任务,生成器仍然做生成任务,辅助分类器训练。    
  6. 补充知识:
    1. sgd算法(随机梯度下降算法):
      1. 从样本中随机抽取一组,训练后按梯度更新一次,然后再抽取一组,再更新,在样本量很大时,不用训练完所有样本就可以获得一个损失值在可接受范围之内的模型。
      2. “随机”是指每次迭代过程中,样本都会被随机打乱,可以有效减小样本之间造成的参数更新抵消问题
      3. 其步长选择比梯度下降法的步长小一点,因为梯度下降法使用的是准确梯度,其可以朝着全局最优解(当问题是凸问题时)进行较大幅度地迭代,但sgd不可,因为其使用的近似梯度,或对于全局来说其走的根本不是梯度下降的方向,并且步长小一些相比梯度下降法,也不容易陷入到局部最优解中。
      4. 分类:
        1. SGD:每次更新参数只使用一个样本,更新较慢
        2. Batch-SGD:每次更新使用所有样本,取参数更新均值,对参数进行一次性更新,更新较为粗糙
        3. Mini-Batch-SGD:每次参数更新使用一小批样本,样本的数量通常采用trial-and-error来确定,有效加快训练速度。
      5. 缺点:
        1. 准确度下降,因为即使目标函数为强凸函数,sgd也无法做到线性收敛
        2. 可能会收敛到局部最优,因为单样本不能代表全体样本的趋势
        3. 不利于并行实现。
    2. 鞍点的通俗理解:
      1. 想象马鞍,沿着马脊方向是稳定的(马脊上最低点,相当于极小值),但是左右偏差就容易掉下去,因此左右不是稳定的.马背上的最低点就是鞍点.
      2. 在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点.
      3. 在泛函中,既不是极大值点也不是极小值点的临界点,叫做鞍点.
    3. 反转标签:设置Generated=True, Real=False,在训练样本的标签上加入随机噪声,也能提升模型效果。对于进入判别器中5%的数据,随机地翻转其标签,即真实数据标记成假的,生成的数据标记为真的。
    4. 标签平滑:训练判别器时,0或者1的标签,称为hard label,这种标签可能会使得判别器的损失值迅速跌落至0。所以使用soft label,对于标签为0的样本,其标签设置为(0,0.1)内的随机数;对于标签为1的样本,其标签设置为(0.9,1)内的随机数。这个操作在训练生成器的时候不需要做。
    5. mini-batch norm:
      1. 进行使数据分布的均值为0、方差为1的正规化
      2. 如图:
    6. instance norm:参考:模型优化之Instance Normalization - 知乎 (zhihu.com)
      1. BN计算归一化统计量时考虑了一个批量中所有数据,从而造成了每个样本独特细节的丢失。
      2. LN这类需要考虑一个样本所有通道的算法来说可能忽略了不同通道的差异
      3. IN:计算归一化统计量时考虑单个样本,单个通道的所有元素。
      4. 三者对比如图:IN(右)和BN(中)以及LN(左)

    7. weight norm:WN的重参数表示:对权重w \bm{w}w用参数向量v和标量g进行表示,则新参数表示为:其中v是k维向量,g是标量,∥ v ∥为v 欧式范数。w 则被重参数为v 和g两个参数。通过上述重参数表示,我们可以发现∥w∥=g,与参数v独立,而权重w 的方向也变更为v /∥ v ∥。重参数将权重向量w 用了两个独立的参数表示其幅度和方向。在利用SGD优化算法时,重参数可以加速网络的收敛速度。
    8. leakrelu激活函数:
### 李宏毅机器学习笔记中的GAN相关内容 #### GAN基本概念 生成对抗网络(Generative Adversarial Networks, GANs)由两个主要部分组成:生成器(Generator)和判别器(Discriminator)。生成器的目标是从随机噪声中生成逼真的样本,而判别器则试图区分这些生成的样本与真实的数据样本。两者通过相互竞争的方式共同训练,最终达到纳什均衡状态,在此状态下生成器能够生成几乎无法被识别出来的假样本[^4]。 #### 条件GAN的应用扩展 条件GAN是在标准GAN的基础上进行了改进,允许模型基于特定条件来控制生成的内容。具体而言,除了提供给生成器和判别器的标准输入外,还会附加一段描述期望特性的向量作为额外输入。这段向量可以是由文本转换而成的表示形式,从而指导生成过程按照指定的主题或风格进行创作。例如,可以通过输入一段文字说明让GAN创建具有相应属性的人脸图片;同样地,也支持利用语音信号引导图像合成任务。 #### 训练技巧与优化策略 为了提高GAN及其变体的有效性和稳定性,研究者们提出了多种辅助技术: - **Learning Rate Scheduling**: 动态调整学习率有助于改善收敛性能并防止过拟合现象的发生。一种常见的做法是采用Warm-Up机制——初期保持较低水平的学习速率以便充分探索损失曲面特性,随后逐步增加直至某个峰值后再缓慢降低,以此促进全局最优解的发现[^5]。 - **Regularization Methods**: 正则化手段如Dropout对于增强泛化能力至关重要。特别是在卷积神经网络架构下运用时,不仅能有效缓解过拟合风险,还能促使特征提取更加鲁棒可靠[^3]. ```python import torch.nn as nn class Generator(nn.Module): def __init__(self, input_dim=100, output_channels=3): super(Generator, self).__init__() # 定义生成器结构... def forward(self, z, condition_vector=None): # 实现前向传播逻辑... pass class Discriminator(nn.Module): def __init__(self, input_channels=3): super(Discriminator, self).__init__() # 定义判别器结构... def forward(self, image, condition_vector=None): # 实现前向传播逻辑... pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值