开始理解大型语言模型(LLM)所需的数学基础
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行! 订阅:https://rengongzhineng.io/
要提出像GPT这类大型语言模型的概念,并从事严肃的人工智能研究,确实需要扎实的数学功底。然而好消息是,如果只是想理解这些模型的工作原理,所需的数学并不复杂。只要曾经在1960年代以后接受过高中数学教育,就已经掌握了基本的知识,比如向量、矩阵等内容。
需要注意的是,本文讲解的是理解“推理”过程所需的数学知识——也就是如何使用一个已经训练好的人工智能模型,而不是关于如何训练它的过程。虽然训练所需的数学也并不复杂,但那部分内容将留待后续文章介绍。
明确这一点后,正式开始深入讲解。
向量与高维空间
博主使用了“向量”一词,基本等同于软件工程师所说的“数字数组”。但在数学意义上,一个长度为 n 的向量不仅是一个数组,它还表示一个 n 维空间中的方向和距离,或者等价地,可以看作是从原点出发,沿着这个向量到达某个点。
在二维空间中,向量 (2, -3) 意味着“向右两单位,下移三单位”,也就是从原点出发移动后所处的位置。三维空间中的向量 (5, 1, -7) 则意味着“向右五单位、上移一单位、远离观察者七单位”(某些情况下可能表示向观察者移动七单位)。当维度更高时,人类无法直观想象,但概念上是一致的。
在LLM中,向量用于表达各种含义。例如,模型输出的logits向量(见上一篇)代表了对下一个token的不同可能性的预测。在这种情形下,可以将logits看作存在于一个高维空间中,这个空间表示了“意义”的分布。
词汇空间(Vocab Space)
每个token对应的logits值是一组数字,每个数字表示该token在当前上下文中作为下一个token的可能性。在书中分析的GPT-2模型中,其tokenizer包含50,257个token,因此每个logits向量的长度也是50,257。比如,token ID为464的是“The”,那么logits向量中第464位的数值表示“The”作为下一个token的相对概率。
可以将每一个logits向量视为一个存在于50,257维空间中的点。这个空间的每一个位置都代表了对下一token的各种可能性组合。本文将这个空间称为“词汇空间”。
不过,这是一个“混乱”的词汇空间。假设一个简化的LLM,其词汇表中只有三个token,那么两个logits向量 (1, 2, 3) 和 (-9, -8, -7) 虽然数值不同,但表达的是相同的排序:第一个token最不可能,第二个次之,第三个最可能。
为了整理这种冗余,可以将logits向量传入softmax函数,从而得到一组真实的概率分布。这组概率数值介于0到1之间,总和为1。这样,所有表达相同排序的logits向量将映射为同一个概率向量。例如,(1, 2, 3) 和 (-9, -8, -7) 都会被softmax映射为大约 (0.09, 0.24, 0.66)。
需要指出的是,其他向量也可能表达相同的排序,但概率分布不同。例如,(1, 2, 5) 虽然仍是“第三个token最可能”的排序,但其softmax结果会是类似 (0.02, 0.05, 0.94) 的分布,显示出第三个token的优势更加明显。
因此,可以将词汇空间分为两类:一种是“混乱”的、未经归一化的向量空间;另一种是经过softmax函数后得到的、表示真实概率分布的“整洁”空间。
还有一种特殊情况是所谓的“one-hot向量”,其中只有一个数值为1,其余均为0,表示某个token的概率为100%。这种向量在下一篇文章中将发挥关键作用。
嵌入空间(Embedding Space)
嵌入空间是另一种高维空间,向量在此代表“意义”。如果将这些向量视为点,那么在语义上相近的词汇会在空间中聚集在一起。
“意义”的定义因任务而异。比如,在一个为动物学家设计的嵌入空间中,“家猫”、“狮子”和“老虎”可能聚集成一个簇,而“狗”、“狼”和“郊狼”则形成另一个簇。这种分类体现了对猫科动物和犬科动物的区分。
而在日常应用中,可能更希望看到“家猫”和“狗”聚在一起,远离“狮子”或“狼”等野生动物。这种嵌入空间更适合用于普通文本的处理和分析。
嵌入空间的维度和定义方式是灵活多样的,可以从表达复杂概念的“丰富空间”,一直到仅根据词性(如动词、名词、形容词)来聚类的“简单空间”。
一个可能令人困惑的事实是,在嵌入空间中,向量的长度往往并不重要。比如,(1, 2) 和 (8, 16) 方向一致,因此可视为表达相同的意义。
矩阵乘法实现空间投影
复习一下:矩阵本质上是多个向量的集合。例如,将两个二维向量 (2, -3) 和 (5, 1) 并排组合成矩阵:
[2 5]
[-3 1]
或按行排列:
[2 -3]
[5 1]
矩阵的维度用“行×列”表示。上面两个都是2×2矩阵。另一个例子是2×3矩阵:
[ 2 -3 7]
[ 5 1 -8]
矩阵可以相乘。这种乘法可用于几何变换。例如,下面这个2×2旋转矩阵:
[cosθ -sinθ]
Shortcode
可以将点绕原点逆时针旋转θ度。将所有点放入一个n×2矩阵X(每行一个点),与旋转矩阵R相乘得到结果矩阵Y:
Y = X · R
在传统数学教学中,点通常是列向量组成的2×n矩阵,此时矩阵乘法写作R · X。但在机器学习中,更常采用“行优先”的格式,将每个点表示为行向量,组合成n×2矩阵,再与R右乘,即X · R。本文从此将采用这一方式。
可以将这个旋转矩阵R理解为一种函数,将输入的点变换成另一个空间中的点。也可以将其看作是将点从一个二维空间投影到另一个旋转过θ度的空间中。
更广泛地说,矩阵乘法可用于在不同维度的空间之间进行投影。例如:
3×2矩阵可将三维空间中的点投影到二维平面(用于图形显示)
50,257×768矩阵可将50,257维空间投影到768维空间
768×50,257矩阵则实现从768维空间到50,257维空间的投影
这种投影可能是“有损”的,也就是说,在降维过程中会丢失一部分信息,即使再投影回来,也无法恢复原始数据。例如将两个不同远近的正方体投影到二维平面后,可能变成大小相同的图形。
神经网络的本质
一个神经网络的单层可以简化表示为:
Z = ϕ(XWᵗ + B)
其中ϕ是激活函数,B是偏置项。若忽略这两个部分,则简化为:
Ẑ = XWᵗ
其中:
X 是输入数据,形状为 n × d_in
W 是权重矩阵,形状为 d_out × d_in,转置后为 d_in × d_out
Ẑ 是输出矩阵,形状为 n × d_out
因此,神经网络中的一层实质上就是一个矩阵乘法过程,即从一个输入维度的空间投影到输出维度的空间。偏置项B仅仅是一个线性平移,激活函数则可选。
总结
以上便是目前为止理解大型语言模型所需的基本数学概念。正如文章开头所述,这些内容基本不超出高中数学的范畴。尽管涉及的矩阵较大、空间维度较高,但核心数学原理仍然相对简单。