生成对抗网络-理论部分|深度学习(李宏毅)(二十三)

简介: 生成对抗网络-理论部分|深度学习(李宏毅)(二十三)

一、极大似然估计


  1. 极大似然估计


FLAKJM633UG2$~2Q9VPFQ)K.png

TYGX~BY2MP]FZZ_F$Y__H]7.png

]K_S}N$N}6IY8TEZZ)8CX~P.png

N)${B`R[YTJPLHQ366(Z77Y.png


  1. 存在的问题


GZO][OZ9[U~(7FY5~LE_PGN.png

                                                 Generator


C57TCL{L{SVCBVS548VL5(1.png


二、GAN的原理


  1. GAN的基本理念

)50EOK45FJT@N8VJOE2{@S0.png

                                          求解

9$6_$Q_(95TP{EE24_9GKBW.png}%04G65C_PJADHYUNU09C23.png892[$_CHJ$JC4LJUK{W0P@4.png


(6TP}XGI[MGXFE0@P7A1RVR.png

  1. 算法

I0H{$Q0~SEC1`Y3`1]VXX8D.png

                                                           f(x)

F7$GVB~0E[C8I)UNXOQ[TBE.png

GEZ)K$CK8XJBTRY05XAXLAH.png

                                                       issue


CGC96_`P7%T@A7{@A2HMMLX.png

~5X0HW%57CX4IXG]S{K4WT9.png

JW14YL%F0JMI9TD]$Y(CCZ2.png


三、实践中的一些issue


  1. 实作中Generator目标函数的问题


在训练Generator时,我们实际上在极小化这个式子:


@IZZ_W2ZF2BLFR@JE9GEOYW.png

                                              图像


ZZ8EL(I%HI35DO8]~W@8R4G.png

这个式子的梯度就符合我们的期望,不过这样就不是在极小化JS散度,而是在极小化另外一个奇怪的散度。


  1. 评估JS散度


在训练Discriminator时,理论上Discriminator的loss就代表JS散度的大小,但是在实际操作时Discriminator的loss几乎趋近于OWJQ0K373(1GU98ATY~MHF6.png,也就是说Discriminator总是有办法把生成的图片与真实的图片分开。举例来说,在下面的实验中,Generator采用了训练1、10、25个epoch的三种,其中训练越多epoch的Generator产生的图片越接近真实,但是从图中看到无论哪一种Generator它们的Discriminator的loss总是能够趋近于OWJQ0K373(1GU98ATY~MHF6.png,并且Discriminator也总能训练到100%的准确率,Discriminator的loss并不能反映JS散度的大小:


S0GYRF`8~CL~][WNM6J5B}E.png

                                                 实验


另外一个例子如下,使用一个较强和一个较弱的Generator,可以看到强的Generator生成的图片已经很真实了,但是它们的Discriminator的loss缺失差不多的,这表明Discriminator的loss并没有反映JS散度:


8ZV3R~HA3_(FD5@1`O~81I9.png

                                              实验

%DDMWF]4N{D8)W}QQUFMM42.png


  • Reason1:通过采样的方式来训练


由于我们始终没有办法直接计算损失函数中的期望,因此只能通过采样的方法来进行训练,那么有可能如下图所示,对于采样出的样本,由于Discriminator过于powerful,那么它总有办法寻找一个边界来分开样本,类似过拟合:


YWETYWEDT68`6S@4W~$5F3J.png

                       过拟合


解决这种问题我们考虑让Discriminator变得弱一点,要么迭代次数少一点要么加dropout,不过要将Discriminator变弱到什么程度,这又是很难把握的,而且这与我们最初的设想又出现了矛盾,Discriminator能够衡量JS散度的一个前提就是Discriminator要足够地powerful,因此这里就出现了一些矛盾。


  • Reason2:数据的本质


GAN要拟合的数据和Generator生成的数据实际上是高维空间中的流形(manifold)。拿二维空间中的一维流形来说,可能K`48TQQ%1722UQ$(]G5M@46.png很少有交集,或者交集很少,像图中这样的数据的JS散度就会很小:


~VOKXIE3BV[]2UIGMY0L68U.png

                               流形


我们之前有说过GAN的训练和生物进化很类似,比如下面图中生物进化出眼睛的过程,只要从左到右的进化对生物的繁衍是有利的,这个进化的过程才能持续下去:


4L0X5H4[I}ZIK~9)%8(_`LJ.png

                                                     眼睛的进化  


U@ZN`2~J%45IBS~UTWU0(@8.png

                                                 GAN的训练


解决这个问题的方法是可以给Discriminator的输入添加一些噪声或者给标签添加一些噪声(随机标记一些正样本为负样本,负样本为正样本),这样会使数据产生下图中的效果,因而重叠的部分就有可能变大:


CK(``Y(H[K[%0EH5ZDG1US3.png

                               加噪


不过要将加入的噪声随着训练而减弱,否则会影响机器对真实的数据分布的判断。


另一种方式是使用别的度量差异度的方式,比如WGAN这方法,这一类方法下一篇中再具体介绍。


  1. Mode Collapse


0JSMVL[F]T9I_YL%IWB7A05.png

                                            Mode Collapse


举例来说,在下面的二次元人物头像生成的图片中就有许多图片是重复的,这就是Mode Collapse的问题:


BX{FQSKJAC`3{I1]6EYXDU3.png

                     Mode Collapse


再举一个例子来说,比如要拟合的数据如下图:


$9{E{)L)FXN]C_]FMD0Y]XT.png

                 真实数据


我们期待GAN能够按照下面的方式来逐步学习到数据的真实分布:


Z5]7{1C8AOZO9LR$5[C04KL.png

                                                 期待的结果


而实际的结果可能只会像下面这样,这就是Mode Collapse的问题:


VHC[O{)D}NJ45EO3CULA@W0.png

                                                 实际的结果


8CV}DXN$~AU1~V(R}_`]@4E.png


                                                    原因分析

但是因为C@37@L23Y6(1QGC2FGC{JU8.png是可以由我们自己来设计的,因此我们可以设计目标函数C@37@L23Y6(1QGC2FGC{JU8.png来让GAN最小化KL散度,然而Mode Collapse的问题还是存在。具体的有关Mode Collapse的问题之后再介绍,这里就不再赘述。

相关文章
|
20天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)及其应用
【9月更文挑战第24天】本文将深入探讨深度学习中的一种重要模型——卷积神经网络(CNN)。我们将通过简单的代码示例,了解CNN的工作原理和应用场景。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息。
45 1
|
21天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
72 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
20天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
46 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
16天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
31 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
9天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第31天】本文旨在通过浅显易懂的语言和直观的比喻,为初学者揭开深度学习中卷积神经网络(CNN)的神秘面纱。我们将从CNN的基本原理出发,逐步深入到其在图像识别领域的实际应用,并通过一个简单的代码示例,展示如何利用CNN进行图像分类。无论你是编程新手还是深度学习的初学者,这篇文章都将为你打开一扇通往人工智能世界的大门。
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习还不如浅层网络?RL教父Sutton持续反向传播算法登Nature
【9月更文挑战第24天】近年来,深度学习在人工智能领域取得巨大成功,但在连续学习任务中面临“损失可塑性”问题,尤其在深度强化学习中更为突出。加拿大阿尔伯塔大学的研究人员提出了一种名为“持续反向传播”的算法,通过选择性地重新初始化网络中的低效用单元,保持模型的可塑性。该算法通过评估每个连接和权重的贡献效用来决定是否重新初始化隐藏单元,并引入成熟度阈值保护新单元。实验表明,该算法能显著提升连续学习任务的表现,尤其在深度强化学习领域效果明显。然而,算法也存在计算复杂性和成熟度阈值设置等问题。
29 2
|
16天前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
36 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
1天前
|
机器学习/深度学习 PyTorch API
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)