1. 非监督学习

  监督学习有数据有标签,目的是学习数据和标签之间的映射关系。而无监督学习只有数据,没有标签,目的是学习数据额隐藏结构。

2. 生成模型(Generative Models)

  已知训练数据,根据训练数据的分布(distribution)生成新的样例。

  无监督学习中的一个核心问题是估计分布。

3. PixelRNN 和 PixelCNN

  依次根据已知的像素估计下一个像素。

  PixelRNN(van der Oord et al. NIPS 2016):利用RNN(LSTM)从角落开始依次生成像素。缺点是非常慢。

  PixelCNN(van der Oord et al. NIPS 2016):利用CNN从角落开始依次生成像素。求像素的最大似然估计。比PixelRNN快,但依旧慢。

  PixelRNN和PixelCNN的优点是可以显式地求出概率分布,并且给出评价尺度(evaluation metric),生成的结果也不错。缺点是慢。改进版本是PixelCNN++(Salimans et al. 2017)。

4. Variational Autoencoders (VAE)

  Autoencoder是一种从没有标签的训练数据学习低维度特征(lower-dimensional feature representation)的方法。最开始是用Linear+nonlinearity(sigmoid)的方法,后来人们用深度的全连接层,再后来人们用ReLU CNN。为什么要“低维度特征”?或者说为什么把输入的维度降低?目的是为了获得可靠的、不变的特征。

  第一种用法是和监督学习配合使用。在训练阶段,可以再用一个Decoder把低维度特征解码成和输入类似的数据。这样可以建立损失函数。训练完成之后可以把Decoder扔掉,把Encoder出的特征当成某个监督学习的输入,预测出结果,建立Loss function。在有大量没有标签的训练数据和少量有标签的数据的情况下,这样做很有效。图中的 z 叫 “latent factors”。

  第二种用法是生成新的数据。对于编码出的 z(“latent factors” )的分布 p(z),可以直接选择简单的概率分布,比如高斯。而对于条件概率 p(x|z),则是比较复杂的,用神经网络来模拟。训练的过程如下图所示,(推导过程完全没听懂。。。)。训练完了之后可以只用Decoder network,渐进地改变z的各个分量(比如z1表示微笑的程度,z2表示头的姿态,则可以生成各种头的姿态各种微笑程度的人脸),生成不同的样例x_hat。

  Variational Autoencoders的优点:生成模型的主要方法(principled approach);可以估计q(z|x)(没搞明白这里q是什么。。。),对于其他任务可能是很好的特征描述。缺点:最大化似然估计的下限,而不是直接最大化似然估计,从评估的角度说不如PixelRNN和PixelCNN;相比于GAN,生成的图片比较模糊,质量不高。

5. Generative Adversarial Networks (GAN) (Ian Goodfellow et al., "Generative Adersarial Nets", NIPS 2014)

  不考虑显式地描述density function,而是根据对抗直接生成样例。我们没有办法直接从复杂的、高维度的训练集分布中生成样例,那么就先从简单的分布生成样例(比如随机噪音),然后从训练集分布学习把这个简单分布生成的样例转变成(transformation)符合训练集分布。神经网络就是用来描述这个复杂的transformation(神经网络的作用似乎一直就是用来描述高维度、非线性的某种函数、映射、转换等等)。该神经网络的输入是随机噪声,输出是符合训练集分布的样例。

  GAN有两个网络,生成网络(generator network)和区分网络(discriminator network),生成网络尽一切努力生成图片欺骗区分网络,区分网络尽一切努力区分原图和生成的图。

  具体的训练过程是先优化区分网络k次迭代,再优化生成网络一次迭代,然后不断重复。

  训练完成之后,可以丢掉区分网络,只用生成网络来生成样例。

  改进方案如下:

  2017年是GAN的爆发年,出了成吨的相关研究。生成的样例越来越好。

  GAN的优点:效果非常好。缺点:训练的过程不稳定,很需要经验和技巧;不能给出对得density function的估计。

6. 总结:生成模型的对比

  PixelRNN和PixelCNN:显式的density model,优化似然函数,效果不错,低效、慢。

  Variational autoencoders (VAE):优化似然函数的下限,latent representation很有用,inference queries,生成的图片的质量不够好。

  Generative Adversarial Network (GANs):博弈的原理,生成的图片的质量超级好,难训练,no inference queries。

