写点什么

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

  • 2019-11-22
  • 本文字数:1991 字

    阅读完需:约 7 分钟

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

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

解决模式崩溃的两条路线

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



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


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



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


MAD-GAN

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


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



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



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


在 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 函数的交叉熵:



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



生成器目标函数为:



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



![]


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



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

MAD-GAN-Sim

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


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



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


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


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



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



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


原文链接:


https://mp.weixin.qq.com/s/QFCJ7BxNvfj2L9Wlr6aq9A


作者介绍


小米粥,公众号“有三 AI”作者。该公号聚焦于让大家能够系统性地完成 AI 各个领域所需的专业知识的学习。


2019-11-22 22:243630
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 597.9 次阅读, 收获喜欢 1982 次。

关注

评论

发布
暂无评论
发现更多内容

Dubbo面试题,mybatis架构图

Java 程序员 后端

ECMAScript6(ES6)基础语法,linux基础及应用教程第二版

Java 程序员 后端

Elasticsearch查询速度为什么这么快?看啥?问你呢

Java 程序员 后端

Github已星标180K又一神作,阿里巴巴内部并发编程笔记

Java 程序员 后端

github搜索技巧小结,深入理解JVM

Java 程序员 后端

Github神作!2021Java秋招高级面试指南,吃透至少阿里P6

Java 程序员 后端

HashMap(jdk1,linux学习路线图

Java 程序员 后端

爽!字节大佬DDD(领域驱动设计)巅峰之作,拆解业务代码真好用

编程 程序员 字节

flex 布局详解,我是如何收割多家大厂offer的

Java 程序员 后端

git(9)Git 内部原理,nginx模块工作原理

Java 程序员 后端

Git,GitHub与GitLab的区别,java框架开发面试题

Java 程序员 后端

HTML笔记 —— 表单,java数组的底层原理

Java 程序员 后端

Docker 从入门到实践系列三 - Docker 常用命令

Java 程序员 后端

git(8)Git 与其他系统,高性能mysql第四版pdf百度云

Java 程序员 后端

Google 面试六轮游,结果还是没过!Google面试真题分享

Java 程序员 后端

client-go实战之一:准备工作,干货分享

Java 程序员 后端

鸿蒙生态的2021:像犀牛在丛林飞

脑极体

docker-compose下的java应用启动顺序两部曲之二:实战

Java 程序员 后端

Elasticsearch聚合学习之五:排序结果不准的问题分析

Java 程序员 后端

Dijkstra求最短路算法 ( 超级超级详细的 ) 不断更新中

Java 程序员 后端

Docker系列(3)--容器连接和Dockerfile,kafka的原理

Java 程序员 后端

Flink on Yarn三部曲之一:准备工作,java开发校招面试题

Java 程序员 后端

HCIE云计算--灾备,万字总结

Java 后端

第 2 周作业

波波

「架构实战营」

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建)

Java 程序员 后端

HashMap底层实现原理及面试问题,linux服务器搭建教程视频

Java 程序员 后端

CPU战争40年,终于把Intel打趴下了,字节跳动两轮面试让等hr

Java 程序员 后端

DL4J实战之五:矩阵操作基本功,微服务架构技术栈

Java 程序员 后端

elasticsearch实战三部曲之二:文档操作,java基础填空题

Java 程序员 后端

Elasticsearch聚合学习之二:区间聚合,java中高级面试题大全

Java 程序员 后端

Flink1,java从入门到精通第四版pdf下载

Java 程序员 后端

解决模式崩溃的两条思路:改进优化和网络架构_AI&大模型_小米粥_InfoQ精选文章