目录
➢Part One.生成对抗网络GAN
➢一、GAN网络产生的背景
➢1.机器学习方法
机器学习方法在某种程度上可以分为生成方法和判别方法。
用生成方法,所学到到模型称为生成式模型。常见的生成式模型有AutoEncoder、玻尔兹曼机以及深度信念网络等。
• 生成方法通过 观测数据,学习样本与标签的联合概率分布 P(X,Y) ,训练好的模型,即生成模型, 能够生成符合样本分布的新数据• 生成式模型在无监督深度学习方面占据主要位置,可用于在没有目标类标签信息的情况下捕捉观测到或可见数据的高阶相关性
在AutoEncoder里面,核心的思想是让输入和输出尽可能接近,在解码的部分就可以看做是一个生成式模型,因为我们输入一个Vector就会生成一个新的图像。还有比如有很多的自然图像,没有标签也没有噪声(例如:猫啊、狗啊),生成式模型就会找到他们之间的统计特性和分布特性,从而生成新的图像。
用判别方法,所学到的模型称为判别式模型。常见的判别式模型有:决策树、SVM等
• 判别方法由 数据直接学习决策函数 f(X) 或者条件概率分布 P(Y|X) 作为预测的模型,即判别模型• 判别模型经常用在有监督学习方面• 判别方法关心的是对给定的输入 X ,应该预测什么样的输出 Y
➢2.GAN产生困难和前景
– 有监督学习经常比无监督学习获得更好的模型,但是有监督学习需要大量的标注数据,从长远看无监督学习更有发展前景
– 支持无监督学习的生成式模型遇到两大困难
• 首先是人们需要大量的先验知识去对真实世界进行建模,而建模的好坏直接影响着我们的生成模型的表现
• 真实世界的数据往往很复杂,人们要用来拟合模型的计算量往往非常庞大,甚至难以承受
➢3.GAN提出
2014年,生成对抗网络(Generative Adversarial Networks,GAN)由当时还在蒙特利尔读博士的Ian Goodfellow提出。自此以后GAN热潮席卷AI领域顶级会议,占据最主要的地位,从ICLR到NIPS,大量高质量论文被发表和探讨。到2018年大概三分之一的论文全部是关于GAN网络。GAN到现在都是大火的形式。
➢4.GAN基本原理
GAN起源于博弈论中的二人零和博弈(获胜1,失败-1) 。所谓的零和博弈就是非合作博弈,参与博弈的双方,在严格的竞争环境下,如果一方收益,则另一方一定损失。博弈的双方的收益和损失的和总是为0。
GAN就是采用博弈论的思路,由两种互为敌手的模型:生成模型和判别模型组成。例如:假币制造者团队是生成模型,警察团队是判别模型,竞争使得两个团队不断改进他们的方法直到无法区分假币与真币
开始的时候,这个城市没有人制造假币,所有的人包括警察都不知道假币是什么样子。接着有人很粗糙的制造了假币,这个时候警察非常容易判别出假币;慢慢的假币制造者为了防止被别人识别出来是假钞,就慢慢的提高假币制作的技术,但是警察从不断积累的经验中还是会判别出什么是假钞什么是真钞;在这个过程中,不断的迭代,假币制造团队制造的假币越来越像真的,而警察的判别能力越来越强,会判别出来真假钞之间非常细微的差别。这样两个护卫敌手的能力不断的增强,到最后可能就无法判别出真假币。
通俗的说,就是我们如果在图像领域,我们想让GAN生成一个图像,但是我们不知道这个图像形式化的是什么(所谓的形式化就是这个图像的概率是什么,概率分布是什么,我们很难用形式化的方法把它表示出来),我们虽然不知道这个视觉上的图像的形式化表达理论上应该是什么,但是我们人是能够判别出哪一个是自然图像,哪一个不是(含有噪声的乱七八糟的图像),这里呢我们就可以引入判别模型,来判别这个生成的图像是生成的还是自然的图像,这个时候判别模型和生成模型就是竞争的对手关系。如果你判别出来这个生成的图像不是自然的图像,那么生成模型就会再进一步优化自己的模型,让自己生成的图像更加接近于自然图像,让判别模型更加难以判别出来。这样,慢慢的生成的图像会慢慢的越来越接近真实的自然图像,判别模型也越来越难以判别出生成的模型生成的图像是真是假。
➢二、一般生成模型中的问题
自编码器是让输出和输入尽可能的接近,其编码部分就是将输入压缩到一个很低纬度的空间,例如一个很低维的Vector。其解码部分就是一个生成的过程,把这个低维的Vector作为一个输入,然后就可以产生一个图像,例如产生一个稍微模糊的图像7,然后一个像素差异分别如左右两个图像所示,这样的两个图像从人的角度判断的话,会有不同的判断结果。左图像就是一个符合人思维的数字7,只不过是笔画的长短而已,右图像的差异像素点的位置很不好,让人感觉图像中的7是一个假的7。所以同一个像素差异,会导致人们对生成结果判别的不同。
从上面这个例子中可以看出,判断图像生成的好坏,应该是判断图像的概率上的数据的分布的特性,而不是上面的那种判断方式。
因此概率模型是我们在生成模型中更合理的一个选择,概率模型就是按照某种概率分布生成数据,得到最能覆盖训练样本的概率分布。例如:我们有8x8的二值图像,则有中可能。这么多的可能中自然图像也许只占其中的很小的一部分,因为自然图像毕竟存在他自身的结构特性及特殊性(例如像素之间的关系),但是我们并不知道这种分布到底是分布在了
空间中的哪部分出现的概率最大。但是我们有很多的训练样本,因此我们如果可以通过训练样本找到他们的这种分布,在这个分布里面我们输入一个随机向量(例如:5维的随机向量)。我们把这个5维的随机向量映射到出现这种自然图像数据最有可能的区域,我们就可以得到一个自然图像,因为我们把空间中的点拿出来,那就是一个图像。因此如果我们能够比较好的找到概率分布的话,那我们就可以得到一个很好的生成模型。
我们之前的方法,比如深度玻尔兹曼机和深度信念网络,就是在估计图像的概率,但是这种方法是需要我们显示的去定义一个概率密度函数,以大致知道它服从什么样的分布,然后我们去估计它。也就是需要确定样本的概率模型,即显式地定义概率密度函数。
例如:深度玻尔兹曼机采用对比散度(Gibbs采样)法求解,产生的问题是样本可能会具有很强的相关性,尤其是在高维的情况下,会导致生成的样本很不好,而且我们本身人为定义的分布不一定是一个合理的分布。
GAN模型就是成功的避免了这个问题,GAN是估计样本概率分布却不需要显示定义概率分布 。这种思想的结构性框图如下:
我们有很多的训练数据(例如图像),还有很多的随机噪声vector,随机噪声vector(例如10维的一个随机噪声)通过一个生成模型G生成一个图像(例如是256x256的图像)。也就是这个随机噪声映射到高维空间中的一个点。如果这个点是落在了训练数据所分布的以高概率会出现自然图像的区间内,生成模型就会生成图像;如果这个点是落在了训练数据所分布的以低概率会出现自然图像的区间内,生成模型就会生成一个乱七八糟的东西(不是图象)。这个时候,会通过一个判别模型去判断生成的到底是不是一个图像。训练数据很多,也就意味着有大量的图像,我们很容易的得到真实的图像,那么就可以判断这是个真实的数据还是生成的数据。把判断的结果反馈回来调整生成模型(紫线),让他的生成朝着训练数据的方向进行,知道判别模型无法区分它是生成的数据还是训练的数据为止。
➢三、GAN生成模型
➢1.生成模型介绍
生成模型:捕捉样本数据的分布,用服从某一分布(均匀分布,高斯分布)的噪声z生成一个类似真实训练数据的样本,追求效果是越像真实的数据越好
–表示真实数据的 𝑥 分布
–表示输入噪声变量 𝑧 的分布
–表示z在学习生成模型G之后在数据 𝑥 上学习得到的生成样本的分布
–表示生成模型(Goodfellow提出的论文中,生成/判别模型都是用 多层感知器,我们也可以自己选择合适的网络结构 )
生成模型我们可以看做是一种映射函数,就是把输入的低维向量映射到自然图像(是一种低维到高维的映射)。如果我们的数据集是0-9的数字图像,输入是二维的向量,我们可以通过生成模型,把某一个二维随机向量映射成了一个数字图像,如下图:二维向量里面的两个元素是不同的值的时候,会映射成不同的数字图像。例如二维随机向量是的时候,可能会映射成其他的数字图像。当数据集是图片的时候,那么我们输入的随机噪声其实就是相当于低维的数据,经过生成模型G的映射就变成了一张生成的图片
(疑问:不是-1.8)
下面就是把二维向量映射到了图像0-9这个数字区间
➢四、GAN判别模型
➢1.判别模型介绍
一个二分类器,估计一个样本来自训练数据(而非生成数据)的概率,如果样本来自真实的训练数据,输出大概率,否则,输出小概
–表示判别模型( 多层感知器 )
–表示
来自真实数据而非生成数据的概率
GAN模型并没有对数据,也就是生成图像的话(例如这个数据怎么建模,概率分布到底是什么样的),他在预测图像,但是他并没有给出图像的形式化表达,所以GAN避开了对图像数据的建模的问题,用网络代替概率模型,
。
如下图:对于一个输入的随机噪声,通过生成网络,把随机噪声z映射到高维空间中的一个点,这个点就是训练数据图像(也就是真实数据图像)分布概率比较高的区域的点。例如图中真实的数据是分布在紫色的区域,在这个区域内的任何一个点都对应了一个例如是256x256的图像,如果我们的随机向量z通过生成网络映射到紫色的区间,那么这个生成图像就是很象真实图像。如果要估计的模型想把噪声向量z映射到真实数据分布概率区间(紫色区域),这个区域估计的越准的话,那么生成的也就越准确。例如点A是我们生成的点,但是点A在紫色区域的外面,那么这就是一个比较差的生成的点。
➢五、GAN涉及到的函数
➢1.GAN目标函数
判别模型目标函数最大化;等价于损失函数最小化。
训练GAN的时候,判别模型希望目标函数最大化,也就是使判别模型判断真实样本为“真”,判断生成样本为“假”的概率最大化,要尽量最大化自己的判别准确率。第一部分是训练数据:绿色(也就是真实数据),要有大的概率,另外一部分是生成数据:紫色,
要有小概率,
要有大概率,这两部分要同时满足:
判别模型也可以写成下面损失函数的形式,判别式是最大化这个目标函数,所以损失函数是最小化损失函数(在目标函数前面加一个负号)
➢2.GAN损失函数
生成模型目标函数最小化。
生成模型希望的是判别式判别不出来,也就是在给定这个判别模型D的条件下,最小化这个概率,也就是最小化这个目标函数,生成模型希望该目标函数最小化,也就是降低判别模型对数据来源判断正确的概率,要最小化判别模型的判别准确率
前面这部分在判别模型固定的情况下,是一个固定的值,所以我们只需要最小化紫色的部分,但是紫色部分实际中效果并不好,开始时梯度小收敛慢,因此使用如下目标:
在最开始的时候,生成模型生成的图像的概率一般都很低,也就是接近于0。我们从图中可以看出来在0的部位,红色线对应的函数的梯度是非常小的,我们在使用梯度下降法进行求解的时候,在0附近(红色圈)我们每次更新的数值是非常小的,所以如果选择这个函数的话,再开始的时候会收敛的非常慢,所以我们选择蓝色线对应的函数。
➢六、GAN模型训练
➢1.GAN模型训练介绍
❑ GAN在训练的过程中采用交叉训练两个网络的方式:固定一方,更新另一方的网络权重
❑ 交替迭代,在这个过程中,双方都极力优化自己的网络,从而形成竞争对抗(零和对弈),直到双方达到一个动态的平衡(纳什均衡)
❑ 此时生成模型的数据分布无限接近训练数据的分布(相当于造出了和真实数据一模一样的样本),判别模型再也判别不出来真实数据和生成数据,判别的准确率为 50% ,因为生成模型已经学到了数据模型
固定生成模型G,训练判别模型D时,最优的判别器为如下,圈1=圈2的时候,全局最优,结果为
因为要最大化判别的准确性,所以取最大,证明过程如下:
通过图示我们看一下判别器的生成过程:
黑色虚线是代表真实数据的分布;绿色实线是代表生成数据的分布。
在最开始的时候,判别器D是一个没有收敛到最优的而是部分精确的分类器(a);
随着训练的进行,判别器就会收敛到它最优的形式(b),这样就会较为准确地区分出生成数据绿实线和真实数据黑虚线,在红色椭圆部分,生成的数据的概率几乎为0,整个概率会接近于1,在蓝色椭圆部分,虽然有生成数据,但是真实数据几乎为0,所以整个概率会接近于0;
这个时候我们更新生成器,我们把z映射到了偏向于真实空间的部分(c);
更进一步,如果说我们把G更新,使得噪声都集中分布到了图示的区域(d),那么训练得到的数据的分布和真实的数据分布几乎重合,这个时候我们的判别器就判别不出来了,这个时候就是最优的收敛,为
生成网络的全局最优值是,也就是全局最优的生成函数值是
,推导过程如下,其中生成模型的损失函数记作
,损失函数就是我们判别模型训练的时候得到的结果。最小化双绿色线条部分,把期望的形式改成积分的形式,然后分子分母同时乘以
,然后简化,最后可以写成黄色高光部分,当二者概率分布相同的时候,紫色椭圆的值为0,达到全局最优的时候就是概率分布一样的时候,也就是最终的值为
在Goodfellow里面的论文中,给出的训练伪代码如下,红框表示训练判别器;蓝框表示训练生成器。在这里判别器的训练为了更准确,训练了K次,生成器训练了1次。在训练判别器的时候,首先需要在判别器中随机采样m个样本,训练数据里面也采样m个图像,然后按照梯度上升法对圈1公式更新参数即可。这里要注意一下,因为判别为我们是要求他的最大化,所以采用的是梯度上升法,训练完以后,我们的判别器D的参数就确定下来了;接着我们训练生成器,同样先采样m个噪声,然后通过最小化圈2公式表示的目标函数,这个时候我们才使用梯度下降法,减去学习率乘以导数的形式即可。以上两个过程交替训练,从而使得双方都达到收敛 。
➢七、GAN模型的优势和不足
➢1.GAN模型的优势
– GAN网络模型很简洁明了, 任何 一个可微分函数 都可以参数化 D 和 G (如深度神经网络,Goodfellow用的是多层感知器)– 支持 无监督方法实现数据生成 ,减少了数据标注工作– 生成模型 G 的参数更新不是来自于数据样本本身(不是对数据的似然性进行优化),而是来自于判别模型D 的一个反传梯度– 我们在优化生成模型的时候,是没有直接涉及到训练样本的,我们是通过判别器来优化生成模型,判别器是依赖于训练样本,经过训练样本训练而得到的,所以训练样本在生成模型方面是间接的起到了作用
➢2.GAN模型的不足
– 无需预先建模,这样会导致数据生成的自由度太大,可能生成天马行空各种各样的数据– 得到的是概率分布,但是没有表达式,可解释性差– D 与 G 训练无法同步,训练难度大,会产生梯度消失问题
➢八、GAN的优化和改进
GAN网络大火以后,有很多的人对GAN进行了研究和改进,我们主要介绍以下几方面的改进和优化。
➢1. 限定条件优化
对于我们输入的一个Vector,可以是一个随机的向量z,对应生成数据。例如我们训练的时候用的数据是图像那就生成图像,但是GAN的自由度非常的大,例如我们输入一个随机的向量,GAN会给你生成任何的图像:你输入一个随机向量1,GAN生成一个蓝天的图像;你输入一个随机向量2,GAN生成一个白云的图像;你输入一个随机向量3,GAN生成一个动物的图像……所以你也不知道哪一个随机向量会生成哪一个图像,这样的GAN对我们的实际应用是没有作用的
CGAN就是解决上面的问题,我们想让网络生成我们想要的东西,CGAN才是在实际中真正有用的模型
CGAN的输入包含两个部分:第一个部分噪声z,第二部分附加的信息y,z和y一起作为输入的向量。这两部分一同输入到生成网络里面;判别器也是包含了生成网络的输出以及对应的标签。one-hot向量将类别变量转换为机器学习算法易于利用的一种形式的过程,这个向量的表示为一项属性的特征向量,也就是同一时间只有一个激活点(不为0),这个向量只有一个特征是不为0的,其他都是0,特别稀疏
在生成模型中,先验输入噪声p(z)和条件信息y联合组成了联合隐层表征。y是一些附加信息,可以是one-hot向量,也可以是图像或者分类标签。条件GAN的目标函数是带有条件概率的二人极小极大值博弈
CGAN的性能:下面这个就是CGAN生成的,这个例子中标签y就是0-9这10个数,每一行就是对应的one-hot vector。第一行想生成0,就生成了0;第二行想生成1,就生成了1
输入文本C,经过传统的神经网络生成一个图像Image,我们还有很多带标签的火车,那么我们这个过程中的L2范数就是使得生成的Image和训练的Image之间的误差最小,那么最终的结果会是生成一个介于正面火车和侧面火车之间的很模糊的图像A Blur Image。如下图:
因此我们就要借助GAN生成网络的思想去预测数据(图像)的概率分布,利用GAN来生成我们想要的数据的分布。所以我们应该告诉生成器我们想要什么,因此我们的输入就多了一部分(黄色的框,这里表明我们想要生成的是一个火车),我们这个时候就是把c通过Embedding技术变成Vector输入到G里面;同样的随机的部分,随机的向量z也要输入到生成网络G里面。生成器G,只是看到了两个向量c和z而已,并不知道c和z具体是代表什么,所以G还会生成一个图像,这个图像有可能是一个图像,也可能是一个乱七八糟的不是图像的东西,如果我们还用传统的判别器判别的话,这个时候生成器是没有办法对生成网络进行有效的调整,因为生成器只是让他生成看起来是一个真实的图像就可以了。例如生成了一个特别象真实数据的猫,那么也会得高分,而实际应该生成特别象真实数据的火车,才会得高分。产生这样的问题就是我们忽略了条件c,无法产生期望输出。(疑问:输入到生成器里面的条件就是火车啊,怎么可能生成猫呢??)
因此,在这个模型中,不仅生成网络要输入这个条件c,判别网络也要输入条件c,在这里我们判断的情况就增加了。第一种情况:正例的情况,就是我们想要生成火车,这里有一个label的向量火车,同时有真实的火车这样的图像,这种就是我们想要的正例,我们想要生成火车,也有真实的自然火车,这样的话,我们的训练数据就要label好一批高质量的火车的图像;第二种情况:负例的情况,label的向量火车,生成的图像;第三种情况:负例的情况,label的向量火车,非常真实的非火车的图像。整个过程就是把条件作为D的输入,去除错误类别的高质量图像 。(疑问:没有看明白这三种类别咋来的??)
简化的流程如下:
①在每一次训练中,首先选择m个正样本,正样本就是标签,对应一个图像
。如果要训练火车,标签
就是火车,图像
就是真实的高质量的火车图像,表达形式是
;②从随机噪声分布里面在选择m个噪声的样本;③在从生成模型
(
是条件,
是噪声)中选择生成样本;④在从datab想要的那些e中选择m个样本,database里面就是高质量的图像,但是里面包含有不是我们想要的图像。做好以上工作以后,更新判别器的参数,最大化目标函数,最大化正例部分,也就是
能够有比较高的值;判别上添加了条件,生成上也是包含了两部分,一部分是随机的,一部分是条件
通过CGAN我们知道, 通过加入条件c我们可以控制GAN生成我们想要的图像,但是这种想要的图像是粗粒度上的想要的图像,例如我们想要生成一个火车,我们输入一个label的向量,然后CGAN就会生成火车这样的图像,但是生成的是一个什么样的火车我们还是没有办法控制的。此时的CGAN还是一个黑盒子,生成的是火车,但是是什么样的火车是完全不受控制的,我们整个过程输入的Vector也不知道到底会映射到火车空间中的哪一个数据点,到底哪一个维度控制了映射到哪一个图像上,这些我们也是未知的。InfoGAN达到了对图像的细粒度的控制。
解决的问题:– 输入随机向量,GAN生成模型缺乏解释性
– 例如:修改输入向量某个维度生成图像变化可能没有规律,可能是随机的(红圈处)
– InfoGAN:希望能够让输入向量的不同维度代表不同的特征,具有可解释性
基本原理:– 利用z寻找一个可解释的表达,将z进行拆解
①• 不可压缩的噪声z’ ;
②• 可解释的隐变量c, 称为latent code,我们希望c 的每一个维度都会产生一些有意义的特征
– 通过约束c与生成数据的关系,使得c里面可以包含某些语义特征
①• 比如MNIST实验的c就可以由一个取值范围为0-9的离散随机变量(用于表示数字)和两个连续的随机变量(分别用于表示倾斜度和粗细度)构成
最小化前面这部分V。后面这部分我们要最大化互信息I,所以我们的正则项前面是减号,这样的话我们就只最小化整体即可:
实验结果:从左到右变化c1 , c2 , c3 : c1控制数字类型, c2控制向右倾斜, c3控制字体粗细。
我们输入的Vector的前面的3个维度c1 , c2 , c3会控制不同的属性。这里面我们需要注意的是:其实我们不是开始的时候就赋予了输入Vector的第一维c1控制数字类型 ,第二维c2控制向右倾斜,第三维c3控制字体的粗细,而是我们在优化生成网络G的时候,对c这部分进行了最大互信息的约束,然后使得c的前3维具备了一定的物理意义。不是说,我们开始的时候就让c1 , c2 , c3具备一定的物理意义,而是我们选择约束这3部分,才让其有了物理意义,但是其具体具备了什么样的物理意义或者语义特征,我们可以通过该表某一维的具体的值来观察发现。
提出了一些训练技巧(4个技巧),提高网络的收敛
第一个技巧:Feature matching,是指把判别器 D 学到特征f(x)也“传”给生成器 G,让生成器 G 不仅能知道判别器 D 的输出,还能知道判别器 D 是基于什么输出的,生成器把判别器的中间层输出作为目标,尽量使生成样本的中间输出和真实样本的中间输出相似
第二个技巧:Minibatch discrimination: D 在判断当前传给它的样本是真是假的同时,不要只关注当前的,也要关注其他的样本
第三个技巧:Historical averaging (正则项): 让训练的参数和他过去的时刻有关
第四个技巧:半监督学习:增加了一个类别K+1表示GAN生成的图像
实验结果:Minibatch discrimination可以提高主观质量
可以解决图像融合的问题。能在给定简单的复制粘贴合成图像的情况下,生成高分辨率、且比较真实的融合图像。GAN 被用在此领域的第一篇文章
GP-GAN的框架结构:
- Blending GAN:生成颜色约束
,
作为颜色约束使生成图像更加真实、自然,同时伴随一定的模糊。
- 梯度约束进一步提高图像分辨率,使其拥有纹理、边缘等细节
Blending GAN结构 :
实验结果:
(疑问:自己加实验结果)
➢2. 迭代式生成优化
解决的问题:
– 高分辨率图像生成• 在原始 GAN和CGAN中,还只能生成 16*16, 28*28, 32*32 这种低像素小尺寸(低分辨率)的图片
• 而LAPGAN首次实现 64*64 的图像生成。采用由coarse-to-fine的渐进生成方式,每一步生成的时候,可以基于上一步的结果,只需要“填充”和“补全”新图片所需要的那些信息
生成的结构框图:
– 输入噪声,经
生成
(GAN 和CGAN等传统的只能生成
这样低分辨率的图像),但是LAPGAN接着从
上采样得到
(稍微高分辨率的图像),使用
作为条件输入
生成差分图像
,添加到
中生成
– 这里的差分图像相当于上采样得到的
一定是模糊的质量不是很好的图像,那
会对应一个相同分辨率的质量比较好的图像,这个质量比较好的图像和
之间就会存在差异,相当于质量比较好的图像比
多一些新的信息,所以我们通过
来预测比
增加的那些信息,预测出来的信息再添加到
里面,那么我们就会得到一个稍微好一点的图像,这个稍微好一点的图像可能又会产生一些有用的信息……一次迭代,一步步加入信息。
训练过程刚好相反:
– 输入 64 × 64 图像,=
, 模糊和 2 倍因子下采样 ( 红线 ) ,产生
– 2 倍上采样( 绿线 ) 生成
的低通版本
,用于生成真实的高频信息和低频信息
实验结果:Coarse-to-fine的视觉效果
文本到图像生成 :
– 解决文本到图像生成分辨率不高的问题,采用与 LAPGAN 相似的思路,采用coarse-to-fine 的思路,构建两个 GAN• 第一个GAN用于根据文本描述生成一张低分辨率的图像
• 第二个GAN将低分辨率图像和文本作为输入,修正之前生成的图像并添加细节纹理,生成高分辨率图像
StackGAN的基本框架图:
实验结果:
➢3. 结构优化
深度卷积生成对抗网络:
– 将卷积网络和 GAN 结合的经典论文– 考虑 GAN 训练起来非常不稳定,经常会使得生成器产生没有意义的输出,DCGAN 为 CNN 的网络拓扑结构设置了一系列的限制来使得它可以稳定的训练
DCGAN的结构框图:
DCGAN的主要限制:
– 所有的pooling层使用strided convolution (判别网络)和fractional strided convolutions (生成网络)进行替换,即所有的pooling层都是采用卷积来实现的。所有的pooling层都是使用卷积来是实现的。
– 对于更深的架构移除全连接隐藏层(在网络里面,全连接层是参数最多的部分)
– 在生成网络三维输出层使用Tanh激活函数,其他层使用ReLU激活函数
– 在判别网络的所有层上使用LeakyReLU激活函数:公式如下:
实验结果:
➢九、GAN的应用
➢1.图像转换
➢2.图像生成
➢3.图像迁移
➢4.图像合成
➢5.图像预测
![](https://i-blog.csdnimg.cn/blog_migrate/cd290dd4bd04505e8f36d5c3110bad41.png)
➢6.图像修复
➢Part Two.胶囊网络
胶囊网络是很新的一种网络,2017年正式被火热研究。
➢一、胶囊网络背景简介
➢1.CNN现存问题
在卷积神经网络里面有一个池化操作。池化操作提供了局部不变性,错误解决了需要解决的等变性问题,从而丢失了位置等信息。也就是把局部的小的变化忽略,在万变中找到不变的地方
– 平移等变性:对于一个函数,如果对其输入施加的变换也会同样反应在输出上,那么这个函数就对该变换具有等变性• 例如:输入0,3,2,0,0 产生结果 0,1,0,0 ,那么输入模式 0,0,3,2,0 可能会产生0,0,1,0的输出– 平移不变性:对于一个函数,如果对其输入施加的某种操作丝毫不会影响到输出,那么这个函数就对该变换具有不变性。• 例如:池化操作就是具有这种局部的不变性
CNN现存问题例如:
➢二、胶囊网络
➢1.胶囊网络的改进
– 使用胶囊作为网络基本单元(之前的网络都是使用神经元作为基本单元)
– 特征向量表示可视实体,对方位等信息进行编码
– 动态路由算法代替池化操作
➢2.特征向量表示可视实体
实体的存在概率具有局部不变性——当胶囊覆盖的有限视觉域内的实体变换姿态时,它是不变的。它是什么就是什么。
实体的实例化参数具有等变性——由于实例化参数表示实体的姿态坐标,因此随着实体的姿态变化,实例化参数会相应改变
所谓的姿态就是位置、方向和比例
➢3.胶囊
胶囊输出的实例化参数提供了一种由部分到整体的简单识别方法,由单个有限视觉域逐层向上预测,最终形成对目标图像的解析树,达到识别目的。
在连接到下一层时,可以做出一个简单选择,即实体是否能够由多个激活的具有正确的空间关系的胶囊表示,并且激活更高级别的胶囊 。
设胶囊的输入为𝒖𝑖 , 使用预测矩阵𝑊𝑖𝑗与𝒖𝑖相乘,对高层特征向量进行预测,得到预测的特征向量𝑢𝑗|𝑖
当前层胶囊对所有预测向量求取加权平均,便得到了向量𝐬𝑗
为了使特征向量的长度能够表示实体存在的概率,需要使用非线性压缩(squashing)函数将向量长度限制在0到1之间
𝐬𝑗很大,压缩项为1;𝐬𝑗很小,压缩项为0
➢4.胶囊间的动态路由
胶囊间的动态路由机制可以确保每一层胶囊输出的特征向量被正确地发送到下一层中对应的胶囊,动态路由用来确定耦合系数
耦合系数是使用Softmax函数来计算的,并且前一层的胶囊
与下一层中的所有胶囊之间的耦合系数总和为1
整个过程的动态路由算法:
特别注意的是其整个路由过程不仅仅是存在于胶囊网络的训练过程中动态迭代的来更新c,也存在于验证和测试过程,而且需要动态、多次迭代的更新c。c衡量了哪些胶囊和我们的输出有很强的一致性,或者他们之间的强弱的多少。
➢5.胶囊网络单层结构
➢6.CapsNet
• 实现从主胶囊(8D)到数字胶囊(16D)的转换,即:低级特征向量向高级特征向量的转换
• 由于使用特征向量长度来表示对应类别存在概率,所以在最后一层进行分类时,需要将输出的特征向量取L2范数
边际损失:
为了实现同时对多个对象的识别,每类目标对象对应的胶囊应分别使用边际损失函数得到类损失Lk,则总边际损失是所有类损失之和
重构正则化:
鲁棒性强的模型一定具有很强的重构能力。为了使胶囊对输入图像进行编码并输出对应实例化参数,该网络引入了一个重构损失作为 正则项。重构损失是逻辑单元的输出和像素强度之间的差的平方和
实验结果:
❑ 手写数字识别:
– 使用 3 次路由迭代来计算耦合系数 c– ( l , p , r ) 代表 label 的,预测的和重构的– 最右边是失败的例子
❑ 特征向量的各个维度表示什么
– 每行展示了16D的DigitCaps中某个维度在区间[-0.25,0.25]间调整0.05,不同的维度控制不同的姿态信息