Keep hands dirty, and keep mind clear.
人生能有几个 20 岁呢?寥寥三四个吧。我想在这个重要的节点,记录下我的一些思考,算是对过往的总结和反思?一些想法或许会很幼稚,甚至说错误,还望见谅,当然更希望你能指出来,我们共同进步。
祝自己生日快乐。
一年前,我总是会有这样的疑问:我究竟应该是学深,还是学广呢?学深的话,虽然能够很快地得到某个领域的前沿知识,但是万一哪天这个领域不行了呢?到时候的退路在哪里呢?学广的话,虽然看上去像是样样都精通了,但是没有深入,也不会有较高的成就。
在我没有进入实验室之前,我基本上是按照广度在进行学习:我按照 csdiy 上的公开课,以及自己找的一些公开课、博客开始学习,先后接触了数学分析、线代、概统、随机过程、凸优化,以及之后的机器学习、深度学习、cv、nlp、slp、AIGC、大模型等等。我当时是这样感觉的:哇,我学了好多新东西欸。但是也会有隐隐的担忧:我学了这些,对于之后的科研/实习等等的帮助会有多大呢?
之后进入实验室,正式开始科研学习,迅速地深入一个领域之后,我突然感觉到,我之前学习的这么多课,似乎并没有特别大的帮助(似乎就 linux、conda、docker、pytorch 有点帮助);或许从一开始,我就应该直接开始学科研需要用到的东西,这样或许会更快,或许也会更容易出成果。于是在之后的大半年时间里,我基本上没有再碰公开课这一类增加广度的资料,而是一头扎在了前沿的 paper、项目中(当然,敝人不才,没能做出什么有影响力的工作)。
然而,当我有一天开始思考未来的发展方向的时候,却发现这样做未免太过激进——我没有给自己留下充足的后路,倘若等到我就业的时候,我研究的东西已经凉凉了,应该怎么办?我还有其他路径可以走吗?换句话说,这个社会的容错率真的容纳得下现在这样的我吗?想必是不能的。
那么,学深和学广,如何抉择?
而后来我读到了这样一篇教程,它指出的几点让我茅塞顿开:
它里面所讲的工作与学习的关系,不正就是我所不得解的学深与学广的关系吗?我似乎可以把学习视作一个金字塔形状的结构:底层是代表了广度,而顶部则代表了高度。受限于社会形式,我们不得不去在底层未能牢实的基础上就开始深层次的探索;然而这不应该是我们放弃广度学习的理由——把路走宽永远是对的,深入学习(不管是现在正在进行的,还是未来将会发生的)一定会依赖于牢实的基础,which 需要通过广度的学习来补足;为了未来(可能的)解决一个更高纬度、更有意义的问题的时候,无论是广度,还是深度,都是不可或缺的一部分(这方面的例子可以看看莎莎写的如何看待2022年秋招Java后端开发岗一片红海?以及半条命)。
关于这个话题更多的思辨,前人之述已备,我就不献丑了。不过可以大概讲讲我现在的想法:我准备找到一个方向深耕的同时,利用本科剩下的时光,努力打牢各个方面的基础,以备(研究生)将要毕业时能够毫不费力地追逐那时候的热点。
我其实一直认为人类就是一个进化了数百万年的某种模型 + RL 机制,不管是从训练婴幼儿说话,还是到上课、学会某项技能,实质上都是对于自己的反复训练,只不过这个过程相比于如今的 LLM 之辈,“效率”高了不知多少。
我向来都将知识分为三种:一种是自己内化了的知识,另一种是从外界汲取了但是尚未内化的知识,最后一种是外界的、我尚未汲取的知识。更新它们在我看来和 LLM 的 forward 以及 backward 有异曲同工之妙。
当我从外界获取知识时(听课、读论文、读博客、与人讨论),我将它比作 forward,在此期间我从书上获得了“激活值”,并进行了恰当的组织与重构(简单记录笔记);当我对获取到的知识进行思考时,我是在进行 backward,获取到的“梯度”将会用于更新我内化了的知识;最后,我会将这些思考进行记录,舍弃一些或是修改一些(梯度剪裁),同时更新内化知识。
这个过程看似很美好,实则存在一些显而易见的问题:
这时候,写一点简单的笔记、写一些自己的思考的重要性就得以体现了:它们就是 checkpoints!当结束当前的进展时,我们需要记录当前的状态,以避免下次重新的训练(recompute);为了下一次能够迅速的将几个可能的环节串联到一起,就需要做好 rag,即做好一个索引状态并存储下来,方便下次直接检索。另外,显而易见的,我们需要反复几次地进行记忆重现(replay),以避免遗忘。
当然,我们在同一时间也会遇到 multi task 的问题,而这,正需要 scheduler:对于若干个 requests,如何合理分配 running、waiting、swap 等状态的 requests。对于每一个 request,也会有相对应的 kv cache,当 request 过多时,如何合理的安排 kv cache 的调度方式,则需要每个人为自己思考了。
目前为止,我(只能说是)接触了许多领域(而非深入研究),例如说 TTS、多模态、分布式推理等等,也遇见了并和许多人交流了挺多,虽然没能有什么值得一提的产出,但是关于方向选择,关于怎么向前去迈出步子,我想我也有了一定的体会。
首先我想说的是,多尝试,多涉足。以算法为例,在这块刚刚起步的人其实是没有什么顾虑的,他们只需要扎扎实实把手上的机器学习、深度学习等等课程学会就好了,而不需要考虑以后要去做大模型,3D,多模态,语音,agent,mlsys 还是其他什么。而到了要考虑后者的时候,未免就会陷入一些迷茫:我到底该去做哪个?是考虑以后工作更多一点,还是学界更多一点,或者是自己的兴趣爱好多一点?
如果我能重来一遍,我想我大概会去各个方向 roll 一圈吧,各抽一两周或者至多一个月来了解它们在做什么、有什么前沿进展,或者说日后的工业、学界的发展前景等等,而非仓促地加入某一个实验室(打工)。另外,也不能局限于本校,更应该到处看看,比方说外校、企业、研究院等等,因为一来本校不一定有那么多可供你选择的方向,二来校内资源可能也会比较有限。
可能你会说,我什么都不会,怎么去实习呢?人家公司/实验室怎么会要自己这种小菜鸟呢?然而,就我所观察到的,说出这种话的同学往往具备以下几个特点:
但其实,你至少尝试过就会知道,并没有想象中的那么困难,并且实习也不等同于上手工作,(大多数)也是会有一个学习的过程的。实习的意义不是为了现在就工作赚钱/发 paper,而是为了理解业务、学习技术,为将来进大厂/读研究生/出国做准备。
好吧似乎扯远了,我们回到方向选择的正题上来。我有过一个大(而无用?)的想法:人活着不能只是为了几台机器吧(笑),是不是应该做一些更有意义的事情呢。除了在现在的社会中被迫的内卷,被各种指标量化,人类难道不应该仰望星空?难道不应该有自己的,更宏大的追求?不过为了追求这种,也必须要之前做好一定的经济物质基础,就好像人起跳前,必定需要下蹲一样。
Anyway,有时候,想要向前一步,意味着必须舍弃一些东西;而有些东西是骨子里的,注定放不下。我不希望日后为了其他什么的放下我内心深处真正想要的东西,永远都不要。
关于做研究,我想目前为止只能对自己问出下面的三个问题:
而之后,我应该能逐渐回答他们吧。
我希望自己的想法能够被记录,被别人看到,希望有一天有人可以和我一起讨论这些想法,希望能够得到交流和共鸣。所以,我想要向外输出,原因就是这样简单。
我也知道自己的很多想法很幼稚,很蠢,但我也不害怕被人嘲笑,被人讽刺,被人一笑而过。有则改之,无则加勉,就这样很足够了——笑我的人得到了笑的满足,而我得到了更进一步的可能性。
我阅读过 Markson、OneChapter、Emiya、Marisa、星爷等等人的自述,他们的喜悦、疲惫、放松、迷茫,我也都感受过,因而我更能理解这份通过不管是文字还是视频传递的奇妙感受——那时候我们仿佛是一个人,他们的种种经历似乎也投射到我的生活中来,而又逐渐和自己的过往一点点重叠。我曾听说所有人是一张网的关系,而我认为网上的每个节点并非一个个单独的人,而是一群相似的人的集合体。而输出,就是让这样一群相似的人能够有机会,最终走到一起。
也正是通过这些,认识了好多人,不管是 abc 群、后来自己创建的小群聊、水源,还是别的什么地方,真是何其有幸。
再来说说任务管理吧。管理任务,其实来源是因为时间是有限的,而任务是做不完的,那么时间哪里来呢?当然每个人每天的时间都只有 24 小时啦,根据我的经验,大抵有以下几点:
另外,最好是不要养成拖延症的习惯,这样并不好。但是关于拖延症也有如下一些观点需要注意:
以前写过一篇关于流式规划的,现在想来过于幼稚。如今我一般是这样进行任务安排的:
最后引用一段不知道从哪里看到的话,希望自己不要变成一个工作狂:
现在才明白,吃喝玩乐并不等于虚度光阴,吃苦耐劳也不等于意义非凡。当你焦虑、精神内耗的时候,请一定要记得,人生是各种各样体验的叠加。只要你想,你就可以去做那些看似毫无意义的事情,比如说发呆、看日出、数星星、坐在草地上一整天…你的体验就是意义。人生不一定要去做大家世俗认为有意义的事情才对,也不是非得按照社会主流价值观去生活,比如,学生一定要上名牌大学,上了大学就一定要读研、读了研就一定要去大厂卷生卷死。这些都是别人给的定义,是否执行只看我们自己。谁都是第一次来人世间,意义是我们自己赋予的,人生是旷野不是轨道,只要你当下是享受的,那么这个活动就是有意义的,那人生就是有意义的
我以和外界交互的方式,认识我自己。我和他人交流,然后观察自己的反应;我阅读这个世界,然后留意内心的想法。我感到向内探索自己实在困难,于是向外求索。
所以我自己是什么呢?我是不是一个平庸的人(时常感觉到自己很平庸)?或者说我自己到底是怎么样的一个人?
我想到目前,我还不能说非常清晰的认识自己,往后也会努力向这方面发展吧。
再次祝自己生日快乐🥳