You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
7.1 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 126 | 计算机视觉高级话题(三):产生式模型
今天,我们来讨论计算机视觉高级话题中的“**产生式模型**”Generative Model
我们前面讲到的计算机视觉问题绝大多数场景都是去学习一个“判别式模型”Discriminative Model也就是我们希望构建机器学习模型来完成这样的任务比如判断某一件事情或一个图片的特征或者识别图片里面的物体等这些任务都不需要回答“数据是如何产生的”这一问题。简言之针对判断类型的任务不管是回归还是分类我们都不需要对数据直接进行建模。
然而,判别式模型并不能解决所有的机器学习任务。有一些任务的核心其实需要我们针对数据进行有效的建模,这就催生了“产生式模型”。
## 产生式模型的一些基础概念
那么,针对数据建模的产生式模型都有哪些基本思想呢?
首先,产生式模型的一个核心思想就是模型要能够产生数据。也就是说,产生式模型不仅需要针对已有的数据建模,还需要有能力产生新的数据。产生出的这些新数据当然需要和已有的数据有一定的相似度。换句话说,新产生的数据要能够“以假乱真”。
那么,有哪些能够产生数据的工具呢?
**在比较简单的模型中,概率分布其实就起了产生数据的作用**。例如,在离散概率分布的世界里,如果我们知道了一个伯努利分布的参数,也就是某一个事件发生的概率,那么,从理论上来说,我们就可以模拟出这个事件的发生。
比如我们利用伯努利分布来对掷硬币产生的正反面建模。一旦我们知道了这个分布的概率是0.5或者说是50%),那么,我们从这个分布中产生的数据就可以形成和掷一枚没有偏差的硬币一样的效果。
同样的道理,如果我们利用正态(或者叫高斯)分布来针对一个连续变量建模,例如某一个地区的温度,那么一旦我们知道了这个正态分布的均值和方差这两个参数,我们就可以产生所有温度的可能值。假设温度完全服从这个正态分布,那么就可以认为这些可能值就是以后这个地区可能出现温度的真实情况。
当然,我们可以看到,简单概率分布无法对真实世界的绝大多数场景进行建模。这也不断激发研究人员来开发各种更加复杂的概率模型来对真实世界进行描述。
在过去十多年的时间里,一类机器学习思想逐渐成为主流的产生式模型,那就是**概率图模型**。顾名思义,概率图模型就是概率论和图论的巧妙结合,以此来对复杂的联合概率分布来进行描述。
我们今天就不针对概率图模型展开讨论了。你需要了解概率图模型的一个重要特点,那就是能够利用一个“显示的”表达式来写出这个联合概率分布,不管这个式子本身有多复杂。也就是说,**概率图模型期望能够通过构建复杂的、显示的表达式来完成对真实场景的模拟**。
## 产生式对抗网络
显然,构造一个概率图模型是一个极具挑战的任务,面对复杂的情况,我们都需要写出一个显示的表达式,或者是针对这种场景的数据来进行模拟。例如,图像和音频信息就是比较复杂的数据,很难用一个公式(不管这个公式多么复杂)来表达。
那究竟该怎么办?针对这种复杂的数据,研究人员提出了一种新的产生式模型,这就是“**产生式对抗网络**”Generative Adversarial Nets简称为 **GAN**\[1\]。在过去的几年里,这种模型因其概念简单而备受青睐。
GAN的基本思想是怎样的呢
首先,我们有一个**数据的“产生器”**Generator。这个产生器的作用是从一个我们可以控制的模型中产生数据。最终我们的期望是这个产生器能够产生和真实数据一样的数据。
其次,我们有一个**数据的“判别器”**Discriminator其目的是区分数据究竟是真实的数据还是产生器产生的数据。
GAN的模型训练是一个迭代的过程。最开始产生器肯定无法真正产生有效的数据这个时候判别器能够很轻松地对产生的数据进行一个评判哪些是真实数据哪些不是。但是产生器会根据这个判别结果逐渐调整自己产生数据的过程慢慢地让自己产生的数据趋于真实。一直到最后判别器无法分别出数据的真伪。
GAN其实代表了这么一类模型那就是不再对数据的产生过程进行显式建模因为这个太过于困难而是**想办法定义一个流程,通过这个流程产生数据,从而能够直接去对真实数据进行模拟**。
GAN和深度学习的结合点在哪里呢就是产生器和判别器可以分别是多层的神经网络甚至可以是更加复杂的深度学习模型。这样GAN的学习过程其实也就是两个不同的各司其职的深度学习模型参数学习的过程。
在近几年的发展中基于GAN的各类模型层出不穷而且能够产生的图片质量也越来越高甚至有的真的达到了能以假乱真的程度。
就在很多人都对这类模型充满了信心的时候一些理论界的研究再次让大家对产生式模型特别是GAN的前景萌生了怀疑。GAN能够彻底解决产生式模型的所有问题吗
最新的论文\[2\]论证了GAN在一些限定情况下并不是对数据的整个分布进行建模。一个通俗的例子是如果我们训练了一个可以产生猫的图片的GAN那么在理想状态下这个模型是不是应该可以产生各式各样不同种类的猫的图片呢答案是经过某种训练的GAN并不能做到这一点。相反GAN只能产生有限的猫的图片。这肯定是不太理想的一种情况。
那么研究者究竟是应该修改GAN来克服这个问题还是能够找到更好的方法来产生数据目前这还是一个未知答案的研究课题。
## 小结
今天我为你讲了计算机视觉高级话题之一的产生式模型。
一起来回顾下要点第一我们来讲了为什么需要产生式模型和简单的基于概率分布的数据产生器第二我们讨论了基于GAN的产生模型和最新研究的GAN的一些局限。
最后,给你留一个思考题,有了能够以假乱真的产生式模型,我们可以有哪些应用呢?
欢迎你给我留言,我们一起讨论。
**参考文献**
1. Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, and Yoshua Bengio. **Generative adversarial nets**. Proceedings of the 27th International Conference on Neural Information Processing Systems - Volume 2 (NIPS14), Z. Ghahramani, M. Welling, C. Cortes, N. D. Lawrence, and K. Q. Weinberger (Eds.), Vol. 2. MIT Press, Cambridge, MA, USA, 2672-2680, 2014.
2. Sanjeev Arora and Yi Zhang. **Do GANs learn the distribution? Some theory and empirics**. ICLR. 2018