复盘:科研里的反向传播
- 读书笔记
- 2025-07-22
- 117热度
- 0评论
写在做科研的一年
如果一个End2End神经网络的产出是一篇paper,那么复盘是这个网络的反向传播。人们通过复盘,可以调节 “在探索阶段应该跑更多baseline”,“时刻注意我们要做的主题” 等决策想法,从而做到更有效的科研探索。因此,时不时在输出后进行复盘非常重要。
这篇文章在写什么?
出于兴趣,我开始了计算机系统的研究。在简单看了一些书和talk后,我就找了我的好老板,一起 “创业” 找idea干paper了。做研究很不容易,在探索路上充满着失败、焦虑和沮丧。但我很幸运,最终工作做成了。现在回过头思考,我想从失败中挖掘一些经验与体会。
本篇文章我将分为3个section:
- 什么样的科研复盘是好的复盘;
- 我是如何复盘上一段科研的,并从中学到了什么。
- 对科研的反思,对读博和人生想法。
什么样的复盘是好复盘
“好的复盘的目标是让我们在之后给定的已有信息和资源约束下,能否做出更合理的判断,并据此做出当前最优决策。“
我的复盘技术最早启发于纪录片里的军队复盘。在二战中,德军就开始了有效的复盘:中层参谋与军官总结汇报 Gefechtsbericht(战斗报告),高层指挥部如OKW会在大型战役后进行复盘备忘录。而从70年代开始,美军发展了 After Action Review(AAR)复盘方法与经验学习中心(Center for Army Lessons Learned,CALL)。
军事复盘能让军队从过往战斗中吸收更多战斗经验。而将军队复盘带入到科研,我首先将复盘分为两种:
执行层(战术行动复盘):如自己的工程coding能力过低;写代码时没写测试,导致回滚很困难;一直只盯着同一个bug。
战略层(决策指挥复盘):当时A框架 vs B框架,为什么选A?完全跑不出结果的那几天,是继续硬撑,还是该先读文献或休息?
这两种复盘都很重要。我认为好的复盘的目标是让我们在之后给定的已有信息和资源约束下,能否做出更合理的判断,并据此做出当前最优决策。
复盘的目的在于在下一次探索中找局部最优解。战场瞬息万变,科研本质就是在高度不确定、信息不完全的环境下,通过不断试错和调整,去追求更好的局部最优,进而逼近全局最优。复盘至少能帮助我们避免一再踩同样的坑,哪怕不能直接通向最优解,也能让探索路径更平滑。毕竟如果一个“优化器”连局部最优都无法收敛,甚至反复陷入同样的错误,那么我们就更应该质疑自己是否真的还有机会接近全局最优。
经验的重新利用
说到踩一样的坑,很多人会在复盘的另一个问题上有疑虑:我的下一份工作跟上一份工作完全不一样,复盘选择A框架/B框架有什么用?这里我认为复盘也分种类,同样是追求局部最优,你的优化器也是可以从不同维度去逼近的。而对于不同的科研,总有的维度是可以共用的,比如“怎么样上手一个领域最快”,也有domain specfic的如“怎么profile内存读取pattern”。我用“是否通用”跟两种复盘做了一个Grid:
/ | 可以通用 | 无法通用(领域特定) |
---|---|---|
执行层 | 如何拆解复杂任务;如何快速熟悉陌生代码;如何设计可扩展的实验框架 | 怎么 profile 当前系统中的瓶颈;当前代码库的特定调优策略 |
战略层 | 怎么最快学习一个新领域;如何跑 baseline 并设计 ablation study;跟领域内同行交流什么 | 本领域里哪些问题值得做,哪些看起来新颖但价值不大;领域特定的 SOTA 对比策略 |
我们在讨论之前的工作干了什么时,可以先确定自己的问题落在grid哪里,明确自己问题的“尺度”。
利用AAR进行复盘
随后在讨论与复盘这个问题时,我推荐大家使用美军的AAR技术,它与体育运动中的“技战术讲解”(chalk talks)比较相似。AAR讨论通常会考虑以下4个方面的问题:
- 我们本打算做什么?
- 实际发生了什么情况?
- 为什么会发生这些情况?
- 下次我们将怎么做?
根据军队的经验,大约25%的时间用于讨论前两个问题,25%的时间用于第三个问题,50%的时间用于第四个问题。
接下来的“读论文”总结我将使用AAR方法,总结我在上一段研究中的问题。后面的总结我将略去AAR,直接展示我的思考。
如何读论文了解问题
无论是我上一段研究,还是我身边的学长学姐,几乎所有人在开始第一段研究时就会在读论文上遇到第一道关。
比如我之前想了解 LLM System 或者图计算等具体领域的问题。前沿领域跟课程不一样,它一般没有很好的书籍把发展脉络理清,并且很多时候是不能在一天内就有大概的理解的。
我当时精读第一篇论文花了2天。随后花了很多时间去读类似的论文。但是我总感觉自己困在山中。
为什么会有这种情况:
- 大部分论文的domain是狭窄的。 除了综述论文可能会对某个问题做具体的介绍,大部分论文的工作可能是”针对该问题的瓶颈A,做出2-3种优化策略“。这里边新手最容易掉陷阱的是”学习这2-3种策略是什么“,这也是为什么会花2-3天读第一篇。我们忽略了”瓶颈A“是什么这个最重要的问题。在刚接触一个问题时,我们比起方法,更应该先看瓶颈是什么。
- 我总想如上课一样知道所有知识。 我以前以为科研既然要突破,就得掌握突破前所有的知识再出发。事实证明这不对。边走边学习的效率反而会比先系统了解更高。当然这是建立在有基础知识底蕴的情况下,否则会非常容易做错误决定。
这两个互相矛盾的情况/事实,进而导致了我读论文慢的问题。
那么如何快速进入一个新的领域?
我使用的是图模型+BFS-DFS理论。每一篇文章都会解一个问题。每一篇文章都有方法。我们将”问题、方法、文章/书籍“三者建模成一个图模型:
当然如果你喜欢,你可以建立/拆解更多维度,比如”挑战“、”场景“ 等等。
BFS先建图: 略读+比较着读
因此我们的第一步工作是,明确我们的这个搜索空间图。随后针对每篇论文,思考他们在领域内的位置。具体的操作,章老师的循序渐进阅读法的介绍已经非常详细了: 清华计算机入学教育之“关于如何做科研的一些个人经验” - ZHANG Mingxing的文章 - 知乎
https://zhuanlan.zhihu.com/p/718156903
另一个我认为不错的例子是这个:大二科研经历复盘(三):个人知识体系的四个阶段 | 以优化工作流为目标地工作【长文干货】 - Markson的文章 - 知乎
https://zhuanlan.zhihu.com/p/720904479
综述的好处是它在空间图中链接的节点更多,因此你能一次性对图有更多了解。
比如我让GPT生成了 LLM system 的一个表格。我们BFS的目标就是生成这样的表格。
Paper | 问题 | 方法 |
---|---|---|
Megatron-LM | 单机/多GPU训练太慢 | 多个level的并行:数据、模型、流水线 |
ZeRO | 训练时数据并行内存大,优化内存 | 参数/梯度状态拆分 |
MoE | 推理加速 & scale | 路由部分 token |
vLLM | 在线推理的内存不好管理 | Page Attention |
因此你可以看到,BFS读文章不需要读完文章全部。比如实验、preliminary。甚至用AI会更快。重点是达到我们的这步目的。
DFS了解好文:精读+实验
好的文章影响深远,或者含有大量的思考及信息量。我修改了刚刚的图,颜色深代表这个技术/问题的意义及影响。因此想精读哪篇文章,自然不用多说了。我的画图技术有限,但是如果你把深度想象成3D的甚至是高维的,那么DFS就是在高维空间里搜索最有信息增益的节点。
因此 DFS操作下我们需要重点看Main Design,看实验,看代码,甚至自己跑一遍。如果我们刚刚接触一个领域,先从开源项目开始跑,多读读源码,发发笔记。自己手搓很有可能做不出来,或者会花很长时间(比如N个人月,一定要估算好成本)。
先做起来
拿到框架后其实就可以开始上手改动了,并且别怕失败。学会骑自行车不需要你先列出牛三和转动公式,跌20个跟头就会了。
在改的过程中,我的经验是看代码可以学的比PPT更快。同时大部分的问题在框架代码上基本是差不多的,因此熟悉一个框架后,对后续框架的熟悉速度肯定就更快了,并且还能整简历上,何乐而不为。
完成优先于完美
大部分的论文都只是验证一个想法可行性的小原型demo。从软件工程角度非常好理解,学术论文的时间/人力:往往就是 1–2 个博士生 + 几个 master,半年–一年时间。所以除非有非常强的资源支持,比如像 Sky Computing 组那样背后有大规模集群、长期团队,或者作者是 Jeff Dean 这种能横跨 idea 和工程的顶尖大牛,否则论文阶段更多只能做到「有趣且可行」,离真正的伟大系统还有很远的路。
因此上来就做一个“我要改变世界”的伟大系统是一个糟糕的想法。并且历史证明这样的想法也难以实现,比如 Multics 。比较成功的Unix,Linux都是从 Just for XXX 做起的。
快速学知识
了解问题后,在paper之外有很多好地方可以找到知识。
知识丰度最高的区域在各种talk里。
然后在知乎、X还有各种博客、会议里都有好文章。
多跑实验
我当时做研究时,就跑了一个模型一个dataset去测试。做了一个月后优化的不错,然后当时满心欢喜的换一个dataset,结果发现性能特别拉。后来完整实验后我才发现原来不同的算法在不同数据集上表现都很不一样。
每天做什么
每天醒来时做一个小计划,比如今天做三件事:写完这篇博客,写完这个测试案例。但是一定要有个计划。
另外完事最好都备份,都复盘。备份时要标明实验做的是什么。就我这个大脑的Memory,基本都会忘记的。
什么样的工作是好工作
我喜欢从两个维度来看:
- 解决得好: 专注、彻底、好用
- 影响得深: 思想深刻、影响广泛
我们再加入”科研/paper写作“和”工程/代码实现“这个角度。
解决得好
一个解决得好的科研工作科研应该是:
科研工作:
- 问题动机清楚,背景、现状与挑战交代到位,让人看了就觉得「这确实是个值得做的问题」。
- 方法有的放矢,紧扣问题本质,而不是堆复杂度。最好还很优雅。
这方面我喜欢的工作有PPoPP24 的 ConvStencil: Transform Stencil Computation to Matrix Multiplication on Tensor Cores。ConvStencil,在新硬件下用CNN卷积的类似方法来加速一个传统HPC问题,角度很好,解决方法也环环相扣。又或者是SIGMOD21的Risgraph RisGraph,在流图处理上给了我很多的想法。
工程项目:
- 开源好用:文档齐全,示例清晰,让人快速上手。
- 代码清晰:结构简单易懂,方便二次开发和修改。
比较不错的工作比如 Llama.cpp llama.cpp: LLM inference in C/C++ , Asterinas https://github.com/asterinas/asterinas.git ,Taskflow。
影响得深
一个影响得深的科研工作科研应该是:
科研上:思考深刻,给人很多相关的启发。或者
比如 scaling law,Pathway,Exokernel和Unikernel,Scalability! But at what COST
还有就是大公司的经验教训,比如当年还是facebook的 Fail at Scale: Reliability in the face of rapid change
工程上:项目被用在工业界中,有更多的价值。或者更多的经验
这个不必多说,像vllm,mooncake,Megatron-LM,以及大数据里的一堆框架,比如流处理的flink。
科研工作 | 工程项目 | |
---|---|---|
解决得好 | - 动机清楚:问题选择得好,背景与挑战交代到位 - 方法紧扣本质,不堆复杂度,甚至优雅 | - 好用:文档齐全+示例友好,快速上手 - 代码清晰:结构简洁,方便二次开发 |
影响得深 | - 思想深刻:提出新范式/新框架/新视角 - 社区引用、后续工作多 📌 例子: MapReduce, GNN 初期工作 | - 开源生态活跃:有大量用户和贡献者 - 被广泛集成到其他系统 📌 例子: LLVM, PyTorch |
Passion
Passion不能当饭吃。当一份工作半年没有效果,你能不能维持住那份狂热和坚持?那怎么办,放弃吗?我感觉身边的博士放弃一个课题就像跟男朋友/女朋友分手一样痛苦。老人曾说多谈恋爱才知道什么是爱情,可能多做才知道什么是passion吧。
我在老板上见过passion。他始终相信X领域一定存在什么我们可以发掘。他的belief坚定到我做了40页PPT都无法打动他。结果我自己再继续go deep,我也相信了。这就跟传销和犯罪一样。
我经常觉得做学术就是在tmd抢银行,几个劫匪偷偷私自开组会,说我们得敲NSF一票大的,奔着个金库就开始挖掘了。我们要确认里边是否有金子,并且还得确认别的劫匪没有偷走我们的金库。
是吧,干票大的。
走弯路
在最后的paper定稿前,你肯定会走一堆的弯路。就跟在迷宫打怪一样,你探索的很多地方可能最后都是进行不下去的路。在写文章时我总遗憾,哎前面有两个月看的东西都没用什么的。但是其实不会。一方面这些探索总会在后边显现,另一方面弯路是正常的。
如果你今天一事无成,或者猛敲1000行C++后什么都没有,试试这句话: 我今天不是在做“实现一个 idea”,而是在做“杀死一个坏 idea”。
失败
“如何面对失败”,是我认为做研究里最精华的一部分。
我可能还算幸运,但我们的研究头五个月几乎一点突破都没有,前期很多实验也都是失败的。印象最深的一天,是有个老师听完我想了四个月的想法后,直接说我们的思路是错的,还给出了他的理由。
那天真的挺难过,可以说是这段研究里最黑暗的一天。毕竟这个老师算是我们这个方向的大牛,结果被大牛泼冷水了。老板没跟我说话。我想他也有点难过吧。
但第二天我又想:他读的这方向的论文没我多,也没做过实验,他说错就错?说不定是他说错了呢? 我就要证明给他看。
最后结果是——他说对了一半:很多挑战确实被他说中了,我在研究中也改换成了一个类似但是更重要的问题,我们还是跑出了一个真正能用的系统。可能离“高性能”还有点距离,但是至少做了一次还可以的尝试。
回头看这段经历让我明白:失败本身就是科研的一部分,而逆商体现在能不能从质疑中看见问题本质,并继续往前走。
另外有篇文章我很喜欢,来自斯迈尔斯的《勇气来源于“不合时宜”的偏执》。
[勇气来源于“不合时宜”的偏执 - 道客巴巴](https://www.doc88.com/p-7704456775605.html
How to build your own system?
其实就像计算机系统一样,系统人最后也要有your own system。做好你的体系结构,去滚雪球,去做长线规划,这样才能越做越深。
非常简单,如果我是一个Linux 系统,这就是我的图。这个系统我相信还会继续丰富下去。但是我会跟着它去补充。
另外我认为有两个项目我做的非常好的:
第一个是学校的高级计算机系统课程的repo(我上那年还是cpp),做的矩阵乘法,cuda类等project。这是我做研究的coding基础。
另一个是我在完成这篇工作后,我在想我接下来做什么,博士做什么。这是一个很重要的问题,如果我去做研究,结果等做完了才发现这个工作已经是夕阳了,还是有点痛苦的对吧。所以我就把HPC的顶会,24年的SC全部读了一遍。数值计算的文章也读。这部分的读法跟BFS差不多,就是了解HPC有什么方向。然后我的研究的方向在这个big figure里的什么地方。
https://github.com/HaibinLai/SC24-paper-reading.git
这两个工作是我在建自己的系统的一个过程。就像一拳超人一样,我带着的是我几年的经历
和课程来挥这一拳。
Do something fXXking hard
每次我跟别人介绍我的工作,他们都说我做的东西挺hardcore的。
仔细想想确实还有点hardcore吧,上一段工作的代码量可能在8000-10000行这样,并且逻辑性算法性的代码占比还挺多。
但是我就喜欢做难的,老板也喜欢。人生很长,长到我们能做出一艘大船。人生也很短,青春就这几年。为什么不能出发,像芝加哥那群不长眼睛的司机一样,猛踩油门呢?
We choose to go to the moon, not because it's easy, but because it's hard.
If you want to be a phd, be a phd first
一个很简单的推理问题:3年后的我和现在的我有什么区别?首先是负面的:
- 我的精力会下降。很简单,因为年龄增加了。
- 我的基础课程知识增长量不大。博0博1的朋友,你的知识量跟大四比在哪里增加了?我可以修正这条。
- 博0阶段也要上课,有更多的现实压力。其实跟本科比,空余时间也没有多少,精神压力更大。
然后是正面的:
- 我的system会更完善。比如我在HPC里会有更多的经验,我知道哪些是好文章,哪些是好工作。我见过更多的工作。
- 我的人脉。我认识更多的朋友,更多的老师。
所以,我得出一条结论:如果做一个起步的研究,博0和大三没区别。并且博士还有毕业压力,导师压力,而哥们在组里怎么玩都行。
因此从头到尾我都是按博士要求自己。我也很感谢我的老师对我的信任和培养,敢让我独立去探索一个全新的问题,train me like a phd。
不能搞军国主义
哥们开始做研究时纯纯把自己当日本人整。经常通宵,然后睡眠很少,然后疯狂做实验。
事实证明睡觉和作息非常重要。休息好了事倍功半。并且我的大部分idea都不是坐实验室椅子坐出来的,coding也不是“本周我一定要做完ABC所有功能”就能憋出来的。另外吃饭好好吃。最好就是达到一个从心所欲而不逾矩的境界。
另一个是最好不要show hand。梭哈很爽,一次性全学完也有成就感,但是一步一个脚印是最稳的。另外再忙也要放松,比如多逛逛城市,多去旅游。
我不知道我是不是work-life balance,当然这是我已经将科研当作生活了。我经常就每天吃好吃的,每天玩玩游戏,然后就忙里偷闲做做研究。(或者闲里偷忙,我一般选这个)
多social
无论去工业界找场景,还是去认识高年级的phd,多去social,多去认识别人。
Social可以让你知道同行在做什么,有什么思路,前沿的研究是什么,场景是什么。这对于system研究非常重要。另一个点是抗抑郁,病友交流还是很欢乐的。
这方面老师的作用很大。我去了好几个会,跟不同的老师meeting,开始都是老板邀约介绍。推荐大家看这篇博客:UC Berkeley SkyLab博后一年之学术界如何做sys/net for ML - 洋哥的文章 - 知乎
https://zhuanlan.zhihu.com/p/1921065129514100586
另一个好idea是去参加自己项目的开源社区。别怕提问,回答错了也不会扣你的GPA。
我目前在想自己组织一个活动,idea是邀请我们学校毕业了继续做系统研究的同学一起来讨论系统研究的经验。如果办成功了再来分享。
多talk,多表达
这部分跟social的区别在于,我经常学习是靠表达学习的。
就像费曼学习法那样,每次我想系统学个东西,我就会做个talk,然后教大家。比如我的B站号 笑到猝死的家伙投稿视频
另一个点在于如何跟老板talk。老板很多时候是起指导作用,然后他的大脑装不下你的那么多技术原理。所以要勤画图,或者做总结。哪怕就一张表格。比如我之前一个机器学习project做的一个表格,展示我们项目跟别人项目的不同。
这样的表格我做了好几个,老板都超级喜欢的~,估计放基金本子里大伙也喜闻乐见。
在知乎等社交媒体里show的另一个好处是给自己贴广告一样。如果你经常看的一个技术博主突然想干XXX,多多少少你也觉得应该能成
如果我读博,我会怎么评价自己?
虽然博士没有评分,但我个人会给博士生涯分为“及格”、“良好”、“优秀” 三个档次。当然这是我给我自己的要求,不是给别人的要求。并且如果我真读phd了,可能我会把phd毕业当成100分哈哈哈。
什么样的博士是“及格”? 我认为毕业就是及格的。另一个及格的标准是能独立的去做一个课题然后去独立发文章。
一个“良好”的博士是对一个问题能循序渐进,成为你的领域的重要人物。非常简单,比如如果一个企业想解决一个方向,他们发现你的经验是最丰富的,有最多的研究。另一个是你能link上很多人。在link后,一个“良好”的博士应该能带领一个团队。“及格”的博士单打独斗比较多。但是能落地的项目基本都是团队作战,你能不能成为一个团队的领导或者核心?在遇到“选方向A/方向B”、“框架A/框架B”时能不能带领团队选出来+设计出来?
一个“优秀”的博士能给社区做出贡献,做出真正有影响力的工作。比如vllm,spark,你能不能在你的领域内做出这样的项目?这已经需要一个团队,然后需要规划、沟通,需要很多超出你代码能力以外的东西。同时你有没有research taste?如果一个学弟成为了你的研究生,他提了做A/B项目,你能pick出哪个项目更好吗?
可能在我的眼光里,读博士跟创业差不多,(都有“赌”的成分哈哈哈)。都是要从零开始研究,带团队,找方向。这也是我认为读博士跟读硕+工作/本科+工作的一个很大区别。当你在苦苦的读文章做实验领学校的微博工资时,你的同学在大厂里已经拿着几十万的工资。那么你在这做工作的价值在哪里?
这是我给我自己的标准。对于我而言一个空有一个"Dr."没什么用。古者富贵而名摩灭,不可胜记,唯倜傥非常之人称焉。 你能成为非常之人吗?当然,如果不行,“及格”已经很厉害了!(不及格也不错,毕竟我还没有及格过)
所以我想因此成为什么样的人?我想成为一个疯子,疯到能被记载在《在路上》那种。听说博士里疯的人挺多,我就来了。
“The only people for me are the mad ones, the ones who are mad to live, mad to talk, mad to be saved, desirous of everything at the same time, the ones who never yawn or say a commonplace thing, but burn, burn, burn like fabulous yellow roman candles exploding like spiders across the stars and in the middle you see the blue centerlight pop and everybody goes ‘Awww!”
— Jack Kerouac
我的梦想,以及为什么做科研
我的梦想就是成为像我导师这样的人。培养学生,栽种热情,做点对社会有意义的科研工作。
我做科研起初纯粹只是觉得好玩,做着做着好奇心变成了热爱。在组里做研究的日子也很开心,有一种特别的快乐。做系统看代码很难,但是我发现我有这方面的恒心吧。
我希望我也能成为这样的老师,就像《OSTEP》点燃我那样,去点燃别人。
至于为什么科研。我就是喜欢探索。我很喜欢朱光潜在《谈美》里的两段话,我想以此来表达我的想法:
“
哲学和科学穷到极境,都是要满足求知的欲望。每个哲学家和科学家对于他自己见到的一点真理(无论他究竟是不是真理)都觉得有趣味,都用一股子热忱去欣赏它。真理在离开实用而成为情趣中心时就已经是美感的对象了,科学家去寻求这一类的事实,穷到究竟,也正是因为它们可以摄魂震魄,所以科学的活动也还是一种艺术的活动,不但善与美是一体的,真与美也没有隔阂。
情趣越丰富,生活也愈美满,所谓人生的艺术化就是人生的情趣化。“觉得有趣味”就是欣赏,你是否知道生活,就看你对许多事物是否能够欣赏。欣赏也就是“无所为而有为的玩索”,在欣赏时,人和神仙一样自由,一样有福。人愈能摆脱肉体需求的限制而做自由活动,则离神亦愈近。
”
用今天网络流行语就是:“他已经彻底沉浸在自己的艺术中了。”
参考文献
这里的参考文章其实更像是优秀文章分享。我记得在OSTEP这本书里,作者老是会风趣幽默在章节末尾推荐文章,并且附上comments,所以我这里也一样。欢迎大家一起阅读,一起讨论。这里我就偷懒,就放链接了~
[1] 计算机系本科生开展科研学习的九问九答 - 知乎 老师讲的非常的清晰。相信刚刚起步的同学看到肯定有收获!
[2] 指导计算机专业本科生开展科研工作的体会 - 知乎 一篇优秀的在期刊上的文章!
[3] 一个菜鸟有关科研心态的年终复盘(2021) - 简书 和我一样也是一年的科研复盘。如果我是抽象类,他就是实例哈哈。
[4] 如何培养 Research Taste? | Bojie Li 李博杰老师的心得,看完真的收获很大。看完后我重审了自己做研究的想法,动机。
[5] GAMES003-图形视觉科研基本素养 https://www.bilibili.com/video/BV1RitTezEa9/?share_source=copy_web&vd_source=72eac555730ba7e7a64f9fa1d7f2b2d4 教会了我如何划分自己的科研时间段,如何做好基本的科研战略决策!
[6] 成为李培楠:中国首个星际世界冠军,也是最后一个 - 知乎 “当我0比2的时候,我告诉自己,无所谓输或者赢,我喜欢星际争霸,我享受这个游戏,我享受这个舞台,只要像训练一样打就好了。”
[7] 清华计算机入学教育之“关于如何做科研的一些个人经验” - ZHANG Mingxing的文章 - 知乎
https://zhuanlan.zhihu.com/p/718156903
[8] 事后回顾法:美国军队的行动学习-CKO学习型组织网 Powered by 北京学而管理咨询有限公司
[9] 【本科生完全就可以开始科研滚雪球,但他们不知道】https://www.bilibili.com/video/BV1CGgLzdEQK?vd_source=72eac555730ba7e7a64f9fa1d7f2b2d4