雾隐斋的洗画人
一、一张灰纸,说是幅名画
金陵城外有个雾隐斋,专修一种别人不肯接的活——被"雾"吃掉的画。
这毛病城里人都听过。一幅画放久了、受了潮气,画面上会起一层灰翳,像蒙了层雾。今天薄薄一层,明天又薄薄一层。
一年不管,山水还看得清;十年不管,只剩个影子;几十年没人管——整幅画就糊成一张匀匀的灰纸,什么都没有了。
这天来了位裴老爷,抱着个锦盒,手一直抖。
打开——一张灰扑扑的纸,边角都脆了。
"这是……一张白纸?"徒弟阿墨凑近看。
"《寒江独钓》,"裴老爷声音发颤,"我祖上传下来的,周朴的真迹。"
阿墨愣住了。周朴的画,青州拍出过八百两一幅。可眼前这张,灰蒙蒙一片,别说钓翁孤舟,连一条线都找不着。
"裴老爷,"阿墨陪着小心,"这雾落得太厚了。满城的裱画师傅都会说同一句话——没救了。"
"所以我才来雾隐斋。"裴老爷把锦盒往前一推,"陆师傅在么?"
二、雾是怎么落上去的,我比谁都清楚
里屋出来一位老者,姓陆名迟,人称陆师傅。他捏起那张灰纸,对着光看了半晌,放下了。
"能揭。"
阿墨忍不住问:"师父,您连一根线都没看见,怎么知道底下是《寒江独钓》,还是别的什么?"
"我不知道。"陆师傅倒了杯茶,"我也不去猜。"
"不猜原画,那您揭什么?"
"我揭雾。"陆师傅呷了口茶,"别的师傅修画,靠的是'猜原作'——猜这儿该有座山,那儿该有条船,照着猜出来的样子往回描。猜错一笔,全盘皆错。"
"我不猜。我这辈子只下过一样功夫——我懂雾。"
他招手让阿墨跟进里屋。三面墙,摞着三百本册子。
"我年轻时干过一件傻事。"陆师傅拍了拍那些册子,"我花了三十年,把好画一张一张,亲手弄脏。"
"弄脏?"
"对。我从市集上收来几千幅寻常画——不是名作,就是些山水花鸟。每一幅,我用极细的灰粉,一层,一层,往上扑。扑一层,我就把它脏成什么样,原样画下来;再扑一层,再画一遍。"
"直到那画也变成一张灰纸。"
阿墨倒吸一口气:"几千幅画,每幅几百层……"
"三百本册子,记的全是这个。"陆师傅眼睛亮起来,"我记的不是画,是雾。第一层雾落上去,画会变成什么样;再落一层,又变成什么样。几千幅脏下来,我闭着眼都知道——一层雾,长什么模样。"
"既然我知道'干净的画,加一层雾,会变成什么脏样'——那反过来:给我一张脏画,我就能认出最上头那层雾,把它揭掉。画,就干净了一层。"
三、一层一层揭,绝不贪多
陆师傅动手了。
他拿一柄极软的羊毫,蘸一种药水,在灰纸上极轻地一拂。拂完,纸还是灰的。
阿墨凑近了看,半天,才觉出好像——好像灰得"匀"了那么一丁点?说不清。
"师父,这就揭了一层?"
"揭了一层。"
"可我什么都没看见。原画呢?"
"急什么。八百层雾,你指望揭一层就见着钓翁?"
阿墨手痒,"师父,让我来。我使点劲,一把揭到底——"
没等陆师傅拦,他抢过笔,狠狠一拂。
灰纸上"啪"地破了一块,露出底下一团乱糟糟的墨渍,比原先更不像画了。
陆师傅叹气:"雾积了几十年,八百层。你想一笔揭到底,手底下哪有那个准头?劲大一分,画就毁一分。"
"那到底怎么揭?"
"一层一层。每次只揭薄薄一层,每一层都揭得稳稳当当。八百层,我就揭八百次。"
阿墨挠头:"这也太慢了。"
"慢才稳。"陆师傅又拂了一笔,"一步只走一小步,走岔了也就岔一点点,下一步还能救回来。你要一步登天,一脚踏空,就再没底了。"
揭到第几十层,阿墨看出点门道,又想不通,就问了那个憋了半天的问题:
"师父,您揭雾的时候,心里是不是想着原画长什么样?照着原画往回还原?"
陆师傅摇头:"错了。我要是去想原画,准出岔子——我压根不知道原画长啥样。"
"那您到底在想什么?"
"我只看一样东西:最上面这一层雾,长什么样。"
他指着灰纸:"你看这一片,灰里透着一点冷;那一片,灰里透着一点暖。这不是原画的冷暖——是雾自己的深浅。我认得雾。我把这层雾照原样'描'出来,再从脏画上轻轻一减,剩下的,就是揭掉一层的画。"
"您全程不管原画?"
"不管。原画长啥样,等八百层雾揭完,它自己就出来了。我一步都不用去猜它。"
"我只管一件事——每揭一层,让手底下这张画,朝着'更像一幅真画'的方向,挪那么一点点。八百步挪下来,它就到了。"
阿墨似懂非懂,只觉得师父这话里,藏着一个他还没够着的道理。
四、无中生有
揭《寒江独钓》,整整揭了三个月,八百次。
当最后一层雾拂去,锦盒里那张灰纸,成了一幅寒江独钓图——孤舟、蓑翁、一江寒水,落款"周朴"。裴老爷当场老泪纵横。
消息传开,来了个不服气的人:城里另一位裱画名家,冷师傅。
冷师傅存心要拆台。他不拿旧画,而是当场取一张全新的白宣,抓起陆师傅那种灰粉,胡乱扑了几百层——扑得又匀又厚,压根不是照着任何一幅画弄脏的。就是一张纯粹的、底下什么都没有的灰纸。
"陆师傅,"冷师傅皮笑肉不笑,"这一张,你也揭一幅出来瞧瞧?"
阿墨心里�—沉:这纸底下根本没有画,师父这回要栽了。
陆师傅接过灰纸,看了一眼,什么也没说,坐下就揭。
一层。一层。又一层。
怪事发生了。灰纸上,竟一点一点浮出东西来——先是几道淡淡的线,接着是一座山的轮廓,然后是山脚一间茅屋,屋前一株老松……
八百层揭完,一幅《松屋秋色》端端正正躺在案上。笔意天成,像哪位古人失传的真迹。
冷师傅脸都白了:"这……这纸底下明明什么都没有!你从哪儿变出来的?!"
陆师傅把笔一搁:
"我说过,我从头到尾就没揭什么'原画'。我只是一层一层,把雾揭掉。雾底下原本有没有画,我不管——我只管,每揭一层,都让它更像一幅真画。"
"你这张纸,本来什么都不是。可我揭着揭着,它就不得不变成一幅画了——因为我这双手,只认得'一幅画该长什么样'。灰纸想赖着不变?揭到最后,由不得它。"
阿墨在旁边听得浑身发麻。他忽然想通了那件憋了三个月的事——
师父修画,和师父凭空造画,是同一双手,同一门功夫。
修一幅被雾吃掉的旧画,是从"有"里头,一层层把雾拂开,让它回来。
凭空造一幅新画,是从"无"里头,一层层把雾拂开,让它出现。
两件事看着天差地别。可在陆师傅手里,是一模一样的八百次拂拭。
那天收工,阿墨给师父点上灯。
"师父,我总算懂了。您三十年弄脏那几千幅画,不是白费功夫。"
"嗯。"
"您弄脏画,是为了学会怎么把画变干净。您把'变脏'这条路,来来回回走了几千遍,闭着眼都熟。回过头,'变干净'这条路,不过是把它反着走一遍。"
陆师傅点点头,望着案上那幅凭空揭出来的《松屋秋色》,眼神飘得很远。
"阿墨,天底下的能耐,多半是这么来的。你想学一件顶难的事——比如无中生有画出一幅画——直接学,学不会,太难了。"
"可你要是摸透了它是怎么一点点毁掉的,你就懂了怎么一点点把它救回来。"
"破坏是明摆着的,还原是藏起来的。可还原,不过是把破坏反着走一遍。"
灯下,那柄羊毫还沾着灰。窗外起了夜雾,一层,一层,轻轻落在金陵城上。
陆师傅看着窗外,忽然笑了:"你看这满城的雾。落得下,就揭得开。"
技术解读
扩散模型(Diffusion Models)是当前图像、视频、音频生成领域最主流的技术路线。从 Stable Diffusion、DALL·E 2 到 Midjourney、Sora,背后共同的数学骨架都是它。
这个思路最早由 Sohl-Dickstein 等人于 2015 年在《Deep Unsupervised Learning using Nonequilibrium Thermodynamics》中提出,灵感来自非平衡热力学中的扩散过程。真正让它变得实用的是 Ho、Jain、Abbeel 三人 2020 年的《Denoising Diffusion Probabilistic Models》(简称 DDPM),几乎同时期 Song 与 Ermon(2019)从"得分函数"角度给出了另一条等价的路径。2022 年 Rombach 等人的潜空间扩散(Latent Diffusion)把它推向了大规模落地。
扩散模型的核心思想有一种朴素的美感:与其教模型一步画出一张图(太难),不如教它一步步"去噪"。 先定义一个固定的、逐步给图像加噪声的"前向过程",直到图像变成纯粹的高斯噪声;然后训练一个神经网络去学习这个过程的逆——从噪声里,一步一步,把图像还原出来。而一旦学会了"去噪",从一团纯随机噪声出发反复去噪,就能凭空生成一张全新的、合理的图像。
核心概念回顾
| 概念 | 通俗解释 |
|---|---|
| 前向扩散过程(Forward Process) | 固定规则地、逐步向数据加入高斯噪声,经过 T 步后把一张图彻底变成纯噪声。这个过程没有可学习参数,是"已知的破坏" |
| 反向去噪过程(Reverse Process) | 从纯噪声出发,逐步去除噪声、恢复出图像。这一步是神经网络"学"出来的本事 |
| 噪声预测(ε-prediction) | DDPM 的关键设计:网络不直接预测"干净的原图",而是预测"当前这一步被加进去的噪声",再从含噪图中减掉它 |
| 时间步 T(Timesteps) | 加噪/去噪被拆成的步数,DDPM 中通常 T=1000。步数越多,每一步的变化越小、越好学 |
| 马尔可夫链(Markov Chain) | 每一步去噪只依赖当前这张含噪图的状态,不需要回顾更早的步骤 |
| 训练目标(Loss) | 极其简单:让网络预测的噪声,与实际加入的噪声之间的均方误差最小 |
| 采样 / 生成(Sampling) | 从纯高斯噪声起步,迭代 T 步去噪,最终得到一张全新样本 |
| 得分函数(Score) | ∇ₓ log p(x),指向"数据更可能出现"的方向。每一步去噪本质上是沿这个方向挪动 |
| 噪声调度(Noise Schedule βₜ) | 控制每一步加多少噪声的时间表,直接影响生成质量 |
| 条件生成 / 引导(Guidance) | 按文本、类别等条件来引导去噪方向,如文生图;classifier-free guidance 可增强对提示词的服从 |
故事中的隐喻对照
| 故事元素 | 映射的技术概念 | 解释 |
|---|---|---|
| 雾隐斋(修被雾吃掉的画) | 扩散模型 | 一套从"噪声"中恢复或生成图像的框架 |
| 一层层落上的"雾" | 高斯噪声 | 前向过程中逐步累加、最终淹没图像的噪声 |
| 陆师傅三十年亲手把好画弄脏、逐层记录 | 前向扩散过程 + 训练 | 因为"加噪"是已知规则,逆转它才可学;模型正是从大量加噪样本里学去噪 |
| "我不去想原画,只判断最上面这层雾" | 噪声预测(ε-prediction) | DDPM 不预测原图,只预测当前步的噪声,再减去——这是它最关键的重参数化 |
| 一层一层揭,绝不一把揭到底 | 迭代式反向去噪(T 步) | 把"噪声→图像"的难题拆成许多小步,每步是一次可学习的小高斯转移 |
| 阿墨一把揭到底,画毁了 | 单步生成之难 | 想一步从噪声跳到清晰图像极难学好,故必须多步小改 |
| 八百层雾 / 揭八百次 | 时间步数 T(约 1000) | 扩散被拆分的步数 |
| 揭当前这层只看当前这张脏画 | 马尔可夫性质 | 每步去噪只依赖当前状态,不回溯历史 |
| "每揭一层,让它更像一幅真画" | 得分函数(Score) | 每步沿数据分布对数概率的梯度方向移动,趋向高概率区域 |
| 弄脏的分寸(薄一层还是厚一层) | 噪声调度 βₜ | 控制每步加噪量的时间表 |
| 冷师傅的纯灰纸里揭出全新的《松屋秋色》 | 无条件生成 / 采样 | 从纯高斯噪声出发迭代去噪,凭空生成从未存在过的新图 |
| 裴老爷报出画名"寒江独钓" | 条件生成 / 文本引导 | 按提示引导去噪方向,如文生图与 classifier-free guidance |
| 在几千幅寻常画上练出的通用眼力 | 学到的是数据分布,而非死记单图 | 模型学到整个数据流形的结构,故能生成无穷多合理新样本 |
为什么这个故事对应扩散模型?
"加噪已知、去噪靠学"是扩散模型的双过程骨架。 陆师傅"弄脏画"是一套固定规则(前向过程,无参数),而"揭雾"才是真本事(反向过程,神经网络学出来)。DDPM 正是靠一个已知的破坏过程,为学习它的逆过程提供了源源不断的训练样本。
"只判断最上面这层雾、不去想原画"精确对应 ε-prediction。 DDPM 最关键的技巧,是让网络预测被加入的噪声,而非直接预测干净图像。陆师傅反复强调"我不猜原画,只认最上层的雾",说的正是这件事——预测噪声,再从含噪图中减去。
"一层一层揭,绝不一把揭到底"是扩散优于单步生成的根本原因。 把"纯噪声→清晰图像"这个几乎不可能一步学会的映射,拆成 T 个微小的、每步只需去掉一点点噪声的可学习转移。阿墨一把揭毁了画,正说明了单步跨越之难。
从纯噪声凭空生成新画,是扩散模型"生成"的本质。 冷师傅的灰纸底下本没有画,陆师傅却揭出一幅全新的《松屋秋色》——这对应从 N(0, I) 采样出一团噪声,再迭代去噪,生成一张训练集里从未出现过的图像。生成与修复,在数学上是同一套去噪流程。
训练来自"逆转已知的破坏过程",无需人工标注。 因为知道画是怎么被一层层弄脏的,才学得会怎么一层层变干净。这是一种自监督:不需要有人告诉模型"正确答案长什么样",加噪—去噪的配对自己就构成了监督信号。
报出画名对应条件引导。 裴老爷说出"寒江独钓",让修复有的放矢,对应文本/类别条件生成与 classifier-free guidance——同样一套去噪流程,可以被一个条件"牵引"着走向特定的结果。
在几千幅寻常画上练出的眼力,对应学到整个数据分布。 陆师傅练的不是某一幅名画,而是"画该长什么样"这件普遍的事。模型学到的也不是记住训练图,而是数据流形的结构,因此能生成无穷多张合理却全新的图像。
后记:扩散模型最动人的地方,在于它把"创造"这件看似神秘的事,还原成了一件可以一步步做的手艺——你不必一口气想出一幅完整的画,你只需要学会,在任何一片混沌里,认出那"多出来的一层雾",然后轻轻拂掉它。破坏是喧哗的、显而易见的;还原是安静的、藏在暗处的。可数学告诉我们,还原不过是把破坏反着走一遍。于是从一团纯粹的随机里,只要你认得"它该长什么样",一幅画就会不由自主地浮现出来。金陵城的夜雾还在落,一层,一层——落得下的,就揭得开。

