【GAN优化】解决模式崩溃的两条思路:改进优化和网络架构

今天讲述的内容仍然是GAN中的模式崩溃问题,首先将说明模式崩溃问题的本质,并介绍两种解决模式崩溃问题的思路,然后将介绍一种简单而有效的解决方案MAD-GAN,最后一部分将给出MAD-GAN的强化版本MAD-GAN-Sim。

 

作者&编辑 | 小米粥

1. 解决模式崩溃的两条路线

GAN的模式崩溃问题,本质上还是GAN的训练优化问题,理论上说,如果GAN可以收敛到最优的纳什均衡点,那模式崩溃的问题便自然得到解决。举例如下图,红线代表生成数据的概率密度函数,而蓝线代表训练数据集的概率密度函数,本来红线只有一个模式,也就是生成器几乎只会产生一种样本,而在理论上的最优解中,红线与蓝线重合,这时候在生成器中采样自然能几乎得到三种样本,与训练集的数据表现为一致。

640?wx_fmt=jpeg

当然,实际中几乎不会达到全局最优解,我们看似收敛的GAN其实只是进入了一个局部最优解。故一般而言,我们有两条思路解决模式崩溃问题:

 

1.提升GAN的学习能力,进入更好的局部最优解,如下图所示,通过训练红线慢慢向蓝线的形状、大小靠拢,比较好的局部最优自然会有更多的模式,直觉上可以一定程度减轻模式崩溃的问题。

640?wx_fmt=jpeg

例如上一期unrolled GAN,便是增加了生成器“先知”能力;

 

2.放弃寻找更优的解,只在GAN的基础上,显式地要求GAN捕捉更多的模式(如下图所示),虽然红线与蓝线的相似度并不高,但是“强制”增添了生成样本的多样性,而这类方法大都直接修改GAN的结构。

640?wx_fmt=jpeg

2. MAD-GAN

今天要介绍的MAD-GAN及其变体便是第二类方法的代表之一。

 

它的核心思想是这样的:即使单个生成器会产生模式崩溃的问题,但是如果同时构造多个生成器,且让每个生成器产生不同的模式,则这样的多生成器结合起来也可以保证产生的样本具有多样性,如下图的3个生成器:

640?wx_fmt=jpeg

需要说明一下,简单得添加几个彼此孤立的生成器并无太大意义,它们可能会归并成相同的状态,对增添多样性并无益处,例如下图的3个生成器:

640?wx_fmt=jpeg

理想的状态是:多个生成器彼此“联系”,不同的生成器尽量产生不相似的样本,而且都能欺骗判别器。

 

在MAD(Multi-agent diverse)GAN中,共包括k个初始值不同的生成器和1个判别器,与标准GAN的生成器一样,每个生成器的目的仍然是产生虚假样本试图欺骗判别器。对于判别器,它不仅需要分辨样本来自于训练数据集还是其中的某个生成器(这仍然与标准GAN的判别器一样),而且还需要驱使各个生成器尽量产生不相似的样本。

 

需要将判别器做一些修改:将判别器最后一层改为k+1维的softmax函数,对于任意输入样本x,D(x)为k+1维向量,其中前k维依次表示样本x来自前k个生成器的概率,第k+1维表示样本x来自训练数据集的概率。同时,构造k+1维的delta函数作为标签,如果x来自第i个生成器,则delta函数的第i维为1,其余为0,若x来自训练数据集,则delta函数的第k+1维为1,其余为0。显然,D的目标函数应为最小化D(x)与delta函数的交叉熵:

640?wx_fmt=jpeg

直观上看,这样的损失函数会迫使每个x尽量只产生于其中的某一个生成器,而不从其他的生成器中产生,将其展开则为: 

640?wx_fmt=jpeg

生成器目标函数为: 

640?wx_fmt=jpeg

对于固定的生成器,最优判别器为: 

640?wx_fmt=jpeg
640?wx_fmt=jpeg

可以看出,其形式几乎同标准形式的GAN相同,只是不同生成器之间彼此“排斥”产生不同的样本。另外,可以证明当 

640?wx_fmt=jpeg

达到最优解,再一次可以看出,MAD-GAN中并不需要每个生成器的生成样本概率密度函数逼近训练集的概率密度函数,每个生成器都分别负责生成不同的样本,只须保证生成器的平均概率密度函数等于训练集的概率密度函数即可。

3. MAD-GAN-Sim

