图版 44 · 人工智能
从噪声里长出来的图
今天许多会画画的 AI,作画的第一步都是一团毫无意义的随机噪点。它们并不在资料库里找一张图来拼贴,而是一遍遍猜“这里面哪些是噪声”,再把它擦掉一点。看一个小到能看清每一步的模型这样做,你会发现:它能画出没见过的东西,靠的恰恰是它学得不够完美。
向下滚动
每幅画都从雪花点开始
一张照片,其实是一长串数字:每个像素的红、绿、蓝各一个。一张小小的 256×256 照片,就有将近二十万个数。把这些数当成坐标,每张照片就是一个有二十万个方向的空间里的一个点。
这样的空间没法画出来,所以这里把它缩小到三个方向:每个亮点是一幅“画”,只有三个数。我们想要的“好画”,都落在一个打了结的环上。现在,这些点只是一团随机的噪声。
每个亮点是一幅只有三个数的“画” · 想要的画都在那个结上
毁掉一幅画很容易
先拿 1000 幅好画当作练习的例子,也就是结上的 1000 个点。往每个点上加一点随机的噪声,再加一点,再加一点。
每一步都只是轻轻一推,可推得多了,结就散了,最后只剩一团圆圆的云,看不出原来是什么。这一半是现成的数学,用不着学。
学会倒着走
难的是反过来。2020 年,伯克利的研究者训练一个神经网络做一件小事:给它一个加过噪声的点,再告诉它噪声加到了第几步,让它猜加进去的噪声是什么。
然后从全新的噪声出发,一步步减去它猜的那一小份噪声。这里用的是一个只有两层、每层 96 个神经元的小网络,走 100 步。看,乱点一点点聚拢,凝成了那个结。
完美的学生只会抄
如果把“猜噪声”做到完美,会怎样?对一组有限的例子,最好的猜法可以直接算出来。这里用它,只给 64 个例子(铜色的小珠)。
结果几乎每个亮点都一头扎到某一颗珠子上,没有画出新东西。完美地学会这些例子,就等于把它们背下来。2024 年的一篇论文把这个矛盾说得很直白:按理论,最好的模型只能把例子原样画出来,真实的模型却能画出新东西。
两个网络,同一个新答案
2024 年的一项研究做了一个巧妙的实验:训练两个网络,给它们两组完全不同的例子,再让它们从同一团噪声出发。这里也这样做,琥珀色和青色各是一个网络,细线连着从同一个起点出发的两个点。
先只给每个网络 8 个例子:一个网络的是铜色珠子,另一个的是青灰色珠子。它们各自背下自己的例子,成对的点落得很远。再给每个网络 1000 个例子:这回两个网络几乎落到同一批点上,可它们谁也没见过对方的例子。它们学到的不再是例子本身,而是那个结。在那项研究里,两个网络各用 10 万张不同的人脸照片训练,从同一团噪声出发,画出了几乎一模一样的脸。
你来试试
选择例子的多少、用哪种去噪的办法、走多少步,再按“重新生成”。试试只走 5 步会怎样;试试 8 个例子时两个网络还会不会落到一起。
试一试1000 个例子时,比较“完美”和“网络”:谁在照抄例子?
模型省略了什么
这里的“画”只有三个数,真实的图有几十万到上百万个。2020 年 DDPM 论文里的网络有 3570 万到约 2.56 亿个参数;这里每个只有大约一万一千个,事先训练好,在你的浏览器里实际运行。这里用的是不带随机性的倒着走法(DDIM),同一团噪声总会得到同一个结果;最早的 DDPM 走 1000 步,而且每步还会加一点新的随机。这里的小网络能画出新点,主要因为它太小,记不住 1000 个例子里的每一个(8 个它就记得住)。对由卷积搭成的图像网络,2024 年的一项理论指出了另外两个局限:网络的每个部分只看图中附近的一小块,并且对每个位置一视同仁,于是它把训练图片里的小块拼成新的整体。
一个常见的误解
画图的 AI 既不是在资料库里找图拼贴,也不是像人一样在“想象”。它反复做的只有一件事:猜出噪声,减掉一点。它能画出新东西,是因为它没有把例子学得完美;而真实的模型有时确实会几乎原样画出训练过的图,研究者已从这类模型里找回了上千张训练图片。
资料来源
- Sohl-Dickstein 等(2015):扩散模型的最初设想,arXiv:1503.03585
- Ho、Jain、Abbeel(2020):DDPM,arXiv:2006.11239
- Song、Meng、Ermon(2021):DDIM,arXiv:2010.02502
- Nichol、Dhariwal(2021):余弦噪声表,arXiv:2102.09672
- Kadkhodaie 等(2024,ICLR):扩散模型的推广,arXiv:2310.02557
- Kamb、Ganguli(2024):卷积扩散模型创造力的解析理论,arXiv:2412.20292
- Carlini 等(2023):从扩散模型中提取训练数据,arXiv:2301.13188

