听松楼藏在青岩城北的松岗上,楼里收着一千零七幅名画。这楼的规矩怪:画,可以看,可以学,唯独不许带走一笔。楼里历代只传一个人"默画"的本事——闭着眼也能提笔作画,画的却不是哪一幅旧画,而是从没出现过、却与听松楼一脉相承的新画。

老楼主温听澜今年六十有九,膝下三个徒弟。立冬那日,他把三个徒弟叫到正堂,考题只有一句:"画一幅'春江月夜'。听松楼没藏过这个题,我要的是你们自己长出来的画,不是翻出来的。"

大徒弟岑默闭眼默背了半盏茶的功夫,蘸墨就画。他脑子是部活画谱,一千零七幅倒背如流,可"春江月夜"楼里确实没藏过。他咬了咬牙,挑了最像的一幅《浔阳秋江图》来改——月是临摹来的月,水是抄来的水,只在岸边添了两株柳。

温听澜只看了一眼,搁笔:"这是摹,不是画。"

二徒弟顾放哈哈一笑,提笔就泼,满纸烟云,边泼边嚷"心中无画,才能笔下无拘"。画完一看:墨团团里勉强认得出一个晕开的月亮,江呢?不知泼到哪儿去了。

温听澜叹了口气:"你这不是画,是纸受了潮。"

轮到小徒弟阿蘅。她自小替楼主磨墨晾画,看画看得最细,却不急着下笔。她闭上眼想了很久,落笔很慢,画到一半忽然停了。温听澜问怎么了,阿蘅攥着笔,脸有些红:"师父,我心里那幅画……它在晃。我拿不准该画浓一分,还是淡一分。"

一、楼里传的不是画,是一张藏本

温听澜没答话,带着三个徒弟进了楼后的藏本室。屋里只悬着一张丈二宣纸,纸上干干净净,一个墨点也没有。

"听松楼真正传的,从来不是那一千零七幅画。"温听澜抚着纸,"是这张藏本。"

岑默愣住了:"藏本?可这纸是空的。"

"正因为是空的,才装得下。"温听澜说,"你们以为'记住一幅画',是把它一五一十背下来。错了。真正读懂一幅画的人,心里留下的不是一个点,是一小团'晕'——这画浓淡几分、疏密几何、走势朝哪,读进心里,是一团有心的晕。一千零七幅画,就是一千零七团晕,全落在这同一张藏本上。画意相近的,晕与晕挨得近,甚至交叠在一起。"

岑默不服:"师父,我背了三千个日夜,一幅画在心里钉一个钉子,钉得又准又死——难道还不如一团晃来晃去的晕?"

"钉子准,可钉子与钉子之间是空的。"温听澜摇头,"藏本要的不是钉子,是晕与晕之间的路。两团晕中间的任何一点,都是一幅'没画过、却讲得通'的画。你心里只有一千零七个死点,点与点之间一步都迈不出去——所以新题一来,你只能回头抄最近的钉子。"

顾放插嘴:"那我心里每回都跟起了大雾似的,晕总够大了吧?"

温听澜瞪他:"晕不是越大越好!你把晕铺得比藏本还大,一千零七幅全糊成一片灰,从哪儿取一点都是四不像。"他蘸茶在桌上画了一个圈,"读画要两股劲一起使:一股把画读得准,还原得出那幅画的神;一股把晕收得住,别让它漫出该待的地方。又准、又收,这团晕才堪用。"

阿蘅小声问:"师父,可我一读画,那团晕自己会晃。今天读着浓些,明天读着淡些——是不是我心不静?"

温听澜笑了:"傻孩子,晃,是活气。真把画读成一个死点,你默出来的每幅画都是一个样,那是印,不是画。正因为晕会晃,你每回从晕里取出来的画才'似又不似',带着活气。你要练的从来不是'不晃',是'会取'。"

二、抖,要抖在手腕上,别抖在笔尖上

阿蘅的毛病,正卡在"取"字上。

她发现默画最难的一关是:心里那团晕明明在那儿,一到落笔就散。她取点靠"感觉"——感觉一来,手一抖,取出来的点就飞了,画出来满纸浮躁。连试七天,废了二十多张纸,画的月不是太实就是太虚。

温听澜站在她身后看了半晌,忽然开口:"你抖在哪儿?"

"抖在……笔尖上?"阿蘅自己也说不清。