MAD-GAN-Sim是一种“更强力”的版本,它不仅考虑了每个生成器都分别负责生成不同的样本,而且更细致地考虑了样本的相似性问题。其出发点在于:来自于不同模式的样本应该是看起来不同的,故不同的生成器应该生成看起来不相似的样本。

 

这一想法用数学符号描述即为:

640?wx_fmt=jpeg

其中φ (x)表示从生成样本的空间到特征空间的某种映射(我们可选择生成器的中间层,其思想类似于特征值匹配),Δ (x,y)表示相似度的度量,多选用余弦相似度函数,用于计算两个样本对应的特征的相似度。

 

对于给定的噪声输入z,考虑第i个生成器与其他生成器的样本生成情况,若样本相似度比较大,则D(G_i(z))相比较D(G_j(z))应该大很多,由于D(G_j(z))的值比较小,G_j(z)便会进行调整不再生成之前的那个相似的样本,转而去生成其他样本,利用这种“排斥”机制,我们就实现了让不同的生成器应该生成看起来不相似的样本。

 

将上述限制条件引入到生成器中,我们可以这样训练生成器,对于任意生成器i,对于给定的z,如果上面的条件满足,则像MAD-GAN一样正常计算,其梯度为:

640?wx_fmt=jpeg

如果条件不满足,将上述条件作为正则项添加到目标函数中,则其梯度为:

640?wx_fmt=jpeg

这样尽量使得判别器更新后,条件能够满足。MAD-GAN-Sim的思路非常直接清晰,不过代价就是增加非常多的计算量。

[1]Ghosh A , Kulharia V , Namboodiri V , et al. Multi-Agent Diverse Generative Adversarial Networks[J]. 2017.

总结

 

今天首先说明了模式崩溃问题的本质,并介绍两种解决模式崩溃问题的思路,然后介绍一种简单而有效的解决方案MAD-GAN及其强化版本MAD-GAN-Sim。

知识星球推荐

 
 
640?wx_fmt=jpeg

有三AI知识星球由言有三维护,内设AI知识汇总,AI书籍,网络结构,看图猜技术,数据集,项目开发,Github推荐,AI1000问八大学习板块。

 

当前更新的主题就是各种各样的GAN的结构解读和实践,感兴趣的同学可以加入一起学习,添加有三微信Longlongtogo即可优惠。

640?wx_fmt=jpeg

GAN群

 
 
640?wx_fmt=jpeg

有三AI建立了一个GAN群,便于有志者相互交流。感兴趣的同学也可以微信搜索xiaozhouguo94,备注"加入有三-GAN群"。

 

转载文章请后台联系

侵权必究

640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png

往期精选

 

 
  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

