大模型内部的数学世界
从文字到数字,从数字到理解引言:当你对大模型说"你好"想象你走进一座巨大的图书馆。这座图书馆里有数十亿本书,每本书都记录着人类的知识。当你走向前台,对管理员说:"你好,请问什么是量子力学?"——管理员听到了你的问题,然后在她的大脑中开始了一系列复杂的信息处理过程,最终给你一个清晰易懂的回答。大语言模型(比如 ChatGPT、Claude、Kimi)就像这位管理员。不同的是,它不是一个"人",而是一个运行在计算机上的数学程序。它不会"理解"文字的含义——至少不是我们人类意义上的理解。它做的是一件事:把文字变成数字,对数字进行数学运算,再把运算结果变回文字。本文的目标,就是带你走进这个过程的内部,看看当一句话被送进大模型后,究竟发生了什么样的数学变化。不需要你懂高等数学,只需要你有初中数学的基础(加减乘除、简单的函数概念),我们就能一起探索这个神奇的世界。第一章 从文字到数字——分词(Tokenization)1.1 为什么要先把文字变成数字计算机有一个根本性的限制:它只能处理数字。更准确地说,计算机的处理器(CPU、GPU、NPU)本质上就是一台极其快速的"数字计算器"。它不知道"猫"是什么,也不知道"开心"是一种什么样的感受。它唯一会做的,就是对数字进行加减乘除。所以,如果我们想让计算机"理解"一句话,第一步就必须把这句话里的每个字、每个词,转换成计算机能处理的数字。这个过程,就叫做分词(Tokenization)。你可以把分词想象成"密码本"的工作方式。假设我们有一本密码本,上面写着:"你" = 521"好" = 389"世" = 1024"界" = 567当我们输入"你好世界"这四个字时,计算机就会查这本密码本,把它变成四个数字:[521, 389, 1024, 567]。这四个数字,就是计算机能理解的"语言"了。1.2 分词的具体过程实际上的分词过程,比你想象的更有趣。大模型并不是简单地"一个字对应一个数字"。它使用一种叫做"子词分词"(Subword Tokenization)的技术。为什么要用子词分词?因为英语等语言中有大量变形。比如 "play"、"playing"、"played" 其实是同一个词的不同形式。如果每个变形都分配一个独立的数字,密码本就会变得无比庞大。而且计算机无法知道这三个词之间的关系。子词分词的做法是:把词拆开。比如 "playing" 可能被拆成 "play" + "ing"。"play" 分配一个数字,"ing" 分配一个数字。这样密码本更小,而且计算机能明白 "playing" 和 "played" 都与 "play" 有关。中文的分词略有不同。因为汉字本身就是基本单位,所以中文通常是一个字或一个词对应一个 token。比如"人工智能"可能被分成["人工","智能"]两个token,也可能分成四个单字token,取决于具体的分词器设计。1.3 分词后的数字长什么样分词完成后,我们得到的是一串整数。比如输入"今天天气很好",分词后的结果可能是:[3421, 1098, 1098, 2567, 883]这些数字本身没有任何"含义"。3421并不代表"今"的某种属性,它只是一个编号——就像图