cs231n spring 2017 lecture13 Generative Models 听课笔记的更多相关文章

  1. cs231n spring 2017 lecture13 Generative Models

    1. 非监督学习 监督学习有数据有标签,目的是学习数据和标签之间的映射关系.而无监督学习只有数据,没有标签,目的是学习数据额隐藏结构. 2. 生成模型(Generative Models) 已知训练数 ...

  2. cs231n spring 2017 lecture9 CNN Architectures 听课笔记

    参考<deeplearning.ai 卷积神经网络 Week 2 听课笔记>. 1. AlexNet(Krizhevsky et al. 2012),8层网络. 学会计算每一层的输出的sh ...

  3. cs231n spring 2017 lecture14 Reinforcement Learning 听课笔记

    (没太听明白,下次重新听) 1. 增强学习 有一个 Agent 和 Environment 交互.在 t 时刻,Agent 获知状态是 st,做出动作是 at:Environment 一方面给出 Re ...

  4. cs231n spring 2017 lecture2 Image Classification 听课笔记

    1. 相比于传统的人工提取特征(边.角等),深度学习是一种Data-Driven Approach.深度学习有统一的框架,喂不同的数据集,可以训练识别不同的物体.而人工提取特征的方式很脆弱,换一个物体 ...

  5. cs231n spring 2017 lecture9 CNN Architectures

    参考<deeplearning.ai 卷积神经网络 Week 2 听课笔记>. 1. AlexNet(Krizhevsky et al. 2012),8层网络. 学会计算每一层的输出的sh ...

  6. cs231n spring 2017 lecture11 Detection and Segmentation 听课笔记

    1. Semantic Segmentation 把每个像素分类到某个语义. 为了减少运算量,会先降采样再升采样.降采样一般用池化层,升采样有各种"Unpooling"." ...

  7. cs231n spring 2017 lecture7 Training Neural Networks II 听课笔记

    1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...

  8. cs231n spring 2017 lecture16 Adversarial Examples and Adversarial Training 听课笔记

    (没太听明白,以后再听) 1. 如何欺骗神经网络? 这部分研究最开始是想探究神经网络到底是如何工作的.结果人们意外的发现,可以只改变原图一点点,人眼根本看不出变化,但是神经网络会给出完全不同的答案.比 ...

  9. cs231n spring 2017 lecture15 Efficient Methods and Hardware for Deep Learning 听课笔记

    1. 深度学习面临的问题: 1)模型越来越大,很难在移动端部署,也很难网络更新. 2)训练时间越来越长,限制了研究人员的产量. 3)耗能太多,硬件成本昂贵. 解决的方法:联合设计算法和硬件. 计算硬件 ...

随机推荐

  1. mac下通过mdfind命令搜索文件

    mdfind命令就是Spotlight功能的终端界面,这意味着如果Spotlight被禁用,mdfind命令也将无法工作.mdfind命令非常迅速.高效.最基本的使用方法是: mdfind -name ...

  2. cell的复用机制

    以下全部都是转载自别人的博客:http://blog.sina.com.cn/s/blog_9c3c519b01016aqu.html 转自:http://www.2cto.com/kf/201207 ...

  3. Java I/O---File类

    1.File概述 File(文件)类可能有一定的误导性,它不仅仅指代的是文件.它既能代表一个特定的文件的名称,又能代表一个目录下的一组文件集的名称,这样就可以用集合List方法调用和遍历.实际上Fil ...

  4. Linux Centos 使用 yum 安装java

    centos 使用 yum 安装java 首先,在你的服务器上运行一下更新. yum update 然后,在您的系统上搜索,任何版本的已安装的JDK组件. rpm -qa | grep -E '^op ...

  5. free 命令详解

    作用:显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区 选项: -b 以byte为单位显示内存使用情况 -k 以kb 为单位显示内存使用情况 -m 以mb 为单位显示内存使用情 ...

  6. 1.Nginx服务应用

    Nginx服务应用 Nginx的优点和作用 Nginx是一款高性能的HTTP和反向代理的服务器软件,还是一个IMAP/POP3/SMTP(邮件)代理服务器! Nginx在功能实现上都采用模块化结构设计 ...

  7. CentOS 7.x上gitlab搭建教程(https可用,邮件可用)

    目录 知识要求 搭建感想 搭建过程 参考 知识要求: nginx基础知识 搭建感想 注:以下是我搭建gitlab时的思考,需要nginx的基础知识,Docker的基础知识才容易理解,与下面的搭建过程是 ...

  8. Java中使用LocalDate根据日期来计算年龄

    Java中和日期直接相关的类有很多,平时最常用到的就是java.util package下面的Date和Calendar,需要用到格式的时候还会用到java.text.SimpleDateFormat ...

  9. python实现散列表的链表法

    在散列中,链接法是一种最简单的碰撞解决技术,这种方法的原理就是把散列到同一槽中的所有元素 都放在一个链表中. 链接法有两个定理,定理一: 在简单一致散列的假设下,一次不成功查找的期望时间为O(1 + ...

  10. Swift语言中与C/C++和Java不同的语法(三)

    这一部分的主要内容是Swift中的Collections 我们知道Java中的Collection基本上是每一个Java程序猿接触到的第一个重要的知识点. 在Swift中也不例外,Swift中的Col ...