那些被我在大学里“扔掉”的数学
上大学的时候,我最烦的一门课叫泛函分析。
什么完备性、紧性、希尔伯特空间——满黑板的公式符号,我盯着看半天,脑子一片空白。那会儿我的想法很简单:我毕业又不搞数学研究,学这玩意儿干嘛?能帮我找到工作吗?能让我看懂代码吗?
考试低分飘过之后,我把教材塞进书架最底层,心里想的是“这辈子再也不碰了”。
然后,我被大模型狠狠打了一记耳光。
当数学重新找上门
开始接触大模型微调的时候,我遇到了一个之前从没想过的问题:小样本场景下,模型怎么学得会?
常规的微调需要大量标注数据,但很多实际场景里根本凑不够。比如做某个垂直领域的问答模型,能用的高质量数据就那么几百条。用几百条数据去微调一个几十亿参数的模型,就像用一勺水去浇一片森林——你可能觉得水浇下去了,但树根本没喝到。
为了解决这个问题,我开始研究各种小样本微调技术。读论文的时候,满篇都是“Hilbert空间”“范数约束”“距离度量”这些词。我硬着头皮往下看,越看越觉得不对劲——这些概念怎么看着有点眼熟?
翻出书架底层那本落灰的泛函分析教材,我才发现,原来我现在读论文卡住的地方,全是当年课堂上讲过的东西。
范数:不只是数学题里的符号
泛函分析里最基础的概念之一就是“范数”——用来度量向量空间里元素大小的函数。当年学的时候,我只知道背定义、套公式做计算题,觉得这就是数学家的文字游戏。
后来在小样本微调的实践中,我才真正理解了范数的意义。
小样本微调最大的风险是“过拟合”——模型在仅有的几百条数据上反复学习,结果记住了这些样本的细节,但没学会背后的规律。就像一个学生考前只背了题库的答案,考试题目稍微改几个字就不会了。
为了避免这个问题,很多微调算法会在损失函数里加一个约束项,限制模型参数更新的“幅度”。这个约束项在数学上就是“范数”。你限制了参数的范数,就等于告诉模型:你能动的范围就这么大,别为了拟合那几条样本把原来的能力全丢了。
这个理解让我突然对泛函分析里的“范数”有了完全不一样的感觉。它从来不是一道抽象的计算题——它解决的是“怎么让一个巨大的模型在被极少量数据训练的时候保持稳定”,这是实际工程里每天都要面对的问题。
希尔伯特空间:向量不仅是一个点
另一个让我重新认识的概念是希尔伯特空间。
当年学的时候,我对希尔伯特空间的理解就是“定义了内积的完备向量空间”——背得滚瓜烂熟,但完全不知道有什么用。后来读大模型相关论文时,我发现“Embedding向量位于某个高维希尔伯特空间”这种说法随处可见。
小样本微调里一个非常核心的操作,是把问题和文档都转换成向量,然后在这个向量空间里做相似度计算。语义相近的内容,在空间里距离近;语义无关的内容,距离远。模型能不能学好,很大程度上取决于在这个空间里学到的“距离度量”是否合理。
泛函分析里关于“内积空间”“距离度量”的理论,恰恰是理解这一切的基础。当你把文本变成向量之后,数学上那套关于“空间中点与点的关系”的理论全都用上了。
我印象最深的是一个技术细节:小样本微调里常用的对比学习,本质上就是在希尔伯特空间里拉近同类样本的向量距离、推远异类样本的距离。整个算法的数学本质,其实就是泛函分析里“空间中点的聚类”这个概念。
数学帮我换了一副眼镜
回头看这段经历,我最大的感悟不是什么具体知识,而是思维方式的转变。
以前我看待一个算法,只会从“代码层面”去理解——数据怎么输入、网络怎么搭、参数怎么调。这种理解方式很实用,但也很浅层。一旦遇到代码解决不了的问题,比如“为什么用这个损失函数效果更好”“为什么这个超参数取这个值最优”,我就完全抓瞎了。
而泛函分析提供的是一套“数学直觉”。它让你从一个更高的层面去看待大模型微调这件事:你做的不是“调参”,而是在一个高维空间里寻找一个最优的点;你优化的不是“损失值”,而是在一个空间里重新排列数据点的位置。
这种“数学直觉”带来的好处是巨大的。当你理解了一个算法在数学上到底在做什么,你就不会再盲目地抄论文里的超参数了。你知道每个参数在数学上对应什么含义,你知道调大调小会影响空间的哪个属性。
这就是所谓的“适配前沿技术研发”——前沿技术的底层往往就是数学。你懂数学,就能看懂论文里的那些公式;能看懂公式,就能理解最新的方法在做什么、为什么有效;理解了原理,才能在自己的场景里做真正有价值的改进。
回头捡起那本书
现在泛函分析那本书被我重新摆在了书桌上,不再是在书架底层落灰了。
偶尔翻两页,看到那些曾经让我头疼的定理和证明,竟然有一种亲切感。当然我依然不是数学家,不会去证明定理或者推公式。但当一个算法论文里出现“范数约束”“完备空间”“距离度量”这些词的时候,我不再是一个看天书的局外人。
我大概明白了当年老师说的那句话——“有些数学你现在觉得没用,是因为你还没遇到需要它的场景。”这句话我等了快十年才真正听懂。而听懂的那一刻,恰好是我最需要它的时候。
暂无评论