基础和取舍

没想到居然一年多没写这样思考性的文字了,ChatGPT后遗症有点大。去年底换工作再加上孩子出生,生活一下子变得异常充实了起来。家庭和育儿方面成长很多,从一开始的没耐心,到逐步理解包容、感同身受(无论对爱人还是孩子),一年不到时间改变了非常多。工作方面也取得了一些成果,强度和深度比此前所有工作都高了一个级别,虽然很忙,但非常开心。比较不满意的是过于忙碌导致没时间夯实基础,总感觉自己比较浮。正好国庆假期,重新整理一下思路。

“基础不牢,地动山摇”,我对这句话深以为然,也在很多大神那里听到过这句教诲。然而这些年下来,感觉自己做的并不好。我的人生方向、理想、目标都是比较清晰的,这源于之前十几年的思考和实践。但要想真正实现理想却是需要踏踏实实、一步一步来的。尤其是算法这个方向,基础知识异常庞杂,从学科上来看,数学和计算机(可能还有哲学)是基础中的基础。但我们都知道,即便是这两个学科很小的一撮知识,那也是N多个专业的方向。再加上按日更新的算法领域,恐怕很难有人说能掌握全部。

我在自然语言处理领域深耕多年,去年年底又专项多模态,算是再给自己一个新的挑战。当然也是觉得这个方向不错,各有所求,一拍即合,从入职时的自然语言处理大模型工程师转向了多模态大模型工程师。接下来就是大量的调研、实验,从语音基础知识到各类模型,还需要了解一些图像方面的算法。GPT-4o的出现更是让我们压力倍增——又是一座要攀登的大山。同时,文本方向我也没有想要放掉,特别关注模型架构、继续训练、上下文压缩、蒸馏量化剪枝、推理性能等方向。另外,由于一直以来对强化学习的兴趣,也非常关注其在大模型方向的进展。再加上一些开源项目、商业合作等,总结一个字——忙。

我觉得可能是自己想要的太多,但很多东西的确很难取舍。我也一直在间隙地思考这个问题——我真的该关注这么多东西吗?我要把它们了解到什么程度?我要做出什么成果?这些问题其实也是我长期思考的问题,可惜一直没有得到什么答案。不过昨晚回家高铁上带娃间隙看的一本书给了我一些启发,是飞哥的《深入理解Linux网络》,关注他公众号很久了,这本书刚出时就买了签名版,结果一直没怎么看。这次回家收拾东西,我就想路上看看吧。书确实很底层,感觉有点像有经验之人给的一幅简略地图,看的很爽,但要想真正理解还得自己亲手实践。这本书(虽然还没看完)对我的最大收获不只是知识,更是方法。我好像已经找到了如何解决前面提到的基础和取舍问题的思路。更通俗点讲,这其实是一个如何学习的问题。

我有时候是个完美主义者,学习一样东西总喜欢从头到尾一把捋完。我记得自己在刚转行那几年(起码16-19这几年)刷了很多课、看了很多专著,国内国外的都有,讲实话质量都很好。虽然不一定对后面的工作有直接帮助,但多少是有积极影响的。慢慢到后来就不刷课了,也很少从头到尾看专著了,基本就是论文+缺哪儿看哪儿,差不多是主题式学习,直到现在也是。这个方法其实挺好的,是一个逐步构建自己知识体系的过程,但如此前所言,基础和取舍问题是两个大问题。论文看得多,发现不知道的更多,缺哪儿看哪儿,结果发现哪儿都缺哪儿都得看……

飞哥的思路给了我思路,飞哥的思路是这样的:工作中遇到一个问题——先上网搜资料解决——思考为什么——探索底层实现理解为什么——整理输出文章——文章汇编成书。大部分人(这里主要说我)到第二步基本就结束了,因为我还需要去看论文、去做实验。我感觉自己就好像古希腊神话里那个往上顶推石头的人一样(抱歉不记得名字了),不同的是,我感觉自己后面还有一头狼在虎视眈眈。飞哥的思路让我看到了跳出循环的方案,书中有个观点也让我思考了很久,大概意思是说“很多时候觉得新技术难是因为对旧的技术理解不透彻”——我深以为然。其实我近期也在逐步向这个方向思考,所以和飞哥在这里共鸣很大。这里说点题外话,很多事情在我们没有自己亲自经历时是很难有相应的认识的。书里刚刚提到的观点在我刚拿到这本书时就看到了,当时并没有什么体会。只有当我自己遇到困惑了、去思考和实践了,有了一定的感受才能真正(也许还不是真正)认识到。当然,看到时只是共鸣,认识还需要进一步思考,不过有了前面的基础,想清楚就很快了。

这个思路对有经验的工作者来说应该是优于主题学习的,原因很简单(之前居然没意识到!)——只有工作中的项目(尤其是大项目)才能让技能得到锤炼。如果只是停留在刷各种课程和论文,那很难在一个点深挖下去(也没有哪个课程会这么设计),也就难以做到真正理解。但是还是会有很多工作多年的人“热衷于”刷课,一方面可能是了解新方向的需要,另一方面刷课(或类似行为)真的会让人有“我今天又学习了”的良好感觉,而且这玩意儿时间长了还上瘾。我觉得这里还有个很大的原因是很多人工作内和工作外是割裂的,这种割裂有时候是不自知的,也有时候是无奈之举(比如公务员喜欢搞音乐)。

好了,回到我们要讨论的主题,基础和取舍。既然是将算法作为长期事业,那基础是一定要牢靠的;而算法是个日新月异的行业,前沿不能不懂,所以其实不存在取舍问题。也就是说,既要基础坚固,同时要掌握前沿。根据飞哥的思路,我认为思路应该是这样的:工作中要解决的/或相关的问题——搜各种相关资料——多问几个为什么——进一步探索到最底层——整理输出。每一次都应该探到最深处,一次性解决掉这一个问题,日积月累自然能以点带面,既保证基础,又保证前沿。这种思路是自下而上的,而不是预先设定几个主题,比如我前面说的蒸馏量化、推理、模型架构啊什么的。举例来说,我现在上线了一个新模型,我应该怎么在最小的资源配置下实现最大服务性能提升。这个问题几乎就涉及到了所有我感兴趣的方向,而且既包括算法、也包括工程,既有基础、也有前沿。而且这样做还有个好处,输出的内容大概率是网上找不到的,因为很少有人和我的工作以及路径一模一样。其实不说内容,就单单最后整理出来的大纲估计都不可能遇到重复的。

现在压力就小了很多,我只需要关注工作中的具体项目即可,以点带面,而不必拘泥于我必须要“学习”哪些方面的知识。其实即使去学习了,大概率和实际应用也是割裂的,可谓是事倍功半。当写到这里的时候,我脑海里已经冒出了好几个工作相关的问题了,而且肉眼可见挖下去都是一个深坑(平时真的就和稀泥了……放着金山不挖,却跑去“学习”感兴趣的知识),我估计博客内容要出现大变化了;)关于博客内容我早就不满足于写笔记了,可惜一直没找到很好的方向,嚯,现在一并解决了,希望自己日后能更新的勤一些。