听松楼的默画人
听松楼藏在青岩城北的松岗上,楼里收着一千零七幅名画。这楼的规矩怪:画,可以看,可以学,唯独不许带走一笔。楼里历代只传一个人"默画"的本事——闭着眼也能提笔作画,画的却不是哪一幅旧画,而是从没出现过、却与听松楼一脉相承的新画。
老楼主温听澜今年六十有九,膝下三个徒弟。立冬那日,他把三个徒弟叫到正堂,考题只有一句:"画一幅'春江月夜'。听松楼没藏过这个题,我要的是你们自己长出来的画,不是翻出来的。"
大徒弟岑默闭眼默背了半盏茶的功夫,蘸墨就画。他脑子是部活画谱,一千零七幅倒背如流,可"春江月夜"楼里确实没藏过。他咬了咬牙,挑了最像的一幅《浔阳秋江图》来改——月是临摹来的月,水是抄来的水,只在岸边添了两株柳。
温听澜只看了一眼,搁笔:"这是摹,不是画。"
二徒弟顾放哈哈一笑,提笔就泼,满纸烟云,边泼边嚷"心中无画,才能笔下无拘"。画完一看:墨团团里勉强认得出一个晕开的月亮,江呢?不知泼到哪儿去了。
温听澜叹了口气:"你这不是画,是纸受了潮。"
轮到小徒弟阿蘅。她自小替楼主磨墨晾画,看画看得最细,却不急着下笔。她闭上眼想了很久,落笔很慢,画到一半忽然停了。温听澜问怎么了,阿蘅攥着笔,脸有些红:"师父,我心里那幅画……它在晃。我拿不准该画浓一分,还是淡一分。"
一、楼里传的不是画,是一张藏本
温听澜没答话,带着三个徒弟进了楼后的藏本室。屋里只悬着一张丈二宣纸,纸上干干净净,一个墨点也没有。
"听松楼真正传的,从来不是那一千零七幅画。"温听澜抚着纸,"是这张藏本。"
岑默愣住了:"藏本?可这纸是空的。"
"正因为是空的,才装得下。"温听澜说,"你们以为'记住一幅画',是把它一五一十背下来。错了。真正读懂一幅画的人,心里留下的不是一个点,是一小团'晕'——这画浓淡几分、疏密几何、走势朝哪,读进心里,是一团有心的晕。一千零七幅画,就是一千零七团晕,全落在这同一张藏本上。画意相近的,晕与晕挨得近,甚至交叠在一起。"
岑默不服:"师父,我背了三千个日夜,一幅画在心里钉一个钉子,钉得又准又死——难道还不如一团晃来晃去的晕?"
"钉子准,可钉子与钉子之间是空的。"温听澜摇头,"藏本要的不是钉子,是晕与晕之间的路。两团晕中间的任何一点,都是一幅'没画过、却讲得通'的画。你心里只有一千零七个死点,点与点之间一步都迈不出去——所以新题一来,你只能回头抄最近的钉子。"
顾放插嘴:"那我心里每回都跟起了大雾似的,晕总够大了吧?"
温听澜瞪他:"晕不是越大越好!你把晕铺得比藏本还大,一千零七幅全糊成一片灰,从哪儿取一点都是四不像。"他蘸茶在桌上画了一个圈,"读画要两股劲一起使:一股把画读得准,还原得出那幅画的神;一股把晕收得住,别让它漫出该待的地方。又准、又收,这团晕才堪用。"
阿蘅小声问:"师父,可我一读画,那团晕自己会晃。今天读着浓些,明天读着淡些——是不是我心不静?"
温听澜笑了:"傻孩子,晃,是活气。真把画读成一个死点,你默出来的每幅画都是一个样,那是印,不是画。正因为晕会晃,你每回从晕里取出来的画才'似又不似',带着活气。你要练的从来不是'不晃',是'会取'。"
二、抖,要抖在手腕上,别抖在笔尖上
阿蘅的毛病,正卡在"取"字上。
她发现默画最难的一关是:心里那团晕明明在那儿,一到落笔就散。她取点靠"感觉"——感觉一来,手一抖,取出来的点就飞了,画出来满纸浮躁。连试七天,废了二十多张纸,画的月不是太实就是太虚。
温听澜站在她身后看了半晌,忽然开口:"你抖在哪儿?"
"抖在……笔尖上?"阿蘅自己也说不清。
"抖在笔尖上,是抖在结果上。"温听澜把一支秃笔塞进她手里,"你且试试:握笔的手腕,天生有一下轻颤——每个人与生俱来,画什么都带着它,改不掉,也不必改。现在,把这一颤'借'过来:先把你心里那团晕读定——读出它的'心',就是晕正中该有的浓淡;再读出它的'围',就是这团晕许你晃荡的边。取点时,不让心乱动,只让手腕那点天生的颤,按'围'的大小轻轻拨一下。拨多拨少,围说了算。"
阿蘅试了一笔。月,还是那个该有的月——可边上多了一丝极淡的云气,像月光自己呵出来的。
"成了。"温听澜点头,"你明白这一抖的妙处在哪儿吗?"
阿蘅想了很久:"妙在……那一抖跟画没关系?它是我的手腕天生的,画什么都带着它,所以它不会把画带偏?"
"对了一半。"温听澜竖起两根手指,"你再想:若你凭'感觉'乱抖,抖出来的点,跟你怎么读画有没有一丝干系?"
"没有……全凭运气。"
"所以师父没法教,你也没法改。你说'取淡些',那一抖是凭空来的,你改不动它——抖在结果上,改无可改。"温听澜顿了顿,"可若抖只来自手腕那点天生的颤,颤与画无关、人人都有,改不改它,画都在那里。真正定下这幅画的,是你读出来的'心'与'围'——这两样,师父能指点,你能修:今天心取浓三分,明天围收紧两分,一笔一笔都算得清账。抖在来路上,处处可教。"
阿蘅豁然开朗。原来默画那股说不清的"活气",不必靠运气去撞——把它安在一个与画无关、又人人皆有的地方,画的神韵依然由自己拿捏,活气却一分不少。
三、半幅残画,自己长出了右半边
腊月里,听松楼迎来真正的考题。
温家祖上藏过一幅《春江花月夜》,百年前一场大火焚去右半边,只留下左半:一江春水,潮平月出,岸边花林影影绰绰,题跋上留着半句"花林似霰——"。祖训传下:谁能让这幅画"自己长出"右半边,谁就是听松楼下一任楼主。
岑默大喜过望——他记得楼里有一幅月夜泛舟图,右半边正好是江心孤舟。他兴冲冲要把那半幅裁下来接上,被温听澜一把按住:"接,不是长。接上去的画是别人的骨头,不是这幅画的肉。"
顾放捋袖子要凭豪气一挥而就。泼了半宿墨,右半边倒是有江有月,可跟左半边的潮平气韵接不上榫,像两个人各画了一半。
轮到阿蘅。她没有急着动笔,先把左半幅"读"了整整一天。她读出的那团晕落在藏本上,恰好挨着历代好几幅月夜图的晕——那些晕之间,有路。她闭眼很久,取左半幅的"心"作骨,再从相邻那几团晕之间的路上,寻右半边的走势:花林该往哪儿漫、江流该往哪儿收、月色该往哪儿淡。落笔时,她只让手腕那点天生的轻颤,按晕的"围"轻轻拨了一拨。
右半边在她笔下慢慢长了出来:花林如霰,顺着左岸漫向江心;月影碎在潮头,又顺着水流淡进夜色。装裱师傅第二天来揭画,对着整幅《春江花月夜》端详了半晌,问:"这画……是整的?"
三个徒弟跪在正堂。温听澜把秃笔递给阿蘅,只说了两句话:
"画得准,是功夫;画得活,是让那点天生的颤,落在能教的地方。你从藏本上千幅画之间的路上,'长'出了这半幅画——听松楼往后,交给你了。"
阿蘅接过笔,望着那幅自己"长"出来的画,忽然明白师父那句口诀的分量。她轻声念道:
心里那团晕,是画的魂;手腕那点颤,是画的活气——魂要自己读,活气要借天生的。乱抖,抖丢了一幅画;会借,才画得出一千零七幅画之外的第一千零八幅。
技术解读
变分自编码器(Variational Autoencoder, VAE) 是生成模型家族的基石之一,由 Diederik Kingma 与 Max Welling 在 2013 年的论文 Auto-Encoding Variational Bayes 中提出。它的思路与故事里的"藏本"几乎一一对应:训练时把大量样本(一千零七幅画)交给一个编码器(Encoder),每个样本被压缩成潜空间(latent space)里的一个低维表示——不是压缩成一个确定点,而是压成一个概率分布(一团"晕");然后一个解码器(Decoder) 从这个分布里取点,把样本重建回来。
难点在于"取点"这件事怎么让梯度流过去。若直接从分布 N(μ, σ²) 里采样,采样操作本身不可导,误差无法反传回编码器。Kingma & Welling 的重参数化技巧(reparameterization trick) 解决了它:把随机性"外包"给一个与输入无关的标准正态噪声 ε ~ N(0,1),令 z = μ + σ·ε——随机性来自 ε("手腕天生的颤"),而 μ 与 σ 是可学习、可微分的("能教、能改的心与围")。模型用重建损失逼解码器还原得像,用 KL 散度 逼编码分布贴近标准正态先验("收住晕,别漫出藏本"),两者合起来就是 ELBO 目标。
核心概念回顾
| 概念 | 通俗解释 |
|---|---|
| 变分自编码器 VAE | 编码器把样本压成潜分布、解码器从分布取点重建的生成模型 |
| 潜空间 latent space | 所有样本的"压缩表示"共享的连续底稿,相近样本挨得近 |
| 编码器 Encoder | 把输入 x 读成潜分布参数 μ 与 σ("读画") |
| 解码器 Decoder | 从潜变量 z 还原/生成样本("落笔") |
| 重参数化技巧 | z = μ + σ·ε,把随机性外包给与输入无关的 ε,使采样可导 |
| 重建损失 | 逼解码器把 z 还原得像原样本("画得准") |
| KL 散度 | 逼编码分布贴近标准正态先验,防止潜空间无序发散("收住晕") |
| ELBO | 重建损失与 KL 散度之和,VAE 的训练目标 |
| 先验 N(0,1) | 藏本自身的"标准底"——所有晕都该落在这张底附近 |
| 潜空间插值 | 两团晕之间的任一点都是合理新样本("晕与晕之间的路") |
| 后验坍缩 | KL 项压制过强时解码器忽略 z,生成退化(晕被收没了) |
| 直接采样不可导 | 从 N(μ,σ²) 直接抽样,梯度断在采样处(乱抖改无可改) |
故事中的隐喻对照
| 故事元素 | 映射的技术概念 | 解释 |
|---|---|---|
| 听松楼一千零七幅名画 | 训练数据集 | VAE 的输入样本集合 |
| 藏本(空白的丈二宣纸) | 潜空间 latent space | 所有压缩表示共享的连续底稿 |
| "读懂一幅画,心里留一团晕" | 编码器输出概率分布 q(z|x) | 每个样本编码成 μ 与 σ 定义的分布 |
| 晕的"心"(正中浓淡) | 均值 μ | 潜变量的主位置,决定画的神韵 |
| 晕的"围"(许晃的边) | 方差 σ | 不确定性大小,决定取点能偏多远 |
| "每回读画,晕自己会晃" | 采样的随机性 | 同一输入每次生成略有不同,是生成模型的多样性来源 |
| 岑默的"死钉子"记画法 | 确定性自编码器(无变分) | 压缩成确定点,点间无路,不能生成新样本 |
| 顾放的"大雾" | σ 无约束 / 无 KL 正则 | 潜分布发散,取哪点都生成不出有意义内容 |
| "又准又收两股劲" | 重建损失 + KL 散度(ELBO) | 还原得像,同时潜空间保持有序紧凑 |
| "晕与晕之间的路" | 潜空间连续性 / 插值 | 两个表示之间任意点都是合理样本 |
| 取点 | 从潜分布采样 z | 每次生成从分布中抽一个潜变量 |
| 手腕天生的轻颤 ε | 重参数化的标准正态噪声 ε~N(0,1) | 与输入无关的随机源,人人皆有 |
| "拨多拨少,围说了算" | z = μ + σ·ε | 噪声按 σ 缩放后加到 μ 上 |
| 乱抖在笔尖 = 抖在结果上 | 直接从分布采样(不可导) | 随机性堵在采样处,梯度无法反传,模型学不动 |
| 巧抖在手腕 = 抖在来路上 | 重参数化技巧 | 随机性外包给 ε,μ/σ 保持可导,能训练能修正 |
| "心与围能教、能改" | μ、σ 由神经网络学习 | 编码器参数可被梯度更新 |
| 补出残画右半边 | 潜空间采样后解码生成 | 从分布取点生成全新样本,而非检索拼接 |
| "长出来,不是接上去" | 生成而非检索 | 解码器合成新内容,区别于数据库式拼接 |
为什么这个故事对应 VAE?
- 因为把一幅画记成一个"点"就丢了生成能力,必须记成一团"晕",所以 VAE 用概率分布而非确定向量做潜表示——岑默的钉子是普通自编码器,阿蘅的晕才是变分自编码器。
- 因为从分布"取点"这件事本身不可导,误差传不回编码器,所以要把随机性外包给一个与输入无关的 ε,让 z = μ + σ·ε——"手腕天生的颤"正是重参数化技巧:颤人人有、与画无关,μ 与 σ 才保得住可导、可学。
- 因为只求"还原得像"会让潜空间退化成无序的编码本,所以必须加 KL 散度把每团晕收向标准先验——"读得准"与"收得住"两股劲合起来,正是 ELBO 目标。
- 因为晕与晕之间是连续的,中间任一点都对应一幅合理新画,所以 VAE 能在潜空间插值、生成训练集里不存在的新样本——阿蘅补出的右半边来自"千幅画之间的路",而不是裁一幅旧画来"接"。
- 因为直接采样时梯度断在采样处("抖在结果上,改无可改"),而重参数化后梯度能沿 μ、σ 流回编码器("抖在来路上,处处可教"),所以重参数化技巧是 VAE 能端到端训练的前提。
- 因为 σ 决定每回取点偏离"心"多远,所以同一幅画每次生成都"似又不似"——"晕会晃是活气",正是生成模型多样性(而非死记硬背)的来源;而 KL 若压得过狠,晕被收没、解码器无视 z,生成退化成均值复读,这便是 VAE 著名的"后验坍缩"困境。
后记:VAE 是生成模型的"地基课"——它教会了后来者两件事:生成不该背样本,而该学样本背后的"分布";随机性不必靠玄学,把它安在可导的地方,模型就能自己学会"怎么活"。这两件事后来长出了 CVAE、VQ-VAE、扩散模型的无数枝叶。故事里温听澜传给阿蘅的那支秃笔,其实只教了一件事:真正的创造,从来不是把旧画记得更牢,而是学会从千幅画的路上,取一个从没到过的点——而那点活气,要借一双人人都有的、天生的手。

