转行机器学习一周年 & 从业十余年杂谈

2023 年 5 月,我已经在川大 KDE Lab 渡过了近一年浑浑噩噩的硕士研究生时光。这时,刚从美国归来的唐老师给我的学术生涯带来了一丝转机,从此我便追随唐老师,走上了 ML(Machine Learning,机器学习) 研究的不归路。接下来的一年里,我完成了数次顶会、顶刊投稿。虽然目前还没中,但明显感觉到已经摸到了科研的技巧,明显比大四和研一的时候好很多了。这些事情还要一点点往回说。研究生选择 KDE Lab 是因为段老师待我不薄,从 2018 年进入川大以来一直都很照顾我。既然对未来的研究方向非常迷茫,不如选择一个自己熟悉的老师。但是从大四进入实验室以来,经过一年多的科研训练,依旧还是很难对知识图谱相关的研究方向产生兴趣。

我曾经是一名野生程序员,虽然从小学开始就已经在父亲的影响下开始学习 Visual Basic 等非常基础的编程语言,但真正的从业生涯要追溯到 2013 年初,也就是我初一的时候。那时候,我在学校的科技展上看到了 C++ 编程语言,觉得很酷,就从书店购买了一本《Accelerated C++》自学入门。没想到这个选择影响了我十年之久——后面的十年里,我与编程语言、底层系统结下了不解之缘,于 2017 年在 C++ 等底层语言思想的影响下设计并编写了 Covariant Script 编程语言,并为其编写了完善、独立的工具链。这件事情帮助我通过自主招生进入了四川大学,这是我当初在设计 CovScript 时未曾设想过的。这件事同样帮助我开启了硕士研究生的生涯——因为我是以“双特生”身份进入的四川大学,双特生只需通过吴玉章学院每年一度的专家考核即可获得保研资格,不需要通过绩点、比赛等方式与大多数普通同学竞争。这虽然事实上并没有降低多少难度(每年考核我都发怵),却帮助我能更加专注于专业领域的研究。作为结果,本科毕业时我交出了基于 CovScript 编写的高效实时 LR Parser Generator 作为答卷,我自己对于这个成果非常骄傲,因为这不仅证明了我自己在 Paring 算法方面的深刻理解,也证明了我设计的编程语言足以完成这种复杂的工作。也就是说,经过大学本科四年的努力,我顺利完成了野路子到科班的转变。

看了这些,聪明的读者肯定明白了我为什么进入硕士研究生会感到非常不适应:我将近十年以来的技术栈可以说和知识图谱没半点儿关系啊!但为什么同样都是没关系,为啥我转行做 ML 却很顺利呢?答案是:都不顺利。大家都知道,ML 领域的两大框架,TensorFlow 和 PyTorch,都是以 Python 为载体的。但我一直在和同学、同事、朋友们说,在 2023 年 5 月之前我连 Python 都不会写,这一点都不是开玩笑和凡尔赛,我学习 Python 和 PyTorch 的过程也是用不少头发换来的(多亏我爸妈送我一头浓密的头发,年轻时掉一些不要紧)。

聪明的你肯定又要问了,为什么我做 ML 能做的动呢?这就不得不提到以 ChatGPT 为首的生成式人工智能(AGI,Artificial Generative Intelligence)为 ML 领域带来的巨大的革新了。在此之前,ML 解决实际问题依赖于为特定领域设计非通用型的神经网络,大模型(LLM,Large Language Models)的出现让全世界看到了通用人工智能的可能性。但大模型有个很致命的问题就是太耗资源了,无论是预训练(Pre-training)、微调(SFT,Supervised Fine-Tuning)、偏好对齐(RLHF,Reinforce Learning by Human Feedback),还是推理(Inference),都需要算力集群才撑的起来。现在(2024 年 9 月)来看这些都不是很大的问题了,无论是小模型的发展还是模型蒸馏(Distillation)、剪枝(Pruning)和量化(Quantization)等小型化技术,都较好的解决了大模型消耗资源的问题。但在 2023 年 5 月,这些问题都没得到很好的解决,因此我看到了在软件基础设施(Infrastructure)和参数高效微调(PEFT,Parameter Efficient Fine-Tuning)方面的巨大机遇。你说巧不巧,到今年正好碰上了小模型(SLM,Small Language Models)的爆发,以 Gemma、Phi 为首的小模型开始逐渐在细分领域替代传统大模型。

