【地震数据处理】GAN网络基础知识

学习GAN网络的初衷

在绞尽脑汁写第一篇论文,我对如何打造自己的创新点正头疼不已的时候,畅畅君给我提了一个想法:“最近我们公司说想通过构建GAN网络生成自己的数据,你可以试一试!”。虽然我之前在网上找相关文献时曾经看到过GAN网络的一些介绍,但是由于我最开始没有想过将GAN网络应用到自己的研究领域 并且那时候我已经开始做密集网络没有时间研究其他东西的原因,就这样忽略掉了它。

现在我有了时间和精力,加之在各种博客上了解了一些GAN的知识后,我想最近就开始做把GAN应用于自己领域的研究。但是网上有关GAN的知识点很多,还有很多基于GAN的变种网络。为了避免自己学习的时候逻辑混乱,所以就开始写这么一系列博客。目的是归纳知识,总结经验教训,让后面像我一样的菜鸡有所启发。

系列文章目录

转载:GAN网络合集


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、GAN网络

GAN网络又名生成对抗网络,是近年来比较火热的深度学习模型。Lan Goodfellow在其论文Generative Adversarial Networks中率先提出了GAN,算是这个领域的开山之作。

1.基本原理

GAN网络的基本原理很简单,主要是两个网络起作用: G \textbf{G} G(Generator)和 D \textbf{D} D(Discriminator)。正如它们名字所表示的那样,它们的功能分别是生成和判别。

GAN网络的平面图如下:

Random
G
D
1
0

训练过程可以理解成由虚线流程转移到实线流程的过程。

这里我们以通过生成图片为例。

  • G \textbf{G} G(生成网络): G \textbf{G} G接受一个随机噪声 n \textbf{n} n ,通过噪声生成图片 G(n) \textbf{G(n)} G(n)
  • D \textbf{D} D(判别网络): D \textbf{D} D判别一张图片是不是“真实的”。其输入是一张图片 x \textbf{x} x,输出 D(x) \textbf{D(x)} D(x) x \textbf{x} x为真实图片的概率。一般确定为真实图片为 1 \textbf{1} 1,不可能是真实图片为 0 \textbf{0} 0

训练过程中, G \textbf{G} G网络会尽量生成真实的图片去欺骗判别网络 D \textbf{D} D。而 D \textbf{D} D网络会尽量把 G \textbf{G} G生成的图片和真实的图片区分开来。通过这样一个动态的博弈过程,最终在最理想的情况下, G \textbf{G} G网络可以生成让 D \textbf{D} D无法区分是否真实的图片 G(n) \textbf{G(n)} G(n)

通过论文中的公式可以将GAN的核心原理表达如下:
min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p d a t a ( x ) [ log ⁡ D(x) ] + E n ∼ p n ( n ) [ 1 − log ⁡ D(G(n)) ] . \min_{\textbf{G}} \max_{\textbf{D}} V(\textbf{D},\textbf{G}) = E_{\textbf{x}\sim p_{data}(\textbf{x})}[\log{{\textbf{D(x)}}}] + E_{\textbf{n}\sim p_{\textbf{n}}(\textbf{n})}[1-\log{{\textbf{D(G(n))}}}]. GminDmaxV(DG)=Expdata(x)[logD(x)]+Enpn(n)[1logD(G(n))].

  • x \textbf{x} x表示真实图片, n \textbf{n} n表示输入 G \textbf{G} G网络的噪声, G(n) \textbf{G(n)} G(n)表示 G \textbf{G} G网络生成的图片。
  • D(x) \textbf{D(x)} D(x)表示 D \textbf{D} D网络判断真实图片是否真实的概率( x \textbf{x} x为真实图片,对于 D \textbf{D} D来说,这个值应该逼近于 1 \textbf{1} 1)。 D(G(z)) \textbf{D(G(z))} D(G(z)) D \textbf{D} D网络判断 G \textbf{G} G生成的图片的是否真实的概率。
  • G \textbf{G} G希望 D(G(n)) \textbf{D(G(n))} D(G(n))尽可能大,这时 V(D,   G) \textbf{V(D, G)} V(D, G)会变小。因此公式的最前面的记号是 min ⁡ G \min_{G} minG
  • D \textbf{D} D的能力越强, D(x) \textbf{D(x)} D(x)应该越大, D(G(x)) \textbf{D(G(x))} D(G(x))应该越小,这时 V(D,G) \textbf{V(D,G)} V(D,G)会变大。因此公式对于 D \textbf{D} D来说是求 max ⁡ D \max_{D} maxD

