Z Tech|师从何恺明,专访 MIT 博士生邓明扬:从 IMO 金牌、IOI 满分的竞赛少年到生成模型研究者


邓明扬现为 MIT 博士生,师从何恺明,主要研究生成模型。本科期间,他在 MIT 学习数学与计算机科学,也曾在 DeepMind 和 Meta 实习。更早之前,他曾获得 IMO 金牌和 IOI 金牌。2026 年,他以第一作者发表了 Drifting Models,尝试探索一种不同于传统路径的生成建模思路。
本期访谈,我们有幸邀请到了邓明扬。和他聊了聊他从竞赛到研究的经历,以及他对理论研究、生成模型和 AI 发展的一些看法。除了个人经历之外,访谈也涉及不少更具体的技术问题。
此外,邓明扬在与 ZP 飞行 Host 柴文浩的对谈中,还讨论了双方各自关注的研究方向与一些技术想法。话题主要围绕两个方面展开:一是如何让模型更好地处理和共享人类经验,包括 long context 与多模态输入;二是对生成模型范式的一些思考,例如是否应摆脱 diffusion、如何引入可扩展计算,以及语言与视觉统一建模的可能性。
Z Highlights
“我从竞赛中学到一个很重要的道理:很多问题其实没有想象中那么深奥。我最大的体会是世界其实是一个草台班子。也就是说,并不存在某种特别神秘、只有少数人才能想到的解法。”
“AI 给我一种创造东西的感觉……你写一些代码,然后它真的变成一个可以运行的系统,这种感觉会让我很开心。”
“在长期来看,很多结果其实是由噪声主导的,而不是你一开始看到的信号……很多重大进展,其实也是由这种黑天鹅事件推动的,而不是线性、可预测的演进。”
“很多 research 问题并不是通过讨论就能得出答案的。在那里反复讨论一个 idea,很多时候没有用……相比辩论,更重要的是去试。”
“人类有一种很特别的能力是 AI 还不具备的,可以叫做一种 few-shot 的泛化能力……未来人类的价值,可能就在于这种基于有限经验进行 generalization 的能力。”
“我更倾向于把 machine learning 看成是在点技能树……每一步是在点一个新的技能,最后这些技能会融合在一起,让模型变得非常强大。”
“我有一个比较暴论的看法是,很多问题的瓶颈,其实不在于模型的 capacity,而在于 optimization。也就是说,做某个任务的正确模型可能早就存在了,但问题在于怎么把这个模型训练出来。”
我们也将这些片段完整整理出来,供大家更加直观感受一线研究者们在真实语境中的思考与碰撞,enjoy!
ZP:欢迎明扬,非常高兴今天能与你交流。请你先按时间顺序向大家介绍一下自己。
邓明扬:大家好,我是邓明扬,现在是 MIT 二年级的 PhD,主要做生成模型。本科也是在 MIT 读的,本科阶段尝试过很多不同的方向,最后才决定做 machine learning,因为觉得这个方向特别适合自己。我高中是在国内读的,也是到了本科才出国。
ZP:你在高中阶段同时获得 IMO 和 IOI 金牌,这在全球都非常罕见。那个时期的你,为什么会走上竞赛道路?是天赋驱动、兴趣驱动,还是环境因素?
邓明扬:其实我走上计算机竞赛这条路是很自然的。因为我小时候特别喜欢写游戏,虽然当时还没有 AI,也不太会写代码,但我会自己去读一些比较基础的教材,然后尝试写一些能跑起来的东西。我觉得最有趣的地方在于:你有一个想法,然后这个想法可以在电脑上变成一个真实运行的东西,那种感觉特别有意思。所以我就一直在学编程。当时班里会编程的人很少,老师看到有人会写代码,就会把你拉去参加计算机竞赛,这个过程其实非常自然。
至于数学竞赛,更多是因为班上同学都在参加,我就跟着一起凑热闹。回过头来看,我觉得自己高中时期在竞赛上其实是比较 underfit,并没有特别系统、认真地去把该学的内容学扎实,更多是抱着玩的心态在做。但我从竞赛中学到一个很重要的道理:很多问题其实没有想象中那么深奥。我最大的体会是世界其实是一个草台班子。也就是说,并不存在某种特别神秘、只有少数人才能想到的解法。大多数题目,只要你认真去观察,把你能看到的所有性质列出来,再尝试把这些性质拼接起来,就有可能得到解法。
ZP:你本科在 MIT 同时主修数学和 EECS,最初对理论计算机科学非常投入,也发表了多篇 SODA、ICALP 论文。后来是什么契机让你逐渐转向了生成模型和 AI?
邓明扬:我本科的时候做过 TCS(ZP 注:理论计算机科学,Theoretical Computer Science)和数学,后来又做了 AI。从后来看,我个人在这三个学科做 research 的体验是很不一样的。如果打一个比方的话,我觉得 TCS research 更像是谈恋爱,做 TCS 的时候感觉自己生活在一个粉红色的泡泡里,觉得自己做的东西非常精妙,也能从中获得很多乐趣。这种乐趣其实很难对外人解释,他们也不太关心这个问题有没有很大的 impact,或者它在现实世界中的意义是什么,更重要的是在研究过程中获得的那种内在快乐。
数学的话,更像是科学家在发现真理。你会感觉自己在探索世界的一些基本维度,比如我本科做的是组合数学,其中有一些很有趣的点,比如傅立叶变换。你会发现,很多看起来完全不同的数学现象可以用一种完全不同的语言去描述。比如从频谱的角度来看问题,你会得到一种新的观察世界的方式。数学研究的魅力在于,它会告诉你世界的另一个维度,让你感觉自己在发现某种真相。
而 AI,更像是在闹革命。大家有很多不同的路线,每天都在争论哪条路线是对的,有的路线最后会成功,有的会失败。在这个过程中,大家对自己的研究方向是非常有执念的,会很在意自己是不是站在正确的那条革命路线上。相比之下,TCS 更像是自己开心就好,数学是在发现世界的真理,而 AI 则是在押注未来的方向,这是一个很不一样的思维方式。
ZP:那你觉得这种差异,是因为学科本身的不同,还是因为 AI 还处在一个比较混沌的发展阶段?
邓明扬:我觉得两方面都有可能。AI 现在确实处在一个比较混沌、快速发展的阶段,所以会有很多不同的路线在竞争。但另一方面,我觉得不同学科的人本身的世界观也确实不一样。比如在我接触的 TCS 方向中,我感觉做出巨大突破很有难度,所以大家更倾向于在自己喜欢的问题上深入钻研。所以我猜这种差异一部分来自学科的发展阶段,一部分来自这个领域长期形成的文化。
对我自己来说,一个很重要的原因是我不太喜欢纯理论。我觉得这个世界上,能够被严格证明的真理其实是非常有限的,但你能感受到的真理是非常多的。有很多道理,它更像是一种感觉或者一股劲,你很难把它完全用数学形式证明出来。但在数学和 TCS 里,你的结论必须是可以被严格证明的,写在纸上的,大家才会承认它。而在 AI 里,只要你通过实验观察到一些现象,并且你直觉上觉得它是对的,哪怕不能完全说服所有人,你也可以逐渐建立起自己的理解体系。这种通过直觉和实验去理解世界的方式让我觉得很有吸引力。而且这种方式,让你发现规律的速度,比依赖严格证明的学科要快很多。
还有一点是,AI 给我一种创造东西的感觉,就像我小时候写游戏一样。你写一些代码,然后它真的变成一个可以运行的系统,这种感觉会让我很开心。当然,我在做数学和 TCS 的时候也会觉得很快乐,但那种快乐更像是事后回想起来觉得挺开心的,而不是当下那种很强烈的创造感。
ZP:你早期在组合数学和算法方面的工作虽然和现在生成模型方向不同,但这些训练是否在你后来的研究中产生了影响?
邓明扬:我觉得有几个比较重要的点。首先是,我发现不同人的第一直觉是非常不一样的。也就是说,面对同一个问题,每个人最初的观察点和切入方式可能完全不同。早期经历让我形成了一个习惯:要尽量去感受不同人的观察方式,理解他们在想什么,然后把这些不同的 observation 融合在一起。很多时候,一些看起来零散、甚至有点莫名其妙的观察拼在一起之后就能 work。这也影响了我现在做 research 的方式。比如在 AI 领域,大家每天都会有很多不同的观点、不同的论据,我会比较习惯去看大家在辩什么,然后把这些东西吸收进来形成自己的理解。
我还形成了一个世界观是,大家其实菜得旗鼓相当(笑)。也就是说,大多数问题并不是只有极少数天才能解决的。很多问题,其实都存在一些相对简单的 observation,只要你把这些 observation 找出来,再和别人一起交流,把不同人的想法拼在一起,就能逐渐找到解题的方向。所以在方法论上,我现在也更倾向于和人多交流,去了解大家的第一感觉,然后把这些想法拼在一起。
ZP:如果让你给现在还在打竞赛的学生一些建议,比如在 AI 已经很强的背景下,他们做竞赛的意义或者未来学习和研究方向该如何规划?
邓明扬:关于竞赛的意义,我自己的经历其实是把它当作一件好玩的事情。当时我并没有投入特别多时间,更多是觉得它本身挺有趣的,甚至某种程度上是把它当成一个逃课的理由,去做一些自己更感兴趣的事情。但从结果来看,竞赛确实可以成为青春的一部分,如果你在过程中感到有趣,就会留下很多快乐的记忆,这本身就是一件很有价值的事情。
从能力培养的角度来看,我觉得竞赛其实在某种意义上是在做人类的 representation learning。它会训练你在 few-shot 场景下进行观察和归纳的能力,让你更容易从有限的信息中做出有效的判断。这种能力并不是某一个具体的技能点,而是一种更抽象的表征能力,而且我个人感觉它是可以泛化的,对之后做很多事情都会有帮助。
另外,我觉得最重要的一点还是要享受竞赛本身。在职业发展的角度上,我会觉得竞赛圈里有一种比较强的路径依赖或者 tendency。比如做信息学竞赛(OI)的人,往往会继续做 TCS;做数学竞赛的人,往往会继续走数学方向。回过头看自己的经历,我个人的体会是,其实不用那么早就把自己框定在某个路径里。进入大学之后,反而是一个很好的契机去探索不同的方向,能够感受自己到底对什么最感兴趣。因为很多时候,我们最开始接触并以为自己喜欢的东西,和最后真正契合自己的,可能并不完全是一回事。
整体来说,我会觉得竞赛更多还是图一乐。它可以带来一些旅行的机会,让你做自己喜欢的事情,同时锻炼一些抽象能力,比如 representation learning。至于竞赛成绩本身其实不必看得太重,本质上还是一种兴趣驱动的事情。
ZP:从竞赛到真正的研究,比如 TCS research,二者之间的 gap 大吗?竞赛能力强的人,对做研究有没有直接帮助?对于模型来说也是类似的问题,如果一个模型竞赛能力很强,它对做前沿研究会有帮助吗?
邓明扬:我自己的感受是,如果你去做 TCS 方向的研究,其实和竞赛的衔接是比较自然的。因为在很多情况下,TCS 的研究过程和做竞赛题是有相似性的,你面对的是一个相对 well-defined 的问题,然后你的目标是提出一个比前人更优或者更聪明的解法。从这个角度来看,两者之间的 gap 并不大,这也是为什么很多竞赛选手会倾向于继续做 TCS,我当时也有类似的感觉。
但如果是和 machine learning research,或者更偏数学研究相比,这个 gap 就会明显大很多。虽然竞赛中训练出来的一些能力,比如做观察(observation)的能力,是可以泛化的,但真正做研究时,一个很关键的点在于你需要自己决定什么问题是重要的。而在竞赛中,这一点其实并不被考察,因为题目已经给你了,你只需要去解。
除此之外,在方法论或者世界观层面,也有一些可以泛化的东西。比如我当时做竞赛时,很喜欢写一些 heuristic,就是你不完全知道它为什么有效,但实际跑起来是有效的。我觉得这种思维方式在研究中是可以迁移的。某种意义上,我甚至觉得做 research(尤其是 machine learning research)不需要那么严谨,更重要的是你能不能感受到某种规律或者直觉。
反而在竞赛中,大家通常会更严谨一些。如果你在竞赛阶段就非常严谨,那么到了研究阶段可能需要在世界观上做一些调整。总体来说,竞赛训练出来的一些直觉和观察能力是有价值的,但研究和竞赛在问题选择这一点上有本质区别。
ZP:你本科在 MIT 做 research,后来又去了 DeepMind、Meta 等工业实验室实习。你觉得学术界和工业界的研究风格最大的不同是什么?对你个人而言,你更享受哪种节奏?
邓明扬:整体来说,我觉得工业界有一个很明显的好处,就是你能接触到非常前沿的东西。你会知道当前的 state-of-the-art 是什么样的,大家在做哪些方向。比如我当时在 Google DeepMind 做 IMO(ZP 注:国际数学奥林匹克竞赛)相关的工作,隔壁组很快就做出了 IMO 银牌水平的成果,这种进展会让你很直观地感受到这个领域在往哪里走、大家在怎么推进。但与此同时,我也感觉在工业界,每个人的个人贡献感相对会小一些。因为很多时候是把很多人的想法拼在一起,最终形成一个很强的系统。它的好处是,大家的 observation 被整合之后,可以做出非常强的成果;但坏处是,每个人可能只负责其中的一小部分,比如某个模块或组件,所以个体在整个系统中的占比会比较小。
相比之下,在学术界,你可能需要从 infra 到代码再到具体问题,全都自己来做。也就是说,一个人要对整个系统负责的部分会更多。所以两者的区别某种程度上在于,你是作为一个大系统中的一部分,还是作为一个从头到尾负责整体的人。
ZP:你觉得现在 AI research,比如大模型的发展,这种工业界集体拼接贡献的模式已经足够了吗?还是说像学术界这种从零开始、端到端的研究仍然是必要的?
邓明扬:我觉得把大家的贡献拼在一起,这件事本身是非常强的,这样做出来的系统一定会很厉害。但我有一个比较极端的观点:我感觉人类对未来不确定性的估计是偏小的。我小时候玩过一个桌游叫 Camel Up(叠骆驼),里面有一个玩法是赌哪只骆驼最后会赢。很多数学 PhD 第一次玩的时候,都会觉得当前领先的骆驼最终也会赢。但实际上,因为过程中存在很多随机事件,最终结果往往是黑天鹅主导的,而不是一开始的领先优势。
这件事让我觉得,在长期来看,很多结果其实是由噪声主导的,而不是你一开始看到的信号。类比到科技发展上,我觉得很多重大进展,其实也是由这种黑天鹅事件推动的,而不是线性、可预测的演进。比如在某个时期,大家都觉得 SVM 很有前景,但突然有一天 AlexNet 出现了,一下子改变了整个方向。历史上这种事情发生过很多次。
所以我会觉得,学术界仍然是有意义的。因为如果你在赌黑天鹅,那其实每个人成功的概率是差不多的,它本质上是不可预测的。如果学术界的 temperature 更高一些,也就是说,大家更愿意尝试各种不那么主流的方向,反而更有可能撞到那个关键的突破点。而工业界可能更倾向于做那些看起来更有希望的方向。从长期来看,我会觉得 noise dominate signal,也就是说现在看起来很重要的方向,不一定在未来仍然重要。如果你愿意在更高 temperature 的分布里探索,反而可能更容易命中那个真正有效的方向。
ZP:如果是你现在做选择,比如实习或者未来工作,你会更倾向于大厂还是创业公司?
邓明扬:如果是实习的话,我觉得去大厂挺好的,因为你可以学到很多东西,也可以了解不同公司的文化,以及他们在做什么。至于毕业之后,我现在更关心的是,我的 research 能不能产生更大的 impact。但这个目标具体在哪个环境下更容易实现,我现在还在思考,也不确定未来是否会一直留在学术界。
ZP:你在多家大厂实习后,最终选择回到 MIT 跟随 Kaiming He 读博。Kaiming 老师的哪一点吸引了你?
邓明扬:如果是在读 PhD 之前来看的话,我当时觉得恺明有几个很吸引我的点。(ZP 注:何恺明为人工智能科学家,Facebook AI Research(FAIR)研究科学家,MIT 电气工程与计算机科学系副教授,兼任谷歌 DeepMind 杰出科学家)第一是,他有一些我当时完全不具备的能力,比如如何做实验。我在比较早期的时候,其实是一个偏理论背景的人,很多时候是拍脑袋想问题,但不知道怎么把实验真正做好,或者如何从实验中获得直觉。这些都是我当时很需要学习的能力。
第二点是,当时恺明刚好在 MIT 开始做 PI。作为课题组的第一届学生,我觉得和导师之间的联结会比较深。这种“共同起步”的机会非常难得。
现在回过头来看,我觉得更重要的一点是,恺明一直很为学生着想。我现在觉得,选择 PhD 导师最重要的一点之一,是他是否真的关心学生。恺明在这方面做得很好,比如他会很支持大家去找实习,也会跟我讨论未来该做什么、毕业之后的方向。有时候我会向他请教一些人生问题,他也会给我一些建议。这些都是我事后才意识到,非常重要的点。
在 research 方面,我觉得恺明现在依然非常 sharp。他对 research 有很好的判断力,而且作为上一代的研究者,他知道很多历史背景,比如过去某些方向是怎么发展起来的。这些经验会帮助你看到一些你自己可能感受不到的东西,相当于提供了一些额外的 observation。
另外还有一些世界观上的影响。比如他会觉得,很多时候辩论是辩不明白问题的。这点其实现在也成为了我自己的一个信念:很多 research 问题并不是通过讨论就能得出答案的。在那里反复讨论一个 idea,很多时候没有用。因为在我看来,世界长期是由黑天鹅主导的。一个方法有时候会莫名其妙地 work,而这种事情是无法通过事前讨论预测出来的。
所以相比辩论,更重要的是去试。你需要真的去做实验,然后认真观察结果,而不是靠讨论得出结论。我小时候其实很喜欢辩经,每天都在讨论各种 idea。但现在我越来越觉得,真正有价值的是那些你事先完全想不到、但实验中出现的结果,这些东西才最有意思。
ZP:我们来聊聊 AI 时代对科研的改变。你平时是怎么把 AI 融入自己的 research workflow 的?现在大家都会用一些 AI coding 工具,对于写代码效率提升很大。你平时用 AI coding 的比例有多高?以及你觉得现在 AI 距离自动科研(auto research)还有多大差距?
邓明扬:我现在其实还在学习怎么用 AI coding,不过最近用得已经非常多了。像 Codex 和 Claude Code 出来之后,体验和之前确实完全不一样。在它们出现之前,我其实已经算是比较早用 Copilot 或 Cursor 的人了,但当时这些工具更多还是帮你写一些细节代码,大的结构、整体架构还是需要自己来设计。但现在不一样了,现在很多比较大的模块,它们也可以直接写出来,我更多是在做 review,比如看它们的 plan,对整体方向进行把控。我觉得现在在代码层面,自动化已经做得非常强了。当然它们有时候品味(taste)会比较杂,需要我去调教一下,让它更符合我自己的风格。
关于 AI 能不能取代科研,这其实是我最近一直在思考的问题。大家现在多少都有一点存在主义危机。我目前的一个直觉是,人类有一种很特别的能力是 AI 还不具备的,可以叫做一种 few-shot 的泛化能力。人类的能力并不是来自一个巨大的预训练数据库。你刚出生的时候其实什么都不会,甚至连语言都没听过。但在短短的人生经历中,你可以基于非常有限的数据,做出很强的泛化。我觉得人类是非常依赖自身经历的 context 的。很多能力其实是从你个人的经历中长出来的。而现在的模型大部分能力还是来自于 pre-training。两者在本质上是有差异的。
这种差异在一些 data 很稀疏的场景下会更明显。比如你要做出某种信仰之跃(leap of faith),或者提出一个全新的想法,这些事情往往不是基于大量数据训练出来的。人类有时候可以在很少的数据下,通过一些直觉或经验,做出很大胆的推断。我觉得这可能是一种进化赋予的能力。所以未来人类的价值,可能就在于这种基于有限经验进行 generalization 的能力。
还有一类情况是,有些东西其实是没有道理但就是 work。你可能再聪明也无法通过推理提前知道它会 work。有些方法背后当然可能有原因,但在当下这个时间点,没有人能解释清楚。它就是某一天被试出来了。我觉得在这种情况下,作为 researcher,你可能只是恰好 bet 对了。而这种 bet,不管是人还是 AI,都未必能做得更好,因为它本质上可能就是不可预测的。
即使未来 AI 也具备灵光一现的能力,可能仍然有一些东西是 inherently random 的,有些事情就是怎么想都想不明白,只能靠尝试。所以不管是人还是 AI,在某些问题上本质上都只能撞运气。
你现在主要在做什么方向的研究?是与 long context 相关的吗?
ZP:我现在的核心想法是两个方向。第一是关于 long context,尤其是多模态的 long context。我现在的理解是,像 coding agent 或者语言模型之所以很强,一个很重要的原因是它们可以通过代码和终端访问到完整的 codebase,包括 git history、commit、branch 等等。这意味着它们能够看到的信息比人类更全面、更细致,从而在某种程度上具备替代性。
但对于人类生活中的很多事情,比如日常交流、经验积累,这些信息其实没有被很好地记录下来。例如我们现在这段对话,如果没有被记录下来,它只存在于我们两个人的大脑中,而不会进入任何可被模型访问的系统。所以如果一个 AI 无法获取这些完整经验,它和人类之间的 context 是不共享的,它对你的帮助也会受到限制。因此我比较关心的一点是如何让模型能够处理更长的 context,尤其是包括 video 在内的多模态输入,让模型能够真正理解并共享人的 experience。
另一部分是在生成方向上,我在想是否可以把语言模型中的一些 prior,引入到视觉生成或者多模态生成中,构建一个统一的模型范式。整体来说,我现在的关注点可以总结为两部分:一是 long context 的 encoding 能力,二是 long context 的 decoding 能力。
同时,我也在思考生成模型本身的一个问题,当前很多生成方法(比如 diffusion)是在一个相对固定的 capacity 下工作的,而未来的生成任务可能是无限复杂的。但 diffusion 不可能通过无限增加 step 来持续提升效果在语言任务中,我们已经接受一个事实,简单问题和复杂问题所需的计算量是不一样的。但在视觉生成中,这种根据问题复杂度动态调整计算的能力还不明显。所以我在思考是否可以通过 scaling compute,让模型在面对不同复杂度任务时,采用不同的生成策略,比如结合 CoT 等机制,让生成过程具备更强的适应性。
ZP:举个例子,比如 nanoGPT 的 speedrun(ZP 注:一个基于 nanoGPT 框架的训练速度优化基准项目),它是一个固定 dataset 和固定模型规模,通过精细调参、结构优化,让训练速度从一个小时缩短到一分钟。这里面有些改进是有理论依据的,比如新的 optimizer 或结构设计;但也有一些是完全经验性的,比如删掉某一层 attention 这种神奇 trick。现在也有人在用 AI 去做这种自动优化,所以在这种类型的研究里,比如架构搜索、调参优化,是不是 AI 会更擅长?
邓明扬:这一类工作 AI 确实更有优势。但另一方面,我是做 representation learning 的,我会有一点担心。我一直觉得学习本质上是在点技能树。人也是这样,即你做了一些事情,技能树就长了一点。这些能力不一定只服务于当前 task,而可能在未来的 task 中发挥作用。如果我完全放开双手,什么都交给 AI 去做,那我自己会不会失去一部分 representation?而这些 representation 可能正是我产生灵感、做出创新的重要来源。
这是我现在在思考的一个问题,在使用 AI 的同时,应该保留哪些部分的亲手参与,才能不损害自己的能力。现在其实我已经有点放开双手了,感觉大脑都变光滑了(笑)。但我还是觉得,有些事情还是需要自己动手做,至少要保持一种 sense,对系统有直觉。未来可能会变成一种 PI 模式,即你不写代码,AI 像你的 PhD 一样帮你做事情。但问题是,如果 PI 很久不写代码,可能会逐渐失去判断力,不知道什么是对的。但未来到底应该怎么平衡,还没有一个明确答案。
ZP:你是怎么定义 world model 的?现在其实有很多不同的理解,比如有的人觉得只要是在 latent space 里建模状态就算,有的人觉得必须是 3D 或 simulator 才算。你自己如何定义的?它一定是生成模型吗?
邓明扬:说实话,我之前并没有特别系统地思考过 world model 这个词。很多时候我只是知道大家在说什么,比如有人指 next state prediction,有人指 simulator,但我自己并没有一个特别严格的定义。我现在的感觉是,这个词其实大家怎么定义都可以,没有一个绝对统一的标准。从我自己想做的事情来说,我现在也还没有把它称为 world model,可能以后会改口。但我当前的目标其实更接近于,让模型把技能树全部点满。
我觉得一个最理想的模型是一个把所有技能树都点满的模型。那问题是什么样的 task 最有助于点满技能树?现在的各种方法,本质上都是让模型看到一部分信息,然后预测另一部分信息。但我觉得最正确的目标,应该是让模型把所有能预测的信息都预测出来。目前所有方法,其实都只是这个目标的一个 subset。
比如 contrastive learning,本质上是在做万中选一的任务,它其实只利用了非常有限的一部分信息。再比如 MAE 或 next-token prediction,可以理解为把剩余的信息拆成不同维度分别预测。但这种方式也会漏掉一些信息。举个例子,如果数据里存在某种全局约束,比如前两个格子必须相同,那如果你是逐个维度独立预测,很可能就捕捉不到这种关系。所以现在的这些方法,本质上都是在预测剩余信息的一部分,而不是全部。
因此我觉得一个更正确的 objective,应该是让模型预测所有可以预测的信息。当然现在还不知道具体该怎么实现,大家其实都是在做各种 approximation。但从直觉上来说,这样的目标应该更有助于把技能树点得更完整。这也是我现在的 research goal。
至于 world model,本身可以看作是一个 downstream task(ZP 注:下游任务,指机器学习中基于预训练模型的具体应用任务),比如预测下一个 state 或做环境模拟。但在我看来,更核心的是那个点满技能树的训练目标本身,也就是看到一部分,预测所有能预测的信息。这个目标本身,可能比具体某个 downstream task(比如 world model)更 fundamental。
另外,next-token prediction 也不一定是完整的解决方案,因为它可能没有学到所有技能。有些能力,可能不是通过预测下一个 token 就能学到的,可能需要预测更多性质(properties)才能获得。只是现在我们还不知道这些到底是什么。
在视觉领域,这个问题会更加明显。语言之所以可以通过 next-token prediction 学到很多能力,是因为互联网上有很多人类加工过的数据,有人把各种知识都写成了这种形式。但视觉数据不是这样的,它只是自然地存在在那里,没有人帮你把所有信息组织成一个统一的预测任务。所以在视觉领域,如果你直接套用类似的方法,可能学到的能力就会更有限。这也意味着,对 training objective 的设计要求会更高。
ZP:听起来有点像,我们现在没有一个完美的 task definition,所以只能用一些 proxy task 来做 pretraining,希望它能泛化到各种 downstream task?
邓明扬:这个理解是对的。你希望 pretraining 能把所有技能都学到,但问题是你并不知道什么样的训练方式可以做到这一点。可能不是针对一个 task 优化,而是需要某种方式去什么都学一点才能把技能树点得比较全。但现在的问题是我们还不知道如何精确定义什么都学。
虽然把各种东西都学一点,技能树可能就更完整。但我还是希望未来能有一种统一的方法,可以让模型自然地把所有技能树都点满,而不是靠手动堆很多 loss。这可能是一个更理想的方向。
ZP:我们来聊聊你去年的工作 Mean Flows,它提出一步生成的新思路。可以先为我们介绍一下这个项目吗?
邓明扬:Mean Flow 是我参与的一项工作,一作是正阳同学。这个工作的核心是,我们发现可以训练一个模型,从任意时间步预测到任意时间步的平均速度场。传统的 flow matching,是在每一个时刻去预测瞬时的速度场,而 Mean Flow 则是直接预测平均速度场,也就是说,在任意两个时间之间,用一个统一的方式去建模。
从实验上来说,这个工作达到了当时的 SOTA,这一点本身不算特别令人惊讶。但让我最惊讶的是,我们发现整个 flow matching 的轨迹,其实可以用非常少的步骤来拟合,比如两步就可以拟合得很好。这件事情在当时是有点反直觉的。因为过去大家普遍认为像 diffusion 这种生成模型,必须拆成很多小步骤,每一步做一点点简单的事情,这样才能完成整个生成过程。
但 Mean Flow 给我的一个很大启发是,模型的 capacity 其实是非常强的。模型是很聪明的,如果它需要中间步骤,它可以在脑子里自己推演这些步骤。也就是说,即使你只用一个模型、甚至一两次 forward pass,它也是有能力学会整个生成过程的。这在当时并不是一个很普遍的共识。大家更习惯于认为,需要通过很多小步骤逐步逼近结果。但这个工作让我意识到,只要优化得当,模型是可以一步到位完成任务的。
ZP:那这种从多步到少步的变化,你觉得是因为模型变大了、数据更好了,还是训练方法改进了?
邓明扬:我有一个比较暴论的看法是,很多问题的瓶颈,其实不在于模型的 capacity,而在于 optimization。也就是说,做某个任务的正确模型可能早就存在了,但问题在于怎么把这个模型训练出来,这才是更本质的难点。Mean Flow 本质上就是通过设计一个更合适的优化目标(比如平均速度场),把一个原本可以用两步完成生成的模型训练出来。如果没有这样的目标设计,这个模型虽然理论上存在,但你很难把它训出来。包括我们在 Mean Flow 里用到的一些技巧,比如 CFG,本质上也是在帮助模型更好地学会这个任务。所以我觉得,这是一个很长期成立的观点,不是模型做不到,而是你能不能设计出正确的优化目标让它学会。
ZP:你怎么看最近 few-step 或 one-step generation 的发展?未来这个方向会继续吗?
邓明扬:我个人其实会希望未来不是基于 diffusion model 的。我现在的感觉是,一步或者两步生成,在 capacity 上其实已经完全够了。更重要的问题在于模型在训练过程中学到了什么,我更倾向于把 machine learning 看成是在点技能树。就像一个文明发展一样,每一步是在点一个新的技能,最后这些技能会融合在一起,让模型变得非常强大。这个过程中,关键不是你生成用了多少步,而是你在训练中让模型学会了哪些能力。所以从长期来看,我觉得更重要的是通过设计更好的 objective,让模型的技能树点得更完整、更合理。当模型足够强的时候,它可以灵活地选择一步生成,也可以多步生成,本质上都不是问题。
我其实没有那么在意一步生成的效率。我更在意的是,既然模型可以一步完成生成,那说明 capacity 已经不是瓶颈了。这反而说明,我们应该把注意力放在更本质的问题上,比如训练目标、表示学习,以及模型学到了什么。
我有时候觉得 COT 不一定需要(ZP 注:chain-of-thought,思维链)。因为模型本身的 capacity 其实是足够的,之所以需要 CoT,是训练方式限制了它,模型被训练成每次只生成一个 token,它没有学会在脑子里把所有推理完成再输出。所以在当前范式下,它必须一步一步地把思考过程写出来。
但我觉得这其实是一个 bottleneck,因为每次只输出一个 token,相当于一个非常窄的信息管道。模型内部可能有很丰富的表示,但最终只能通过一个很小的通道表达出来。从这个角度看,我会觉得这种逐步生成的方式限制了模型的表达能力。这当然是一个比较偏个人的、甚至有点极端的看法,因为 CoT 在实践中确实非常成功。
ZP:我其实觉得,CoT 本质上可以看成是把模型展开来看。scaling depth 和 scaling sequence 其实是同一件事情。我之前做过相关实验,尝试把 block 复制多份,比如两步就复制两份,然后最后用 mean flow 做一步生成,相当于在重复计算一些东西。同时我在每一步加了中间 loss,明确规定每一步该走到哪里。但我的想法是,其实不需要中间 loss,只需要约束最终结果即可,让整个 block 堆叠起来。理想情况是多个 block 叠在一起能比多步 diffusion 更好。但实际训练效果不好,收敛很慢。
我还尝试过用 MoE(ZP 注:Mixture of Experts 混合专家模型,一种用于提升大模型效率与扩展性的稀疏激活架构),让不同的 loop 使用不同的 expert,这样组合起来效果会好一些。我觉得这可能和数据有关。比如 ImageNet 本身的知识密度不高,MoE 的收益可能有限。但在更复杂的任务,比如 text-to-image 或者视频生成里,可能会更有价值。
邓明扬:会不会是因为 loop 结构本身导致的,比如 loop 的网络反而更弱。你有没有做过没有 loop 的 baseline,比如把 mean flow 一步和没有 loop 的版本做对比?
ZP:可以直接比,但我没有系统做过。因为如果不 loop,compute 会翻倍,这样对比不太公平。我们需要保证参数量和 compute 都一致才公平,所以更合理的对比是,一个用 loop,另外一个用 diffusion 跑多步。这里有一个既可以是好、也可以是不好的点。如果是在 pixel space 或 latent space 里训练 diffusion model,每一步 prediction 都必须回到那个空间;但如果是 loop 结构,就不需要每一步都回到那个空间。
好的解释是,它不需要被投影回某个固定空间,没有这个 constraint;坏的是这样会让优化更困难。我现在更倾向于后者,因为实际训练中确实发现优化很困难、收敛很慢。不过也有可能如果训练足够久,它最终会更好,只是现在还不确定。
你会更倾向于把生成模型看成一种 pre-training 吗?
邓明扬:对,我觉得这是一个比较准确的总结。生成模型更像是一种 generative pre-training,它学到的 representation、feature 或者数据空间,可以被用在其他任务上。但具体的 pre-training 形式,不一定非得是 diffusion 或 flow matching。
从生成任务本身来看,我觉得 one-step generation 是完全可行的。甚至我会赌一件事情,现在这种 multi-step 的方式,可能反而会限制模型的上限。因为每一步的任务都太简单了,可能会影响模型整体技能树的发展。但这也只是我个人的判断,未来会怎么样,其实谁也说不准。
那么现在关于 image CoT 大家都是怎么做的?
ZP:现在其实还没有特别成熟的方案。有一些叫 thinking with image 的工作,在 perception 任务里,一种常见的 CoT 是当任务比较困难时,让模型先去找关键 region,把它放大再去分析。后来也有人尝试做 video 上的 CoT,比如在 1000 帧里先选出关键帧,再重新处理。但我觉得这个没什么意义,因为这些帧其实已经在模型的 prefill 里被 encode 过了,你再重复一遍只是重复 computation,本质上只是 position embedding 的问题。
唯一有意义的是 zoom-in,因为它确实引入了新的信息(更高分辨率),而不是重复已有信息。另外,还有一些工作是在做 editing 上的 CoT,比如把一个复杂的图像编辑任务拆成多步,通过调用不同的 tool 来完成,而不是一步完成。这个思路其实来自 Google 的一些工作,比如他们提到当你对一个对象(比如 nano banana)提出很多修改指令时,模型其实会一步一步去完成,而不是一次性全部做完。我觉得这个思路很好,即不要期望模型一次性完成所有事情,把任务拆开,不仅效果更好,可控性和可解释性也更强。
我最近也在尝试做这些东西,但实现起来确实不容易。比如我现在连一个好的开源 codebase 都没找到,能同时支持 text 和 image generation 的 unified model,目前还没有特别成熟的开源方案,所以推进起来也比较困难。
我们接下来聊一下 drifting model。这相对来说是一个比较新的范式,能不能简单介绍一下这个工作?
邓明扬:这篇 paper 的做法其实非常简单。从高层来看,可以类比 flow matching,在推理的时候把一个分布变到另一个分布。而我们这里的想法是,在 training 的过程中让模型输出的分布逐渐变成 data 的分布。具体来说,你有一个模型,它直接输出 sample,我们希望这个 sample 在训练过程中不断被推着走,最终变成数据分布。
实现方法是,每次模型 roll out 一个 sample,我们会给这个 sample 定义一个 drifting field,也就是它应该往哪个方向移动。然后不断让这个 sample 沿着这个方向前进。如果这个 field 设计得合理,并且满足在两个分布 match 的时候为零,那么最终模型生成的分布就会收敛到数据分布。这是这个方法的 high-level 思路。
再往低层一点讲,这篇 paper 里有一个比较神秘的地方,就是 V 的计算方法。在事前我其实完全不觉得它会 work,但最后它确实 work 了。这个方法是这样的:先 roll out 一些样本,然后再额外生成一些样本(包括生成分布和数据分布的样本),接着在这些样本之间构造一个目标,让生成的样本更接近附近的数据样本,同时远离附近的生成样本。
这个 V 的具体形式其实没那么重要,本质上是一个拉近 data、推远生成的机制。我们用 Monte Carlo 的方式来估计它。而这里最关键的一点是:这件事情可以在所有 feature 上进行。这个方法有一个关于 feature 的 scaling law。因为它的平衡态是两个分布相等,而当分布相等时,任何 feature 的分布也会相等。所以你可以在 feature 空间里做这件事。如果你在更多 feature 上施加这个约束,每增加一个 feature,效果就会变好一点。当你在所有 feature 上都做一遍之后,它就 work 了。
我是用一些 pre-train 的模型,比如 MAE 这种架构,从里面取 activation 作为 feature。不过这只是一个比较具体的 instantiation,本身并没有特别本质的理由。
ZP:那从结果来看,feature 层面的 alignment 是必要的吗?还是说它只是一个 improvement,没有它也可以?
邓明扬:一开始我也不觉得它会 work。但在目前这篇 paper 的 setting 里,它在 ImageNet 上是必要的。因为 ImageNet 的维度太高了,如果不用 feature,只用 Monte Carlo,很难找到附近的点。不过这其实也是目前方法的一个局限,现在不带 feature 是没法工作的。但未来有可能找到方法,在不依赖 feature 的情况下也能 work。
另一方面,我觉得更有意思的是,它提供了一个新的 scaling 维度。我在实验中看到很强的 evidence,就是 feature space 越大,效果就越好。也就是说,你的 loss function 覆盖的 feature 越多或者越好,模型就会越好,即使训练时间和 inference compute 不变。这本质上是一个关于 training objective 的 scaling law,即不是模型变大,而是 loss function 本身变强,模型性能就会提升。
你认为最近最好的 multimodal 工作是哪个?我前阵子觉得 Peter 的工作很深刻,你怎么看?
ZP:我觉得 Peter 做的东西整体都挺好的。我个人特别喜欢他里面关于 MOE 的设计,它是自然学到的。我一直觉得,用 MOE 去切不同的 modularity 是对的,其实从 2023 年就已经有人在这么做了,比如像一些工作会把 vision 和 language 分开处理,比如 vision domain 走 vision expert,language domain 走 language expert。
但我觉得他这篇工作特别好的一个点在于,他没有人为去切,而是让 model 自己去训练。最后的结果是,有一部分 token 自然地走向 vision expert,有的 token 会同时走多个 expert,比如两个 vision token,还有一部分 token 会同时走 vision 和 language。这一点让我非常惊讶。
当然,MOE 切完之后,隔离会变得非常方便。但我觉得还有一个需要进一步研究的地方,就是不同 expert 之间的 interaction,也就是交汇的那部分。比如有些 token 既走了 vision expert,又走了 language expert,那这些 token 到底承担了什么功能?我有两个猜测,一种比较理想的情况是,它们确实在做跨模态的 fusion;但另一种可能是,它们只是做了一些 skill 的连接,比如只是做 identity mapping (ZP 注:恒等映射),并没有真正融合模态。我没有仔细看过它的具体分布,所以这点我还不能完全确定
我觉得这个方向是好的。如果一个 model 同时要做 understanding 和 generation,这件事情其实应该从 pretraining 阶段就开始设计。但问题是我没有足够的算力去验证这一点,所以很多结论我只能说它是一个看起来不错 10823 的设计,但在大规模上是不是成立我也不确定。
另外,如果我们真的希望一个 model 同时具备 understanding 和 generation 的能力,其实有一个比较简单的方案,就是把 CLIP 和 VAE 拼在一起。这样一个空间既可以覆盖 understanding,也可以覆盖 reconstruction。只要你的建模空间足够大,其实很多方法都是可行的。
你有没有试过不同 scale 的 pre-trained encoder?如果是更大的 encoder 会不会更好?
邓明扬:这个现象其实挺有意思的。generator 本身是一样的,变化的是用来计算 loss 的 encoder。比如 encoder 训练得更久,或者更宽,都会让结果稳定变好。这说明它确实是一个很特别的 scaling axis。因为它某种程度上符合技能树的直觉,你学了更多 task(通过更多 feature),模型就会变强。而且这些 task 的平衡态其实是一致的。所以我觉得这个 instantiation 里一个很有趣的点,就是它像是在通过多任务的方式,让模型逐渐点满技能树。
ZP:这里主要用了 self-supervised 的 encoder,有没有尝试过用 CLIP(Contrastive Language-Image Pretraining)或者 DINO(Self-Distillation with No Labels)?
邓明扬:其实当时最主要是想尽快把东西 deliver 出来。因为当时已经觉得这个方法本身就挺 surprising,没想到它竟然能 work。另外还有两个实际原因:第一,这些模型在 latent space 上不太好用。我们最开始的主实验是在 latent generation 上做的,如果你要用 DINO 就需要先经过 decoder,还挺贵的。如果自己再去训练一套,也不太想做。
相比之下,一些更简单、容易训练的 encoder(比如类似 MAE 这种)更方便。所以当时就选了这些。当然后来我们也知道,像 CLIP、DINO 这些其实是 work 的。但因为主实验是在 latent 上做的,就没有去用。如果主实验一开始就是在 pixel 上做,那这些 encoder 基本都可以直接用。但当时我们一开始就是做 latent generation,所以就没有往那个方向扩展。
ZP:为什么恺明在 pixel-level generation 上有这么强的执着。我们的猜测是在某些领域,比如 robotics 或 scientific domain,可能没有一个很好的 VAE,很难训练出一个 well-defined 的 latent space。在这种情况下,你只能在最原始的 input 上做 generation。是不是可以理解为,我们把 vision 当作一个 playground,通过 pixel-level 的方法去探索一些更通用的建模方式?
邓明扬:这个问题我觉得可以从两个角度回答:一个是我猜恺明可能的想法,一个是我自己的理解。先说我猜测恺明的想法。一个很重要的点是,如果你在 pixel 上做了压缩,比如变成 VAE latent,那你就可能永久丢失一些信息。decoder 本身是有 loss 的,一些细节一旦丢了,后面就再也找不回来了。如果这些信息未来在某个 task 中是有用的,那你一开始的压缩就已经限制了上限。从这个角度看,如果你想获得最丰富的信息表达,理论上最好的方式是把所有能预测的信息都预测出来,而 pixel 是一个相对更完整的输入形式。当然你也可以说 pixel 也不是最原始的输入,比如还有光信号等等。但至少 pixel 比已经处理过的 latent 包含的信息更多一些。如果在压缩过程中丢掉了信息,那你就失去了一部分可以学习的东西。
另一个可能的原因是,pixel-level 的方法更加 self-contained,不需要额外引入一个组件(比如 VAE)。而 VAE(ZP 注:Variational Autoencoder,变分自编码器)本身可能成为瓶颈,比如有些细节恢复不出来,那你的上界也就被限制住了。以上这些其实都是我自己的理解,不一定是恺明本人真正的想法。
再说我自己的看法。我觉得 pixel-level 的方法其实是挺 work 的,比如 JiT(ZP 注:Just image Transformers,像素空间做扩散去噪生成)。从效果上看,我觉得它生成的图是非常强的。一个直觉是在 latent 压缩的过程中,有些信息是会丢掉的。而像 JiT 这种方法,它在训练时并不知道哪些信息是重要的、哪些是不重要的,所以它会把所有信息都学一遍。
这样带来的一个结果是,supervision 会更加 dense,而且它不会 prioritize 某些 latent 表达(也就是提前决定哪些信息该被保留)。因此在一些细节上,pixel 方法反而可能做得更好。当然在一些指标(比如 FID)上,pixel 方法可能会吃点亏,因为 latent 方法在训练时会加入一些特定的 loss(比如 LPIPS),对指标更友好。但 pixel 方法学到的东西可能更全面,包括一些指标没有刻画出来的内容。
还有一个我自己做 project 时的核心想法是,pixel 可以作为一个统一的 interface。如果你在 pixel space 上做生成(比如在 drifting model 里),那么你可以在任意 representation space 上去定义 loss。因为所有 representation 最终都是定义在 pixel 上的。
举个例子,如果你想同时对 10 种不同的 representation 施加约束,你可以在 pixel 上生成图像,然后在这 10 个 representation 上分别计算 loss。这一点是 drifting model 比较独特的特点。但如果你是在某个特定的 representation space 上生成,那你想在其他 representation 上施加 loss,就会变得很不自然,通常还需要额外训练 decoder。
所以我觉得 pixel 作为一个 interface 是很合理的,你不一定需要删除信息,可以保留所有信息;如果你想强调某些 representation,也可以通过在这些空间上加 loss 来实现。这两件事并不矛盾。所以现在我个人的感觉是:pixel 这个选择是对的。
你怎么看 vision 这块的整体方向?包括 task,还有未来可能的发展?
ZP:我觉得从终极目标来说,其实大家心里都有一个共识,就是希望有一个 unified model,可以做所有任务,不只是 vision,也包括 language,甚至更多模态。我也非常认同,有些 task 之间确实是可以互相促进的,这一点是肯定的。但现在一个比较大的问题是,我们还没有找到一个好的 downstream task(下游任务),这是致命的。现在能看到的 vision 方向,大概就几类,一类是 computer usage agent,一类是 robotics,还有一些正在发展的,比如 ego-centric 的场景,比如眼镜、耳机、移动设备这些 wearable device 相关的应用。
但在学术环境里,大家做的很多还是 classification、segmentation 这类 understanding 任务,这些任务和真正的应用场景其实差得很远。所以很多研究其实意义不大,它们只是中间产物,并不是最终要解决的问题。就像自动驾驶一样,最后一定是 end-to-end 的方案会胜出。
所以我觉得关键是,需要有人去找到一个好的 benchmark、一个清晰的任务定义。一旦有了明确的目标,大家才会围绕它去优化、去竞争。否则的话,我觉得现在这个领域其实已经有点像一滩死水了。相对来说,做 generation 的人会稍微好一点,因为有像 ImageNet 这样的标准数据集,可以公平地比较。但其他很多方向,比如 VLM,你的 performance 往往取决于你自己定义的 benchmark。大家在同一个 benchmark 上都很差,而你的提升可能只是因为你多收集了一些数据,而不是方法本身更好。所以很多 research 实际上是 data-driven 的,而不是 method-driven,这样的研究我觉得意义不大。
从整体来看,我对 vision 领域没有那么乐观。generation 还算是一片净土,而真正的出路,我觉得是找到新的 task,并把它定义清楚。如果这个问题能解决,很多事情都会变得清晰很多。现在的问题是,有些 benchmark 分数很低,并不是因为问题本身难,而是因为大家都没有见过这个任务。你只要多收集一点相关的数据,就能把分数拉上去。但这并不代表你解决了一个本质问题,而只是让模型见过了而已。所以很多所谓的困难,其实不是本质难,而是没见过。在这种情况下,很难说这是 research,因为你只是让模型看到了更多数据,而不是提出了更好的方法。
邓明扬:在 multimodal 训练路线方面,你觉得现在大家已经基本收敛了吗?
ZP:据我所知,如果不考虑做 unified model,VLM 这件事情其实大家做法都差不多。一般都会从 language model 的最前端就开始加入 vision 数据,也就是一开始就做混合训练(mix training),我觉得这个是合理的。如果是 VLM 的话,其实也差不多。因为你主要只是做 prefill,在整个系统里的话语权比较小,所以也没有太多可以做的差异化设计。
但整体来说,现在的问题还是没有解决。比如 long context,在纯 text 场景下都还没有解决好。你可以看一些 recall curve,当 context 长度到 30%或 50%的时候,性能就开始明显下降,甚至需要重新开一个新的 context。所以 long context 本身都没有解决,更不用说 multimodal 了。至于 multimodal 的整体 design,我觉得目前大家其实是趋同的,没有特别本质的差异。
邓明扬:具体到设计层面,比如你刚提到 downstream task,这个对模型到底意味着什么?
ZP:我还是会回到这个点,downstream task 是最核心的。我举一个例子,比如 video understanding,不同任务对 video 的处理方式其实完全不一样。比如我们现在在对话,这种场景下我对 vision token 的处理方式,和我在讲一个 slides 时是不一样的;再比如说,如果我要去分析一场赛车比赛,它对 motion 的建模要求又完全不同。
换句话说,不同任务对于 vision encoder 内部如何处理信息的方式是完全不同的。我打个比较抽象的比方:如果模型要理解向左还是向右的运动关系,你把所有帧直接拼在一起喂给模型,其实对它来说是很困惑的。因为它需要在一大堆 token 里面,找到当前 token 对应的是第几帧,然后再去找它前面第 196 个 token、195 个 token 到底发生了什么,才能判断方向。
所以我觉得,这种建模方式其实和你选择的 downstream task 强相关。如果我们没有找到一个合适的 task,那很多 model design 本质上可能都是错的。比如说在互联网数据里,有些东西是很清楚的,比如 OCR、driving,这些任务模型已经学得比较明白了。robotics 也在逐渐变得清楚,但其实还没有完全解决。还有一些 egocentric video,因为 Meta 提供了大量数据,加上 YouTube 上也有很多类似数 ka 据,所以这类场景也相对比较清楚。但也有很多事情模型是完全不明白的,比如一些很少见的场景、游戏、特定环境下的任务,这些基本都没有见过。
我觉得这其实是很正常的。很多泛化能力的问题,本质上是不保证的。因为在真正的工业应用中,我们并不会依赖模型的泛化能力,而是会确保它的输入始终处在一个 in-domain 的范围内。就像自动驾驶一样,你在部署的时候,一定会保证所有情况都在它训练过的分布内。泛化能力更多是一个加分项,但不是你真正依赖的东西。当然,模型确实是有一定泛化能力的,这点我也承认。但它的边界是很明显的。
我们之前还做过关于泛化的一些比较有意思的实验,比如让 diffusion model 生成不同半径的圆(5、6、7)。然后测试它能不能生成半径为 8 的圆,结果发现外推不行,但内插可以。还有一个有趣的实验,我们让模型生成一个指针(类似时钟),输入角度作为条件。训练数据是 0 到 270 度,但当我们输入 1080 度时,它居然能转很多圈再停在正确位置,甚至还能处理负数。这说明它在某种程度上学到了周期性的结构。但这种能力并不是普遍存在的,只在这个任务中出现。
还有一个重要发现是 composition generalization。比如你见过蓝色圆和红色方块,模型是可以生成蓝色方块和红色圆的。只要每个 element 见过,组合能力是非常强的。这说明在生成模型中,如果你把基础元素学好,它可以很好地泛化到组合上。
我现在在想的是,把这些 idea 带到生成模型的范式里。比如引入类似 CoT 的思想,让生成过程可以分解,先生成主体,再生成背景,再做组合,甚至可以做 reflection。这样一个复杂任务,就可以拆成多个简单步骤,每一步用较小的模型能力完成,再组合起来。这其实和人类的创作过程很像。不过这里面还有很多问题,比如 reward 怎么设计。现在的 pixel-level loss 其实不合理,比如只是平移一个像素就完全判错,这在语义上是不对的,所以需要更 robust 的评价方式。这也是为什么我觉得这个方向可能更适合结合 RL 去做。
邓明扬:这个如果能做出来,在学界应该是一个很好的 prototype。
ZP:对,本质上就是一个 prototype。如果能证明通过这种分解方式,即使用比较弱的生成模型,也能做出不错的效果,那就很有价值。当然,这个过程本身也不简单,比如这个 chain 怎么设计、怎么拆分,其实都不容易。
我最近也在看 RL(ZP 注:强化学习是一种机器学习的方法,旨在让计算机通过与环境的交互和试错来学习如何采取最优的行动,以最大化所获得的奖励),因为这个过程不太可能 purely 从数据里自然学出来,我们可能需要人为构造一些数据,让模型学会这种拆解方式。
但这里面有个很大的问题,就是 reward 很难定义。比如你生成一张图,它到底和你的目标是不是一致,这个很难量化。如果你用 pixel-level 的 loss,比如 reconstruction loss,那就会出现一个问题:语义上是完全正确的,但如果像素偏移了一点点,loss 就会很大,这其实是不合理的。所以 reward 的设计需要更加 robust,这是一个很值得研究的问题。
我从应用角度也在思考这个问题。比如 diffusion 本质上其实可以看作是一种不可解释的 CoT;如果我们把这个过程显式化,让模型把中间步骤输出出来,那它就变成可解释的 CoT。这样的话,你就可以对中间某一步进行干预,比如某一部分画得不好,你可以把那一部分替换掉,再继续生成。这其实相当于把一个整体生成任务,变成一个可分解、可编辑的过程。
从应用角度来看,这种方式可能更实用。比如你要生成一个包含 10 个元素的图像,传统方法可能要反复生成很多次(比如 20 次)去找一个最好的结果;但如果用这种分解方式,你只需要生成一次,然后对不满意的部分进行局部修改,再生成一次就可以了。
我们继续谈谈刚刚聊到 FID。先简单给听众解释一下:现在的 image generation 模型(无论是 diffusion 还是其他模型)在学术实验里通常都会在 ImageNet 上做实验(ZP 注:IMAGENET 是一个大型可视化数据库,用于研究视觉对象识别软件。它包含超过 1400 万的图像 URL,提供对象的手动注释和边界框),用一个叫 FID 的指标来评估效果。
FID 的做法是用一个 pre-trained encoder,把生成图片和真实图片映射到 feature space,然后衡量这两个分布之间的距离,看它们是否接近。现在大家基本都把 FID 刷得很低了,比如 1.3、1.5,甚至已经接近 training set 和 validation set 的差距。在这种情况下,再继续刷 FID 的意义还有多大?会不会因为过度关注 FID 而错过一些可能更好的算法?比如你刚刚提到的 GIT,有些优势可能 FID 是衡量不出来的。你怎么看这个问题?
邓明扬:我觉得 FID(ZP 注:Fréchet Inception Distance,弗雷歇特 Inception 距离),是生成模型(尤其是 GAN、扩散模型)中最常用的评估指标之一)本身其实还是一个挺 reasonable 的指标。前提是你不要刻意去 hack 它。确实是有一些 hack 的方式,比如因为 FID 是基于一个 classification 网络提取的 feature,如果你在训练过程中引入一些 classification signal,其实是可以人为地把 FID 刷低的。比如有些方法会利用这种相关性去优化指标。不过抛开这些刻意的 hack,我觉得在正常使用情况下,FID 还是比较可靠的。它在模型开发过程中是一个很好的 signal,能比较稳定地反映生成结果的质量,比如图片是不是像样,有没有基本的结构等等。
另外一个优点是,FID 在训练过程中通常是比较平滑、单调下降的。有些指标在训练过程中会震荡,但 FID 一般比较稳定,这一点其实挺重要的。不过问题也确实存在,当 FID 已经降到 1.x 这个级别之后,再继续优化一点点,其实带来的感知提升可能非常有限。这个时候它的分辨能力就变弱了。所以大家会觉得它有点退化,就是说在当前这个阶段,它已经不能很好地区分更细微的模型差异了。
不过即便如此,我个人还是觉得在模型开发(development)阶段,FID 仍然是一个很不错的指标。它简单、稳定,而且在大多数情况下是有效的。我自己有时候也会测一些其他指标,比如 DINO-based 的 FID,或者一些自己定义的 feature space 距离。但整体感觉是这些指标和传统 FID 其实是比较 correlated 的,并没有完全不同的结论。
所以我的看法是,如果你不刻意去 hack,FID 还是一个很好用的开发指标。它的局限主要是在高分段(1.x 区间)区分能力不足。但目前也没有一个明显更优、被广泛接受的替代方案。
ZP:现在有些人会更关注 reconstruction FID(rFID),有些人更关注 generation FID(gFID)。你在做实验时会区分这两者吗?
邓明扬:如果我没有训练 tokenizer 的话,那 rFID 对我来说意义不大。因为大家用的 tokenizer 都是一样的,这部分其实是公平的。一般来说,关心 tokenizer 质量的人,可能会更关注 rFID。但我自己基本只看 standard 的 FID(也就是 generation FID),因为我对 tokenizer 本身没有那么关注。
快问快答
ZP:日常生活中,除了科研之外,你还有哪些兴趣爱好?
邓明扬:兴趣方面,一个是看小说,另外就是在波士顿半夜骑车。我平时会读一些文学类的作品,最近有一些比较喜欢的书。比如《看不见的城市》,作者是卡尔维诺。这本书的特点是它很像一本论文集,里面有很多非常有趣的想法,你每天读一点,就会感觉学到了一个新的 idea,这种体验让我觉得很开心。
另外也会读一些更偏传统小说的作品,比如最近读的《赌徒》,是陀思妥耶夫斯基写的。这本书给我的感觉是非常魔怔,里面的人物有一种很强烈的执念和狂热。我觉得这种状态其实和做 research 有点类似,就是在研究过程中你也会进入一种非常投入、甚至有点魔怔的状态,所以读这类作品会让我产生一些共鸣。
ZP:在你读过的书里,对你影响最大的是哪一本书?
邓明扬:仔细想的话,我觉得《战争与和平》对我的影响比较大。原因在于,这本书里有一个人物,他一开始非常渴望成为一个英雄,想要去参与拿破仑战争,但真正上战场之后,他很快就失败了,可以说表现得非常普通甚至很菜。但正是在这个过程中,你可以看到他世界观的变化。
这对我的影响在于一种劲儿。我现在也会非常希望自己能做出伟大的研究,成为一个很有影响力的 researcher。但这本书让我意识到,如果这种理想没有实现,或者说这种希望破灭之后,你依然需要找到一种方式去生活。它提供了一种视角,即没有成为伟大的人,人生依然是可以继续、有意义地展开的。所以我会一边思考自己能不能成为一个很厉害的 researcher,同时也在内心接受一种可能性。这一点对我的世界观影响是比较大的。