所以啊,我给我自己总结的性格特点是,如果有一样东西没有实际的意义,我根本学不进去。这就是为什么一直以来我数学都不太好,因为数学里大多数概念都太抽象了。说到数学,我不得不想到从高中开始就被各种老师谆谆教导,计算机里面数学很重要、数学好好学,但直到我自己开始做 ML 方向的科研之后,才真正体会到数学的重要性。曾经的我 Naive 地以为人工智能/机器学习净是一堆炼丹炼出来的概率模型。这句话一半对,一半错。对是对在机器学习确实是基于概率模型,它并不是一种通过传统编码方式产生的 Deterministic Turing Machine(确定性图灵机,实际上这也只是理想状态);错是错在机器学习的炼丹和规则都是有据可寻的,包括最常见的各类正则化方法、激活函数、梯度下降、交叉熵等,均建立在扎实的数学推导上。这其实是挺让我惊讶的,实际上是打了我前几年宣称的言论——“数学不重要”的脸,充分证明了人都是会变的(误)随着学识的增长,会逐渐消除年轻时对绝大多数事物的偏见

上一次写类似的博客是在刚考上四川大学的时候,其实有一段时间没有类似的心情和感想写博客了,主要是因为自己来到成都后的六年以来发生了太多事情,我自己的见识、性格和经历也以年为单位发生了数次巨大的转变。我自己非常庆幸能遇到包括高老师(初三)、英老师(高一)、韩老师(高二~高三)、段老师(本科~研一)和唐老师(研二~至今)在内的贵人,没有他们就没有我今天的成绩。但至少最近一次赶上大模型发展的快车最应该要感谢的是我自己,我自己下定决心从零开始,花了大概半年时间摸清了 Python、Transformer 等基本功,并几乎是献祭了自己在算法方向的第一个成果 MixLoRA(2023 年 12 月底有初步算法,2023 年 1 月中旬完成了可行性验证,但因为过年和实验进展问题错过了年初的两次投稿机会,丧失了先发优势,最终直到 2024 年 4 月才在 arXiv 挂出了第一版论文),才敢说自己的科研能力上路了。

我其实深知自己不是什么天才,顶多算是有一些小聪明的普通人,和那群蹲在电脑前头几个月就能憋出来一篇顶会的人比简直就是学术垃圾。但不比不知道,一比吓一跳啊。今年 6 月实验室走了一批元老级的本科生,人均一篇 A 类顶会/顶刊文章带去美国读博了,和这群神仙比我自然是小趴菜。但同时实验室也来了一批新的实习本科生,带他们就明显感觉力不从心。这时候回过头来审视自己:为什么我能在半年之内入门 ML 科研呢?我怎么做才能在下次技术浪潮来临时同样走在前面,避免被后浪拍在沙滩上呢?

我常常感到迷茫,这种迷茫与大多数人眼中外露的我截然不同。高中时,我便有了这种困惑,感觉自己的兴趣和追求与同龄人相去甚远,仿佛与世界格格不入;大学期间,虽然胸怀志向,但四处碰壁,找不到前行的方向;硕士阶段,抬头望去,天外有天,深感渺小,低头俯视,却发现脚下的世界无边无际。成年后,经历了大大小小的挫折与变故,我愈发感受到个人的渺小与生命的短暂。每当我坐在灯火通明的饭局上,觥筹交错,听着那些繁复的恭维之词时,不禁觉得所谓的人际资源和社会分配,不过如此而已。我常常思索,或许,多陪伴家人和爱人,这一生便无憾,又何必去追寻那些看似遥不可及的目标呢?

但我的内心坚定不移地告诉我:不,我必须追求。从世俗的角度来看,只有追求更高的目标,才能为自己和家人带来更富足的物质生活;而从自我实现的角度出发,只有不断向更高处迈进,才能为自己的人生勾勒出一条鲜明而充实的主线,让这个世界记住我这个“小人物”曾经存在过的痕迹。于是,前面我所提出的问题便有了明确的答案:正因为我追求自我实现,所以我才是一个高度自驱、自律,并对未来有明确规划的人(尽管方向偶尔会调整,但总体目标始终不变)。正是这种追求,让我从初中开始逐渐培养出了超越同龄人的自学能力和信息检索能力。这种能力不仅支撑我在半年内顺利入门 ML 科研,也将成为我在未来技术浪潮中始终走在前列的力量源泉。

或许,正如韩老师在我高中毕业时的留言所说:“世界会向那些有目标和远见的人让路。”希望我能够坚持自我,在接下来的最后一年硕士生涯中,顺利摘得学术界的桂冠——取得顶会或顶刊的成果。同时,在即将到来的职业生涯中,也能拼搏出属于自己的一片天地。

——2024 年 9 月,于成都家中。