<think>好的,用户现在想了解在使用Adam优化器时如何解决或避免模式崩溃问题。我需要结合之前提供的引用内容,以及用户之前的问题历史来组织回答。首先,我需要明确模式崩溃的定义Adam优化器在其中可能起的作用。用户提供的引用中,引用[1][2]详细解释了模式崩溃的成因解决方法,引用[3]提到了梯度崩溃问题及解决方法,而引用[4][5]则涉及优化器的选择。用户之前的问题是关于全连接GAN使用Adam优化器的答辩问题,其中也提到了模式崩溃与Adam的关系。现在用户特别关注在使用Adam时如何应对模式崩溃。首先,我需要解释Adam优化器可能如何影响模式崩溃。根据之前的回答,Adam的动量机制可能导致参数更新方向固化,从而加剧模式崩溃。但Adam的自适应学习率也可能帮助缓解梯度问题。需要结合这两个方面来分析。 接下来,解决方案部分需要参考用户提供的引用内容。引用[3]提到了调整学习率、正则化、BatchNormalizationGradient Penalty等方法。引用[2]中的解决方法包括增强判别器正则化。此外,用户之前的回答提到了梯度惩罚、混合优化器、学习率衰减等方法。需要将这些方法整合起来,并适当引用相关文献。另外,用户提到要使用LaTeX格式,数学表达式需要用$...$或$$...$$。需要确保公式正确,比如Adam的更新公式,可能涉及动量项自适应学习率的数学表达。 还要注意生成相关问题,这部分需要围绕Adam模式崩溃的关系展开,比如调整Adam参数的影响、与其他优化器的比较、定量评估方法等。 需要检查是否所有引用都正确标注,例如使用梯度惩罚来自引用[3],调整学习率来自引用[3]之前的回答,混合优化器可能来自引用[4]中的AdaBelief或其他优化器的比较。 最后,确保回答结构清晰,分点列出问题与解决方案,代码示例部分可能需要调整,或者引用之前的代码。用户之前的示例代码使用了Adam优化器,可以再次引用或修改以展示解决方案的具体应用。总结步骤:1.分析Adam如何导致或缓解模式崩溃。2.结合引用内容,列出解决方法,如梯度惩罚、学习率调整、混合优化器等。 3.确保公式正确,引用正确。4.生成相关问题。</think>### 使用Adam优化器时模式崩溃问题的解决方案 --- #### **1. Adam优化器与模式崩溃的关联机制** 模式崩溃(Mode Collapse)指生成器只能生成单一或少量模式的数据,失去多样性。使用Adam优化器时,其特性可能通过以下机制加剧该问题: 1. **动量加速方向固化**:Adam的动量项($\beta_1$)会累积历史梯度方向,导致生成器参数更新路径被锁定在局部最优区域[^1][^2]。 2. **自适应学习率放大梯度偏差**:当判别器对某些模式过度敏感时,Adam的自适应学习率可能放大相关参数的梯度,公式为: $$ \theta_{t+1} = \theta_t - \eta \frac{m_t}{\sqrt{v_t} + \epsilon} $$ 若$v_t$(梯度二阶矩)在特定方向持续偏小,会导致生成器过度优化该方向[^3]。 --- #### **2. 针对Adam的解决方案** ##### **2.1 梯度惩罚(Gradient Penalty)** **原理**:在判别器损失中添加梯度约束项,限制参数更新幅度,防止判别器过强导致生成器陷入单一模式。 **实现**(基于WGAN-GP): ```python def gradient_penalty(discriminator, real, fake): alpha = tf.random.uniform([batch_size, 1], 0, 1) interpolates = alpha * real + (1 - alpha) * fake with tf.GradientTape() as tape: tape.watch(interpolates) d_interpolates = discriminator(interpolates) gradients = tape.gradient(d_interpolates, interpolates) slopes = tf.sqrt(tf.reduce_sum(tf.square(gradients), axis=[1])) return tf.reduce_mean((slopes - 1.0)**2) # 判别器损失添加惩罚项 dis_loss += lambda_gp * gradient_penalty(discriminator, real_images, generated_images) ``` **效果**:通过约束梯度范数,平衡生成器与判别器的对抗强度[^3]。 ##### **2.2 动态调整Adam参数** - **降低动量系数$\beta_1$**:将$\beta_1$从默认值$0.9$降至$0.5$,减弱动量累积效应,公式修改为: $$ m_t = 0.5 \cdot m_{t-1} + 0.5 \cdot g_t $$ 实验表明,此调整可减少生成器更新方向固化[^2][^5]。 - **学习率衰减策略**:采用指数衰减(如$\eta_t = \eta_0 \cdot 0.95^t$),使训练后期更新更谨慎。 ##### **2.3 混合优化器策略** **方案**:对生成器判别器使用不同优化器组合: - **生成器**:保留Adam以利用自适应学习率(如$\eta=2 \times 10^{-4}$); - **判别器**:改用SGD或RMSProp(如$\eta=1 \times 10^{-4}$),降低动量干扰。 **代码示例**: ```python gen_optimizer = tf.keras.optimizers.Adam(learning_rate=2e-4, beta_1=0.5) dis_optimizer = tf.keras.optimizers.SGD(learning_rate=1e-4) ``` ##### **2.4 正则化与架构改进** - **谱归一化(Spectral Normalization)**:对判别器权重矩阵进行谱范数约束,增强模型稳定性: $$ W_{SN} = \frac{W}{\sigma(W)} $$ 其中$\sigma(W)$为权重矩阵的谱范数(最大奇异值)[^2]。 - **Mini-batch Discrimination**:在判别器中引入批量样本多样性度量,迫使生成器产生多模式数据[^1]。 --- #### **3. 实验验证与指标** 通过以下方法定量评估解决方案效果: 1. **FID(Fréchet Inception Distance)**:衡量生成样本与真实数据的分布距离,值越低多样性越好; 2. **模式覆盖数统计**:对生成样本聚类(如K-means),统计覆盖的类别数; 3. **训练曲线分析**:观察生成器与判别器损失的震荡幅度收敛趋势。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值