训练方法
DCGAN 的训练方法跟GAN 是一样的,分为以下三步:

(1)for k steps:训练D 让式子[logD(x) + log(1 - D(G(z)) (G keeps still)]的值达到最大

(2)保持D 不变,训练G 使式子[logD(G(z))]的值达到最大

(3)重复step(1)和step(2)直到G 与D 达到纳什均衡

Alec Radford等人于2016年初提出DCGAN以改善GAN的可训练性。他们认为传统GAN之所以不稳定,一个原因便是判别器D搭载的是初级的多层感知机模型,为了将火热的CNN纳入GAN的体系中,作者将多层感知机用CNN进行替换,并做了如下改进: 
1 将池化层用stride=1的卷积层代替
2 将输给生成器G的100维噪声映射为四维张量用作CNN输入而不是向量
3 每进行一次卷积操作就进行批规一化(Batch Normalization)
4 使用ReLU层替换传统的Sigmoid函数,并对输出层使用Tanh激活
5 对判别器D使用LeakyReLU函数作为激活函数
6 移除所有全连接层
  在以上改进的支撑下,论文给出了生成器G的网络结构:

 

  经实验验证,该模型生成的图像较为稳定,虽然只能生成64*64大小的图像,但是这可以通过一些基本的图像处理方法,如金字塔来提升生成图像的分辨率。作者在卧室数据集LSUN上进行了实验,取得了较好的效果(经过一轮训练)

  

  除此之外,作者还发现DCGAN有一个算数加减性质。如下图所示,左侧为图像A,最右侧为图像B,将用于生成图像A的噪声ZA与生成B图像的噪声ZB每一维度的分量进行从ZA到ZB的线性插值,可以得到从A图像到B图像的渐变图像。利用该性质,可以生成一些原本数据集中不存在的性质的图像。这一性质有一个有趣的应用,即生成本来不存在的戴墨镜的女性。
  

转自https://blog.csdn.net/openSUSE1995/article/details/79233806

卷积与Toeplitz卷积

GAN难训练,容易出现大量无效图片的弱点仍未得到改善。为此,Alec Radford等人将卷积神经网络框架引入GAN中,替代原先的多层感知机模型,大大提升了GAN生成图片的稳定性。该论文虽没在理论上进行大量推导,但在GAN的工程实现上做出了不小的贡献。
  Toeplize矩阵与二维卷积的关系,在此基础上引出转置卷积这一升采样方法。

二维卷积与Toeplitz矩阵

二维信号的卷积可作为图像平滑去噪、提取特征(如边缘特征)的手段。其基本计算式如下:

即将卷积核B的反演信号以1为步长,在原图像A上进行滑动平均求解原图像的滤波器响应。CNN中的卷积对传统图像处理中的卷积进行了拓展,丰富了卷积操作的内涵。图像处理中的卷积原本以1为步长,且根据边缘的处理方式,分为full、same和valid三种类型。CNN中将步长(stride)为1这一限定舍去,步长可以不为1,同时,将三种不同的卷积类型用延拓的大小padding进行统一。一个图像大小为6*6,卷积核大小3*3,stride为2且padding为1的卷积实例如下图所示:

  原始卷积定义式并不适合反向求导的公式推导,为此,引入Toeplitz矩阵将卷积运算写成矩阵相乘的形式。Toeplitz矩阵是一种主对角线上的元素相等,平行于主对角线的线上的元素也相等的矩阵他可以直观地将卷积转换为矩阵乘法。为了构造Toeplitz矩阵,首先需要获得经过padding后的图像I以及卷积步长stride,在此基础上,假设可能被卷积核覆盖的区域有K个,则生成K个I的拷贝,将每个拷贝和K对应起来,即每种拷贝对应一种卷积核覆盖图像的方式,对每个拷贝中的像素值,除非该像素被卷积核覆盖,否则将其设为0,最后,将所有拷贝展成行向量并在竖向拼接成一个矩阵,再将卷积核展成列向量,二者相乘并将结果重排大小成卷积后的图像即可。一个Toeplitz的构造实例如下图所示:

  值得一提的是,如果你对MATLAB较为熟悉,就会知道一种基于im2col函数实现的更为简洁的方法。Toeplitz方法中出现了大量无效的0,这些0对于卷积运算并没有帮助,所以自然而然地,可以想到去除那些无用的0,因此,在生成拷贝时就可以将被卷积核覆盖的那部分图像取出而略过原始方案中设0的那些步骤,下图给出了一个案例可供参考。

  Toeplitz矩阵将卷积计算转化为单纯的矩阵乘法,从而使卷积过程显得更加直观,同时,它还为转置卷积提供了可行的方案。根据前文所述,容易推导出卷积前后图像的大小关系如下:

其中卷积前后图像的大小分别为I与I′,k为卷积核大小,padding与stride分别为延拓像素数目与卷积步长。

Toeplitz卷积
  二维卷积作为一种降采样的过程,可被GAN中的判别器用作提取特征的手段,值得注意的是,生成器G使用卷积这样的降采样方法显得毫无意义,为了将原始一维噪声变为图像,急需一种升采样方法,转置卷积应运而生。
  二维卷积可转换为Toeplitz矩阵与卷积核的矩阵乘法,那么能否使用Toeplitz矩阵将卷积结果还原成原始输入图像的大小?答案是肯定的,即使用Toeplitz矩阵的转置与卷积结果相乘,可以将输出恢复到原始输入图像的大小。转置卷积可以理解为是CNN反向传播求解梯度必要的一步(具体原因可参考BP算法中反向传播公式,权重梯度公式中含有δTα操作)。转置卷积具体演算过程本文不做详细介绍,可参考文献来获得一个更为直观的认识。可以推导出经过转置卷积后输入输出大小变化的公式:

其中I′为经过矩阵内补零操作后得到的新输入矩阵的大小,I是原始输入矩阵的大小,根据I+2padding−k是否为stride的整数倍,a取0或(I+2padding−k)%stride。
如果将判别器D中CNN的前向传播视为不断使用Toeplitz矩阵与输入计算矩阵乘法,并把CNN的反向传播视为反传误差与Toeplitz 矩阵的转置相乘那么生成器G的前向传播与反向传播过程就是D的反过程。
  在确定生成器G和判别器D的前传与反传算法后,就可以用深度卷积网络替代传统基于多层感知机的GAN以提升模型的学习能力。

深度学习-DCGAN论文的理解笔记的更多相关文章

  1. 深度学习-生成对抗网络GAN笔记

    生成对抗网络(GAN)由2个重要的部分构成: 生成器G(Generator):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器 判别器D(Discriminator):判断这张图像是真实的 ...

  2. Coursera深度学习(DeepLearning.ai)编程题&笔记

    因为是Jupyter Notebook的形式,所以不方便在博客中展示,具体可在我的github上查看. 第一章 Neural Network & DeepLearning week2 Logi ...

  3. 点云深度学习的3D场景理解

    转载请注明本文链接: https://www.cnblogs.com/Libo-Master/p/9759130.html PointNet: Deep Learning on Point Sets ...

  4. deeplearning.ai 改善深层神经网络 week1 深度学习的实用层面 听课笔记

    1. 应用机器学习是高度依赖迭代尝试的,不要指望一蹴而就,必须不断调参数看结果,根据结果再继续调参数. 2. 数据集分成训练集(training set).验证集(validation/develop ...

  5. deeplearning.ai 神经网络和深度学习 week4 深层神经网络 听课笔记

    1. 计算深度神经网络的时候,尽量向量化数据,不要用for循环.唯一用for循环的地方是依次在每一层做计算. 2. 最常用的检查代码是否有错的方法是检查算法中矩阵的维度. 正向传播: 对于单个样本,第 ...

  6. 深度学习-InfoGAN论文理解笔记

    在弄清楚InfoGAN之前,可以先理解一下变分推断目的以及在概率论中的应用与ELBO是什么,以及KL散度 https://blog.csdn.net/qy20115549/article/detail ...

  7. 【计算机视觉】【神经网络与深度学习】论文阅读笔记:You Only Look Once: Unified, Real-Time Object Detection

    尊重原创,转载请注明:http://blog.csdn.net/tangwei2014 这是继RCNN,fast-RCNN 和 faster-RCNN之后,rbg(Ross Girshick)大神挂名 ...

  8. Fully Convolutional Networks for semantic Segmentation(深度学习经典论文翻译)

    摘要 卷积网络在特征分层领域是非常强大的视觉模型.我们证明了经过端到端.像素到像素训练的卷积网络超过语义分割中最先进的技术.我们的核心观点是建立"全卷积"网络,输入任意尺寸,经过有 ...

  9. 深度学习-语言处理特征提取 Word2Vec笔记

    Word2Vec的主要目的适用于词的特征提取,然后我们就可以用LSTM等神经网络对这些特征进行训练. 由于机器学习无法直接对文本信息进行有效的处理,机器学习只对数字,向量,多维数组敏感,所以在进行文本 ...

随机推荐

  1. 数列的前$n$项和$S_n$的求法

    相关公式 ①等差数列的\(S_n=\cfrac{n(a_1+a_n)}{2}=na_1+\cfrac{n(n-1)\cdot d}{2}\) ②等比数列的\(S_n=\left\{\begin{arr ...

  2. 一篇常做错的经典JS闭包面试题

    作者 | Jeskson 来源 | 达达前端小酒馆 1 究竟是怎么样的一道面试题,能让我拿出来说说呢?下面请看代码: function fun(a,b) { console.log(b) return ...

  3. 集合类 Map接口 HashTable

    集合类的另外一种重要实现为Map接口,Map接口提供的方法如下: Map接口一个不常见实现为HashTable,HashTable对所有有并发访问问题的方法通过 synchronized 关键字进行并 ...

  4. [技术博客] rails控制台调试路由

    目录 rails console 获得路由 app.xxx_path 发送请求 获得响应 作者:庄廓然 rails console 在项目目录下执行rails console test 可以进入测试模 ...

  5. 探索ENCODE数据库 | Encyclopedia of DNA Elements

    ENCODE: Encyclopedia of DNA Elements 目标:按不同组织,收集人类(还有小鼠.worm.fly)基因组里面的所有功能元件 The primary goal of th ...

  6. Chrome提示:"请停用以开发者模式运行的扩展程序"的解决办法

    操作步骤 1.开始 -> 运行 -> 输入gpedit.msc -> 回车确定打开计算机本地组策略编辑器(通过Win + R快捷键可以快速打开运行),如图所示: 2.在打开的本地组策 ...

  7. CentOS7 升级 cmake

    编译cmake文件时,报错:CMake 3.0.0 or higher is required. You are running version 2.8.12.2 很明显,这是 cmake 版本过低导 ...

  8. FreeSWITCH视频直播

    大家都知道,如今,视频直播比较火啊. 今天,在FreeSWITCH精英群里分享了FreeSWITCH做视频直播相关的技术. 首先,要做直播就得有好机器.笔者买了一台阿里云的主机,买的是按量付费的,4核 ...

  9. docker run启动的容器挂掉了,数据怎么办

    情景描述 在某个系统中,功能性的服务使用 docker stack deploy xxx 启动,某个国产数据库的服务单独使用 docker run xxx 启动,数据库服务没有将存储的位置挂载出来: ...

  10. flutter upgrade之后出现Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from

    错误信息 Initializing gradle... Resolving dependencies... Running Gradle task 'assembleDebug'... /Users/ ...