当前位置: 首页>編程日記>正文

#深度解析# GAN(生成对抗神经网络)

#深度解析# GAN(生成对抗神经网络)

生成对抗神经网络借鉴了零和博弈的思想,主要用于样本的生成,属于非监督学习
简单总结一下 GAN 的基本思想(参考下图):

  1. GAN由两部分网络组成,一个是生成网络,一个是判别网络
  2. 生成网络类似于(变分自编码器)网络的Decoder部分,用于生成新样本
  3. 判别网络本质上是一个二分类分类器,用于识别输入的样本是真实样本还是生成的假样本;
  4. 训练GAN网络时,判别网络会不断提高识别能力,而生成网络会不断提高生成能力从而降低判别网络的判别能力;这两种网络相互竞争从而提高网络生成新样本的能力:

在这里插入图片描述

GAN网络的损失函数如下:
在这里插入图片描述
符号说明:

D:判别函数,输出值范围0~1,0表示预测为生成样本,1表示预测为真实样本
G:生成函数,用于生成样本数据
Ex~pdata(x) :表示对真实样本求期望(本身无意义,表示求后边中括号内公式的期望)
Ez~pz(z):表示对生成样本分别求期望(本身无意义,表示求后边中括号内公式的期望)

这个公式我们可以如此理解,

  1. 首先来看函数V(D,G),这个函数就是用来衡量判别式性能的,当D性能最优时,第一项中D(x)的期望=1,第一项整体期望等于0,第二项D(G(z)) 的期望等于0 第二项整体期望等于0,V(D,G)=0D的性能越差,同理可知 公式中中的两项都会越小(且为负值)V(D,G)越小
  2. 将max(G)V(D,G)看作一个整体,这一步表示将V(D,G)损失函数按最大值优化,根据第一点可知,得到最优的判别式网络D
  3. 然后看最外边的min(G),表示找到最优的判别式网络D的基础上,通过最小化V(D,G)这个损失函数的方式,找到最优的生成网络G;因为得到最优的生成网络G,等价于让判别网络无法识别生成网络G生成的样本,等价于降低判别式网络D的性能。

根据上边的叙述可知,训练GAN时并不是同时训练D和G,而是在固定一个网络的同时训练另一种。
此外,我们一般先训练数次判别网络,然后进行D和G网络的交替训练;之所以要训练k次判别器,再训练生成器,是因为要先拥有一个好的判别器,使得能够教好地区分出真实样本和生成样本之后,才好更为准确地对生成器进行更新。
GAN的基本流程如下:

  1. 初始化判别器D的参数和生成器G的参数。
  2. 从真实样本中采样 m 个样本,从先验分布噪声中采样n个噪声样本并通过生成器获取 n 个生成样本。固定生成器G,训练判别器D尽可能好地准确判别真实样本和生成样本,尽可能大地区分正确样本和生成的样本。
  3. 循环k次更新判别器之后,使用较小的学习率来更新一次生成器的参数,训练生成器使其尽可能能够减小生成样本与真实样本之间的差距,也相当于尽量使得判别器判别错误。
  4. 多次更新迭代之后,最终理想情况是使得判别器判别不出样本来自于生成器的输出还是真实的输出。亦即最终样本判别概率均为0.5(纳什均衡)。

GAN存在的问题

梯度弥散

  • 如果GAN中的判别网络过于强大,那么无论生成网络生成什么样的图片,判别网络都能判别为假,导致生成网络无法获得梯度(梯度弥散),从而导致网络进行更新
  • 相反,如果判别网络一开始就很弱,无论输入真假样本,判别网络都随机的输出0,1,那么生成网络得到的梯度就会是不准确的,因此生成网络也无法正常更新
  • 因此判别网络既不能太强,也不能太弱,在训练GAN过程中,要平衡好两者的能力,使其旗鼓相当。

模式崩溃

在训练GAN的过程中,生成网络可能会逐渐生成某一类型的样本,因为生成网络发现只要生成这种的样本,判别网络就无法识别;这无疑会丧失生成网络生成样本的多样性。
解决方法:
使用 wasserstein GNNs 或 Unrolled GNNS

Wasserstein GANs (WGAN)

  • 判别网络使用 EMD距离(Earth Mover’s Distance)衡量两张图片之间的距离
  • WGAN 中的判别网络和生成网络不再使用同一个损失函数,因此不再存在零和博弈的限制
    名词注释:
  • WGAN中的判别函数优化的目标是增加真实样本和生成样本之间的EMD距离;而生成函数的目的是增大生成样本计算得到的某个值

此外还有很多优秀的GAN模型 如 deep convolutional GANs,styleGAN,cycleGAN 等

零和博弈(纳什均衡):游戏存在如下均衡:总收益为0,一方胜利,另一方就输,

pytorch deep convolutional GANs 代码 :https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html

参考文章:
通俗理解生成对抗网络GAN


https://www.fengoutiyan.com/post/13748.html

相关文章:

  • 生成数据的神经网络
  • dbn神经网络
  • gabp神经网络
  • GAN生成对抗网络技术
  • 自动生成神经网络
  • 生成对抗神经网络
  • 对抗神经网络算法
  • 生成神经网络
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機