写点什么

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

  • 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:243443
用户头像
刘燕 InfoQ高级技术编辑

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

关注

评论

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

低代码实现探索(二十六)移动端H5开发

零道云-混合式低代码平台

低代码实现探索(二十七)低代码如何继承传统

零道云-混合式低代码平台

工商银行实时大数据平台建设历程及展望

Apache Flink

大数据 flink 编程 实时计算

HBase的 rowkey 设计原则

编程江湖

HBase 架构

初识MASA Blazor

MASA技术团队

C# .net 微软 后端 blazor

Redis OM .NET Redis对象映射框架

MASA技术团队

C# .net 微软 后端 redis'

销量之王,去年程序员最爱看的技术书就是它!

博文视点Broadview

使用APICloud AVM框架开发预约应用

YonBuilder低代码开发平台

前端框架 APP开发 APICloud 跨端开发 小程序开发

浪花过后,2022低代码该往哪儿走?

ToB行业头条

netty系列之:可以自动通知执行结果的Future,有见过吗?

程序那些事

Java Netty 程序那些事

Alink、Tensorflow on Flink 在京东的应用

Apache Flink

大数据 flink 编程 实时计算 Alink

从 Flink Forward Asia 2021,看 Flink 未来开启新篇章

Apache Flink

大数据 flink 编程 实时计算

架构训练营 week6 作业

红莲疾风

「架构实战营」

女生不适合当程序员?XTransfer这位程序员妈妈绝了!生娃半年内升职加薪

XTransfer技术

技术人 程序媛 XTransfer

OpenMLDB在AKULAKU实时特征计算场景的应用

第四范式开发者社区

机器学习 大数据 OpenMLDB 特征平台

有一群青年人,用热爱连接起科技与智慧生活的“双向奔赴”

最新动态

RadonDB PostgreSQL on K8s 2.1.0 发布!

RadonDB

数据库 postgresql 开源 RadonDB

架构实战营:模块六作业

Geek_93ffb0

「架构实战营」

Pravega Flink Connector Table API 进阶功能探秘

Apache Flink

大数据 flink 编程 实时计算 Pravega

针对 jQuery 的优化方法有哪些

编程江湖

免费下载!FFA 系列专刊|《Flink CDC 新一代数据集成框架》电子书

Apache Flink

大数据 flink 编程 实时计算 IT

大咖集结,共创生态|AIOps社区专家团正式集结出道

云智慧AIOps社区

开源项目 开源社区 智能运维 开发者社区 社区治理

足球、篮球、花样滑冰、乒乓球四大运动的动作识别通用方案开源了

百度大脑

人工智能

mark: mac 开启chrome webrtc 日志

webrtc developer

chrome WebRTC

通证经济是更高层次的自由

CECBC

Flink 大规模作业调度性能优化

Apache Flink

大数据 flink 编程 实时计算

WorkPlus移动数字化平台赋能新型智慧城市建设

BeeWorks

教程直播第7期|如何对 OceanBase 进行 SQL 诊断和调优

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版 OceanBase教程

简单的线程池实现多线程对大文件的读取

CRMEB

Apache Flink ML 2.0.0 发布公告

Apache Flink

大数据 flink 编程 实时计算

MyBatis的功能架构是怎样的

编程江湖

mybatis

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