故事将从水里的一滴墨水开始,墨水晕开其实就是初中物理学过的扩散过程,英文Diffusion process,一团分子做无规则的热运动,会从原本局限的初始位置逐渐扩散开来,直至弥漫整个空间,一滴墨水会染黑整杯纯净透明的水,电梯里有一个人放屁整个电梯都会闻到本质上都是扩散过程,初中物理还学到扩散过程证明了物质由分子组成的。
每一个时刻每个粒子都会向着完全随机的方向做热力学运动,这个过程在数学里被称作维纳过程,在物理里表现为经典的布朗运动,当时布朗发现一粒放入水中的花粉,因为水分子热运动无法做到绝对的均匀,所以花粉可能某一个时刻受力不均就会被撞得像某个地方突然动了一下,这个方向在不断的改变而且是随机的,于是你就看到花粉在那里到处乱跑,这就是我们熟知的布朗运动。
让我们把很多花粉都一开始放在某个特定的位置上,比如说某个点、一条线或者一个笑脸,然后让他们各自独立的扩散运动,每个时刻他都会随机的往一个地方跑一步,盯着他们到处乱动的过程,你会发现一个最明显的特点就是原有的结构被破坏了,无论一开始这些点排成了什么图案,经过了足够长的时间之后,你会发现它们都变成了差不多的一团,这并不是偶然。最终这个看似杂乱无章的一团的分布就是高斯分布,
扩散过程本身并不足为奇,它只是一个纯粹没有任何目的的物理过程而已,但在2020年有一篇横空出世的天才论文创造性地利用了扩散过程,竟然将它变成了一个可以用来生成图片的算法,而这就是扩散生成模型。
扩散生成模型的奥秘用一个词来概括就是时光倒流。如上图中的第一个情况,粒子所有的初始位置都来自于同一个点,然后随机过程当中逐渐扩散到整个空间。
现在请大家思考这样一个问题,在左下角a这一小块的例子,他们在之前一小会儿的时刻大概在哪儿呢。
由于我们是使用代码模拟的,所以我们可以很容易的追踪每个粒子的路径,然后把时间倒退几步。
我们可以看出尽管它们的路径都不太一样,但整体有一个共同的显著特征,那就是有一定的方向性,大致上它们都是沿着中心点逐渐地靠近A。
时间越靠前,它们的位置就越接近于初始的那个中心点,所以我们知道时间倒退一点点它们的位置大概是在更接近于中心点的这个区域,事实上这个规律对于其他的小区域也是成立的,所以总的来说每一个位置的例子,如果时光倒流一会,你就会发现他们在平均意义上都会向着初始的位置靠近一些,这就体现出扩散过程在时间上正向和反向的区别了。正向的扩散是机械无脑的热力学过程,无论是什么时候在任何一个位置的粒子,它下一个时刻的去向都是论七八糟均匀的向周围逐渐摊开。但是反向过程则不一样,反向过程的例子不是乱动的,它的演化会从一团混乱的高斯分布中重建出原有的结构,即它是从混乱变成有秩序,这是一个有信息有方向的过程,这就是熵增和熵减的差别,于是在任何一个时刻t,我们都可以给空间上的每个位置画出一个向量的箭头,它表示这个位置的例子在delta t时间之前,平均应该在哪,于是你就会看到这些向量组成一幅这样的画面:
这个向量场有一个专业的名字被称作评分函数score function,这个名字乍一看还以为是个打分的函数,但它其实是一个向量场,我们可以沿用之前气味扩散的例子来理解评分函数,好像一只狗可以沿着气味越来越浓的方向追踪发出味道的来源,本质上它可以被看成一个越来越接近于例子初始位置的导航,它就嗅着这个味道哪里更浓,上一个时刻这个气体分子大概是从哪里来的,无论我们初始结构是一个点一条线段伙食一个笑脸,我们都可以用数学来严格计算出,这个评分函数它会从空间各个地方指引着粒子如何一步步组成最一开始的队形结构,换言之我们只需要知道每个时间的评分函数,就可以让粒子沿着评分函数的导航从高斯分布开始不断靠近一开始的结构形状,这样不断重复下去就能让时光一路倒流,一直回到最开始。此时一团杂乱无章的例子就神奇的排成最开始的那个结构。
即评分函数的箭头以一种非常微妙却又深刻的方式蕴含了你最一开始扩散的时候源头的形状。到目前花了这么大功夫却只为了找到扩散的源头,把一堆粒子排查一个队形。
// TODO 09:05的动画
所谓生成逼真的图片,本质上就等价于让粒子排出一个特定的结构和队形。当我们说一张图片看起来像是真的,数学上它到底意味着什么呢?用一句话概括就是说这张图片的像素点不是乱来的,它得满足一些条件,在计算机的世界里,图片的本质是一串数字或者说一个向量,因为组成图片的一个个像素信息本质上就是RGB三个颜色的数值,所以我们可以把每个像素的RGB一个个写下来,一张图片本质上就变成了一长串数字的列表。
这些数字是有结构的,比如说相邻的数字表示的图片上相邻的像素,所以我们可以把每个数字当成一个坐标,于是一张图片就变成了一个向量,这些向量所在的空间叫做像素空间,你可以随时取像素空间的一个向量,把它的坐标一一转化成颜色,把它翻译成一张照片,在像素空间中,要知道绝大部分的向量对应的图片都是毫无意义和毫无规律的噪声,在这个空间中只有极少部分位置的向量其坐标转换成图片之后看起来是有意义的像是一张图片。
这是因为图像具有结构性,一张图片通常是一团一团的色块,所谓色块就是大部分情况下一个像素相邻区域的像素颜色都差不多,这就对这些像素之间的数值构建起了约束,就像方程一样随机生成的像素通常来说不会满足这些约束,所以整体看起来就完全是乱七八糟的噪声了,当然色块只是众多复杂约束当中的一种,一张图片要象征的除了色块,还有结构、透视、色彩、光影等等方面的要素。
但AI最神奇的地方在于它不需要像美术生那样练基本功,在他眼里所有这些复杂的要求无非就是说只有极少部分的向量对应的图片是看起来真实和有意义的,他们就像这个高维空间当中一条隐藏的金色的矿脉,只有在那些位置是有矿的,我们在真实世界下拍下图片并做成数据集,就相当于在这条矿脉里零零散散地挑出了一些位置然后告诉AI说看,这些就是有矿的地方,所以真正重要的就是这条矿脉在像素空间里,它的这个特定的形状和结构究竟是什么样子,这在计算机科学里是一个非常重要的观点,它被称作流形假设Manifold hypothesis。
意思是所有看起来很真实的图片,本质上等价于看它是不是在像素空间中满足一个特定的形状结构,在一个流形manifold之上只有满足这个流形的结构特点,站到了这个流形的结构上,你翻译出来的图片才是看起来有意义的。
所以换句话说,只要你从空间上的任何一个位置可以一路走到这个流形之上,找到矿脉上的某一个点,那么你翻译出来的图片就是真实的,你就完成了一个真实图片的生成过程。
最后一个问题,