"抖在笔尖上,是抖在结果上。"温听澜把一支秃笔塞进她手里,"你且试试:握笔的手腕,天生有一下轻颤——每个人与生俱来,画什么都带着它,改不掉,也不必改。现在,把这一颤'借'过来:先把你心里那团晕读定——读出它的'心',就是晕正中该有的浓淡;再读出它的'围',就是这团晕许你晃荡的边。取点时,不让心乱动,只让手腕那点天生的颤,按'围'的大小轻轻拨一下。拨多拨少,围说了算。"

阿蘅试了一笔。月,还是那个该有的月——可边上多了一丝极淡的云气,像月光自己呵出来的。

"成了。"温听澜点头,"你明白这一抖的妙处在哪儿吗?"

阿蘅想了很久:"妙在……那一抖跟画没关系?它是我的手腕天生的,画什么都带着它,所以它不会把画带偏?"

"对了一半。"温听澜竖起两根手指,"你再想:若你凭'感觉'乱抖,抖出来的点,跟你怎么读画有没有一丝干系?"

"没有……全凭运气。"

"所以师父没法教,你也没法改。你说'取淡些',那一抖是凭空来的,你改不动它——抖在结果上,改无可改。"温听澜顿了顿,"可若抖只来自手腕那点天生的颤,颤与画无关、人人都有,改不改它,画都在那里。真正定下这幅画的,是你读出来的'心'与'围'——这两样,师父能指点,你能修:今天心取浓三分,明天围收紧两分,一笔一笔都算得清账。抖在来路上,处处可教。"

阿蘅豁然开朗。原来默画那股说不清的"活气",不必靠运气去撞——把它安在一个与画无关、又人人皆有的地方,画的神韵依然由自己拿捏,活气却一分不少。

三、半幅残画,自己长出了右半边

腊月里,听松楼迎来真正的考题。

温家祖上藏过一幅《春江花月夜》,百年前一场大火焚去右半边,只留下左半:一江春水,潮平月出,岸边花林影影绰绰,题跋上留着半句"花林似霰——"。祖训传下:谁能让这幅画"自己长出"右半边,谁就是听松楼下一任楼主。

岑默大喜过望——他记得楼里有一幅月夜泛舟图,右半边正好是江心孤舟。他兴冲冲要把那半幅裁下来接上,被温听澜一把按住:"接,不是长。接上去的画是别人的骨头,不是这幅画的肉。"

顾放捋袖子要凭豪气一挥而就。泼了半宿墨,右半边倒是有江有月,可跟左半边的潮平气韵接不上榫,像两个人各画了一半。

轮到阿蘅。她没有急着动笔,先把左半幅"读"了整整一天。她读出的那团晕落在藏本上,恰好挨着历代好几幅月夜图的晕——那些晕之间,有路。她闭眼很久,取左半幅的"心"作骨,再从相邻那几团晕之间的路上,寻右半边的走势:花林该往哪儿漫、江流该往哪儿收、月色该往哪儿淡。落笔时,她只让手腕那点天生的轻颤,按晕的"围"轻轻拨了一拨。

右半边在她笔下慢慢长了出来:花林如霰,顺着左岸漫向江心;月影碎在潮头,又顺着水流淡进夜色。装裱师傅第二天来揭画,对着整幅《春江花月夜》端详了半晌,问:"这画……是整的?"

三个徒弟跪在正堂。温听澜把秃笔递给阿蘅,只说了两句话:

"画得准,是功夫;画得活,是让那点天生的颤,落在能教的地方。你从藏本上千幅画之间的路上,'长'出了这半幅画——听松楼往后,交给你了。"

阿蘅接过笔,望着那幅自己"长"出来的画,忽然明白师父那句口诀的分量。她轻声念道:

心里那团晕,是画的魂;手腕那点颤,是画的活气——魂要自己读,活气要借天生的。乱抖,抖丢了一幅画;会借,才画得出一千零七幅画之外的第一千零八幅。

技术解读

变分自编码器(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:把画读成"晕"(μ, σ),随机性借自与画无关的 ε 画 x 一千零七幅 读画(编码器) q(z|x) 读出心 μ 与围 σ 晕 + 借颤取点 z = μ + σ·ε ε ~ N(0,1) 天生手颤 落笔(解码器) 新画 x′ 重建损失:画得准(还原像) 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、扩散模型的无数枝叶。故事里温听澜传给阿蘅的那支秃笔,其实只教了一件事:真正的创造,从来不是把旧画记得更牢,而是学会从千幅画的路上,取一个从没到过的点——而那点活气,要借一双人人都有的、天生的手。