最后我们将会得到一个生成式的模型 G \textbf{G} G,我们可以用它来生成图片。

2.应用领域

从基本原理上看,GAN可以通过不断的自我判别来推导出更真实、更符合训练目的的生成样本。这就给图片视频等领域带来了极大的想象空间。
当其他 AI 技术还在标榜稳定性、兼容性,以及与多种技术的融合程度时,生成对抗网络却能直截了当地告诉别人它能干什么。综合来看,生成对抗网络至少在以下几个方向上可能提供全新的解决方案。

(1)图像处理

目前网上流传最广的案例,就是通过 GAN 来生成全新图像,其在真实度和准确度上甚至超过了人工作业。在真实工作场景中,为黑白图像上色通过低清晰度的图片获得高清版本复原受损图片等都可以运用它来解决。当然这仅仅是生成对抗网络技术的低配版,目前甚至有实验证明了可以用生成对抗网络来把图片变成视频

(2)声音处理

语音合成一直都是初级 AI 商业化的核心领域。生成对抗网络可以在合成和恢复语音素材中提供重大助力。例如,用 AI 合成语音、从大量杂音中恢复某条音轨,甚至模仿一个人的语速、语气和语言心理,都可以应用生成对抗网络

(3)文字生成

同样的道理,生成对抗网络在文本生成、写稿机器人等领域也有极大应用空间。AI 创作文字,最大的难关在于机器没有思想和感情,无法表现出人类写作的文本张力。而这些流于字里行间的所谓张力,说不定可以通过GAN来解决。

(4)信息破译与信息安全

既然生成对抗网络的目的是使某物不断趋近真实,那么产生出真实的笔记、密码习惯,甚至生物密码也都是可能的。借助 GAN破译个体习惯来解锁信息,以及提前运用相关技术进行信息安全防护,未来都可能有很大的市场。

(5)生成个性化产物

生成对抗网络的学习方式,是根据一系列数据指标来将样本生成为可被接受的信息。那么,个性化产物的制造其实也在可应用范畴中。

二、CycleGAN网络

CycleGAN又名CG网络,是发表于ICCV17的一篇GAN工作,可以让两个domain的图片互相转化。传统的GAN是单向生成,而CycleGAN是互相生成,网络是个环形,所以命名为Cycle。并且CycleGAN一个非常实用的地方就是输入的两张图片可以是任意的两张图片,也就是unpaired
图例

1.基本原理

CycleGAN(CG)其实就是一个 A → B A→B AB 单向GAN 加上一个 B → A B→A BA 单向GAN。两个GAN共享两个生成器,然后各自带一个判别器,所以加起来总共有两个判别器和两个生成器。一个单向GAN有两个loss,而CycleGAN加起来总共有四个loss。

单向GAN

