你要知道梨子的滋味,你就得变革梨子,亲口吃一吃。
首先还是非常幸运有这样的机会去接触科研。通过大一这一年的接触,对科研这个“梨子”的味道有了更多的感受和印象。但是很显然还有非常多的困惑、不解和各种困难,仍需继续去探索和解决。在这里,就记录一下我目前的心路历程吧,恳请各位大佬批评指正。
Research 初体验
我对科研的第一个印象是大一上学期参加的“新芽计划”,主要做了两件事:论文梳理和代码复现。这个过程中给我的最大感受就是,科研并没有想象中的那么“高大上”,不是说每个顶会的工作都是解决了某个非常伟大的问题;科研工作者们也是在前人的肩膀上不断发现问题、解决问题。这是一个无数科研工作者不断尝试、不断试错、不断突破的过程。
不过,计图比赛的经历让我对科研的认识进一步加深了。刚开始的时候,也是非常常规地找了十来篇顶会论文做了个调研(插一嘴,这个调研强度比搞新芽时候一周不到两篇论文的强度高多了),大概总结了几个方向,然后就在师兄给的 idea 基础上,Vibe Coding(氛围编程)了一下,跑通了第一个流程。
但是很不幸的是,第一次跑出来的结果交到官方网站是 0 分(我真服了),因为这个模型完全没学好,甚至直接把噪声点往偏离 Ground Truth(真实值)的方向拉了。这里遇到的第一个问题,其实后来回头看是点云去噪中一个非常核心的问题:学习目标 target 到底应该怎么构造,也就是每个带噪点到底应该被拉回到哪里。
如果简单按照下标让带噪点和干净点一一对应,就很容易出现可学习性的问题,因为点云本身是一个无序集合,这种对应关系并不一定具有真正的几何意义。于是就需要尝试不同的 target,比如 Optimal Transport(最优传输),让整体匹配距离尽可能小;或者 Projection,把点直接拉到真实表面附近。
一开始我的注意力其实更多集中在“模型怎么改”上,但是后面做下来逐渐发现,模型效果不好可能根本不是模型结构的问题,而是一整条 Pipeline 的问题。数据怎么构造、target 怎么构造、模型看到了什么、最后输出什么、Loss 到底在约束什么,任何一个地方都可能直接决定最终结果。比如后面迁移到 ShapeNet 数据集的时候,本地效果和官方效果一直存在巨大的差距,折腾了很久以后才发现训练数据里构造的噪声强度明显不够,导致模型预测出来的位移大概只有真正需要位移的一半。把这个数据问题修正之后,效果反而有了非常明显的提升。
这些实验让我开始意识到,真正跑起来以后面对的问题和单纯读论文时看到的东西差别还是非常大的。光读论文的时候,很容易把一个领域理解成几个已经被整理好的研究方向;但是等到真的开始提分,面对的往往是一些非常具体甚至有点琐碎的问题,而且很多真正决定效果的东西,并不一定是什么很漂亮的新方法。
问题驱动与不断扩张的实验
虽然中间踩了很多坑,但我还是十分坚信一种“问题驱动”的研究路径:在实验里发现问题,再尝试解释问题,然后设计实验验证自己的解释。
问题在于,我后来把这件事情做成了一个非常夸张的循环:AI 做实验,AI 判断方法是否可行,AI 归因,AI 给出下一步实验规划,AI 再做实验……
这里的问题包括但不限于:最优传输的 target 模型难以学习;尖角部分的点分配非常混乱;投影虽然能让点贴近表面,但是覆盖度又不够好;数据集之间存在明显差异;局部块和均方误差容易让输出过度平滑,从而把尖角磨平;不同区块独立预测以后,部分区域输出重叠,另外一些区域却没有点覆盖;以及后面折腾了非常久的 coverage 问题。
coverage 这一条线最为典型。最开始发现模型的点已经能够比较好地贴到物体表面,于是就怀疑剩下的问题主要来自点在曲面上的分布:有些地方挤了很多点,有些地方却没有覆盖。后来 chatGPT 做了一个知道真实点云的理想实验,发现如果允许预测点沿着曲面重新分配,CD 的确存在非常大的改善空间,于是后面很长一段时间都在尝试把这个理想结果真正做出来。
然后就开始了各种尝试:预测曲面内的运输方向、让不同区块之间做全局协调、直接优化整个点集的距离、用最优传输重新分配点、对重叠区域做排斥、估计哪些地方点太多哪些地方点太少、增加图结构、重新做解码器等等。很多实验在自己的局部指标上确实是有效的,比如重叠真的减少了、点的分布真的更加均匀了、训练损失也真的下降了,但是最后一看 CD,往往没有什么鬼用,有时候甚至更差。
但是非常 amazing 的是,前面折腾了很多复杂机制以后,真正稳定有效的一次改动反而非常简单:减少原来一一对应学习目标的权重,提高集合级损失的权重。它没有显式告诉模型应该怎么重新运输点,也没有增加什么复杂结构,但是效果却比前面很多专门为 coverage 设计的东西更加稳定。
后面继续研究,又发现不同区块的输出确实存在明显重叠,而且这种重叠和 coverage 的误差高度相关。于是很自然地又会觉得:“那是不是找到问题了,把这些重复点推开就行?”结果真的把它们推开以后,重叠减少了,但是 CD 几乎不变。因为知道“这里的点太多了”,并不等于知道“这些多余的点应该去哪里”。
类似的事情后来发生了很多次。每次实验都好像比上一次更加深入:找到一个现象,分析它和最终误差的关系,再提出一个新的解释,然后设计新的实验。 表面上研究在一直往前走,但是等到最后把几十个实验重新放在一起看,会发现其中相当一部分其实是在用不同的方法重复回答同一类问题。
Vibe Research 的另一面
结果就是,一些比较核心的问题其实是我提出来的;但是让 AI 一直去做的话,就算是 GPT-5.6 Sol High,它的表现有时候还真像是个“索嗨”。每次实验失败以后,它特别擅长拿一堆乱七八糟的专有名词重新解释这个结果,然后告诉我“主要矛盾已经从 A 转移到了 B”,再顺理成章地给出下一个实验。
有些时候我刚看到这些分析,会觉得好像非常高级,于是又要花很多精力理解它到底在讲什么。等到我终于反应过来以后,才发现其中一些方法本质上可能就是一个很小的修改,甚至背后的核心假设用一个简单实验就可以直接证伪。
最显著的时候是期末周。那段时间因为忙着考试,我基本放任 Codex 自己不断做实验,等到期末结束重新总结时,才发现其中不少思路其实非常荒唐。比如它花了大量精力构造了一套复杂的 surface/chart(曲面参数化)学习目标,理由听起来也很合理:既然点云去噪是在恢复曲面,那显式建模曲面应该会更好。但后来一个简单的消融实验就发现,把这些东西全部删掉以后效果反而更好了。类似这样的思路,在被真正证伪之前已经写了很多代码、跑了很多实验、生成了大量报告,也让我第一次很明显地感觉到,AI 可以把一个看起来合理的错误方向推进得非常远。
与此同时,实验数量越来越多以后,另外一个问题也逐渐出现了:整个工程开始越来越难管理。
【2026-07-27】有一个非常难绷的点,由于这个 Vibe Research 干了这么久,导致代码和实验数据都堆成屎山了,本地 D 盘几乎爆满,远程 V100 的系统盘也爆满了,十分十分难绷。然后一怒之下释放了实例,删掉了大量我以为没用的数据……结果等我重新再搞的时候发现,后面的实验大量复用了前面构造的 cache 和前面训练好的模型,遂崩溃。
而等到真的需要重新梳理这些实验的时候,还会发现很多实验之间存在非常复杂的依赖:这个实验从哪个模型继续训练,那个结果用了哪一版数据,某个缓存又是在哪个阶段生成的。实验的数量确实远远超过了我一个人正常能够完成的数量,但是随着实验越来越多,整个项目反而越来越难真正掌握。
一些未想明白的困惑:
最开始以为科研主要是读论文、找已有工作的不足;真正做起来后,又发现很多问题只有把模型跑起来才会暴露。但具体实践中,我常常不知道怎样从现象提出真正值得研究的问题,也不知道发现问题后如何寻找方法、检索文献,更难判断自己是在逼近问题,还是陷入不断归因、不断补实验的循环。
目前得到的一些启发:
师兄的建议: 不要让 AI 围着当前问题不断自我推演,否则很容易在一个封闭的实验体系里越走越深。更合理的路径,是先回到已有研究中,通过查文献了解别人怎样定义和处理类似问题,再把一个 baseline 真正复现扎实,甚至尽量做到极致;在这个过程中,很多原本模糊的问题会自己暴露出来,也更容易产生真正有依据的 idea。之后再通过消融把一个完整方法拆开,弄清真正起作用的机制,而不是只记住“这个方法有效”。在此基础上再做迁移:既可以是旧问题引入新机制,也可以把旧机制用到新问题上,甚至进一步走到新问题、新机制。这样新的方向不是凭空想出来的,而是从对已有工作和具体问题越来越深入的理解中逐渐长出来的。
谢赛宁访谈给我的启发: 实验本身也不应该只是“先跑了再说”。谢赛宁在访谈中提到,何恺明会要求学生在每次实验之前先预测结果,因为预测本质上是在把自己当前对问题的理解明确下来:如果结果符合预期,说明之前的思路至少还能继续往前推;如果结果和预期明显不同,那么这个“意外”本身就是很重要的信息,需要回过头检查自己的理解哪里出了问题。访谈里还特别强调,研究实验应该彼此形成有信息量的对照,而不是尽可能多地堆实验;甚至一个明显掉分的实验,只要能够排除一种解释,也可能比一个“不好不坏”的结果更有价值。(来自 《对谢赛宁的 7 小时马拉松访谈》)
