在AI绘画早期发展阶段,学者们常常采用“模仿—创作”的思想,先让模型学会模仿,然后再尝试让模型进行举一反三,也就是创作。比较有名的模型是1987年被提出的“自编码器”(Auto Encoder, AE),它会先用一个“编码器”(Encoder)把一张图片“压缩”到一个相对低维的向量(比如128维),然后再用一个“解码器”(Decoder)来尝试把这个向量“复原”成原来的图片。在学术上,我们把这种低维向量叫作图片的“潜在表示”(Latent Representation),之后的各种模型也会经常用到这个概念。
这样一来,当模型“看过”(或者说“学习”)足够多的图片之后,模型就学会了“模仿”,而且是按照它自己的“理解”去模仿:它可以先把一张图片转换成它自己的“理解”(上文提到的低维向量),然后按照这个“理解”(利用解码器)去把图片画出来,此时我们会发现它画出来的图片和原图往往很像。
值得一提的是,AE此时其实是学会了一种“压缩”的方法:它能够(利用编码器)把原先一个非常高维的数据(原始图片),映射到一个低维向量上。这种压缩的思想在本章最后一节将会阐述的Stable Diffusion模型里起到了至关重要的作用。
在模型对图片有了自己的理解,并学会了模仿之后,我们就能让它进行创作了。事实上,因为向量是可以“叠加的”,所以模型对图片的理解也是可以叠加的。比如说,如果我们把模型对图片A的理解(不妨记为A,注意它是一个向量)和对图片B的理解(不妨记为B,注意它也是一个向量)各取一半,并得到一个新的、融合式的理解(也就是计算0.5A+0.5B对应的向量),然后再让模型根据这个理解去把图片画出来的话,我们就能得到一张新的图片。不难想象(至少我们期待)这张图片将会是图片A和图片B的某种融合,模型从而便完成了一次“创作”。这种“创作”过程我们一般会称之为“插值”(Interpolation),亦即在已有的两张图片间创作出一个中间态。
但学者们马上发现了两个问题:
问题1: 无法进行“插值”之外的创作,因为我们不知道AI的“理解”是怎么样的,或者说我们不知道怎么“从零创造”出一个AI的新的理解。用学术一点儿的话来说,就是我们不知道AI学习到的“潜在表示”的分布是怎样的。
问题2: 即使是这种“插值”式的创作,AI也往往不能如我们所愿地、真正地进行两张图片的融合,而是很别扭地把两张图片的像素给糅合在了一起。
不难看出,这两个问题的症结都在于:AI的“理解”太自由奔放了,导致它很不稳定。我们无法手动设计出一个新的理解,两个理解之间的融合可能也不具备太大的意义,那么,解决这个问题的方法也就呼之欲出了:只要对AI的“理解”加以约束就行。
为此,学者们决定使用一种叫“标准正态分布”的东西,并告诉AI:你对图片的“理解”需要大致服从它的规律!
图2-3 AE的插值式创作
图2-4 一元标准正态分布示意图
在这种思想的指导下,“变分自编码器”(Variational Auto Encoder, VAE)于2014年应运而生,通过这种模型训练后得到的AI,不仅能够对图片有理解,而且你会发现它对所有图片的理解的集合,大致是服从“标准正态分布”的。这样一来,之前提到的问题就都得到了解决,因为:
可以进行“插值”之外的创作。我们只要从“标准正态分布”里随机取一个数据,它就能作为AI的理解,并让AI根据它进行创作。
“插值”式的创作变得合理了。从“标准正态分布”中任取两个数据进行插值后的数据,仍然是“大致”服从“标准正态分布”的。
严谨一点儿的话,插值完的数据只是服从均值为0的正态分布,但标准差会小一些。实际应用时,这种标准差的误差往往可以忽略,所以实际插值的效果往往都还不错。
图2-5 VAE手写数字的生成效果
图2-6 VAE手写数字的插值效果