在这里插入图片描述
上图是一个单向GAN的示意图。我们希望能够把domain A的图片(命名为 a a a )转化为domain B的图片(命名为图片 b b b)。为了实现这个过程,我们需要两个生成器 G A B \textbf{G}_{AB} GAB G B A \textbf{G}_{BA} GBA ,分别把domain A和domain B的图片进行互相转换。图片A经过生成器 G A B \textbf{G}_{AB} GAB 表示为Fake Image in domain B,用 G A B ( a ) \textbf{G}_{AB}(a) GAB(a)表示。而 G A B ( a ) \textbf{G}_{AB}(a) GAB(a)经过生成器 G B A \textbf{G}_{BA} GBA表示为图片 A A A 的重建图片,用 G B A ( G A B ( a ) ) \textbf{G}_{BA}(\textbf{G}_{AB}(a)) GBA(GAB(a))表示。最后为了训练这个单向GAN需要两个loss,分别是生成器的重建loss和判别器的判别loss

  • 判别loss :
    判别器 D B \textbf{D}_B DB是用来判断输入的图片是否是真实的domain B图片。生成的假图片 G A B ( a ) \textbf{G}_{AB}(a) GAB(a)和原始的真图片 b b b都会输入到判别器里面进行判定。最后的loss表示为:
    L G A N ( G A B , D B , A , B ) = E b ∼ B [ log ⁡ D B ( b ) ] + E a ∼ A [ log ⁡ ( 1 − D B ( G A B ( a ) ) ] L_{GAN}(\textbf{G}_{AB},\textbf{D}_{B},\textbf{A},\textbf{B})=E_{b\sim B}[\log\textbf{D}_{B}(b)]+E_{a\sim A}[\log(1-\textbf{D}_{B}(\textbf{G}_{AB}(a))] LGAN(GAB,DB,A,B)=EbB[logDB(b)]+EaA[log(1DB(GAB(a))]
  • 生成loss
    生成器用来重建图片 a a a,目的是希望生成的图片 G B A ( G A B ( a ) ) \textbf{G}_{BA}(\textbf{G}_{AB}(a)) GBA(GAB(a))和原图 a a a尽可能的相似,那么可以很简单的采取 L 1 L_1 L1 loss或者 L 2 L_2 L2 loss。最后生成loss可以表示为:
    L ( G A B , D B , A , B ) = E a ∼ A [ ∥ G B A ( G A B ( a ) ) − a ∥ 1 ] L(\textbf{G}_{AB},\textbf{D}_{B},\textbf{A},\textbf{B}) = E_{a\sim A}[\|\textbf{G}_{BA}(\textbf{G}_{AB}(a))-a\|_1] L(GAB,DB,A,B)=EaA[GBA(GAB(a))a1]
    以上就是 A → B A→B AB 单向GAN的原理。但是遇到的问题也很典型,就是无论输入是什么,生成器的输出都是同一张图。为了避免发生这样的问题,还需要一个逆向的单向GAN作为补充。

下图是网友自制的CycleGAN网络的剖面图(原贴链接点击此处)。值得注意的是下面的网络不是相互独立、并行的,只是为了方便理解网络所以用两个网络表示。

在这里插入图片描述
红色的路线,也就是灰色透明袋的路线(一共四条),就是需要训练的网络结构。简洁的说就是需要训练 A − A A-A AA A − B − A A-B-A ABA B − B B-B BB B − A − B B-A-B BAB的四条路线。其中 A − B − A A-B-A ABA B − A − B B-A-B BAB 两条线能训练处风格迁移的双向过程,即往哪个方向迁都能够做到。 A − A A-A AA B − B B-B BB 在我看来,应该算是泛化迁移能力的过程,防止训练的迁移只能对 B B B 迁移到 A A A 或者 A A A 迁移到 B B B 效果比较好,而其他风格难以迁移。

2.对CG的评价

CG的特点就是它能对风格做双向迁移,而pix2pix只能对特定形状的简单图形注意单向风格迁移,从这里看CG确实要比pix2pix优势更加明显一点。

对于卷积神经网络(CNN)来说,个人感觉因为其结构其实已经很成熟了,虽然后面有很多优化方法引入,但是优化结构的趋势已经很不明显了。而GAN网络不一样,还是有非常大的发展空间,还有很多没有发掘的网络结构,相信在未来还会有不小的发展。

3.应用领域

基本都是应用于图片的风格迁移。如下图。
在这里插入图片描述

三、Dual GAN网络

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值