从函数映射到大语言模型
写在前面
说实话,大模型火了一年多,我一直没搞明白它内部是怎么工作的。什么“注意力机制”“Transformer”“1750亿参数”,听着就头大。
后来我强迫自己从最底层的概念开始捋:函数、映射、拟合……发现其实思路是贯通的。这篇文章就是我的梳理过程,不追求严谨,只求自己能讲清楚。如果你也和我一样是普通程序员,希望能帮你省点力气。
核心观点:大语言模型本质上就是一个超级复杂的函数映射——从输入文本(提示词)到输出文本(续写、回答)的映射。我们做的所有事,都是在教计算机找到这个映射。
1. 函数和映射:一切的基础
1.1 程序员的日常
我们每天写函数:
public static int add(int x, int y) {
return x + y;
}
输入两个数,输出它们的和。这是一个映射:(x, y) -> 和。
机器学习做的事情一模一样:它也是一个函数,只不过规则不是我们写的,而是计算机从数据里学出来的。
例子:预测明天的气温。输入今天的气温、湿度、风速等,输出一个温度值。传统编程需要人工写公式,机器学习只需要给一堆历史数据,它自己会学出一个映射规则。
1.2 什么是“学习”?
学习就是寻找一个函数 f,使得 f(输入) ≈ 真实输出。
一开始 f 的参数是随机的,输出肯定不对。然后我们计算损失(预测值和真实值的差距),再调整参数让损失变小。重复无数次,参数就收敛了。
类比:你是一个弓箭手,靶心是真实输出。一开始你射不准,每射一箭你都能看到偏左还是偏右,然后调整姿势。射了成千上万箭之后,你基本能命中靶心。
我当时想:这不就是初中数学里的“拟合”嘛!只不过以前是手动算一条直线,现在是自动算一个超复杂的曲线。
2. 从线性到非线性:神经元登场
2.1 线性的局限
最简单的映射是线性:y = w*x + b。画出来是一条直线。
但现实世界大多数关系不是直线的。比如“收入越高,购买意愿越强”不是严格正比,到了一定程度会饱和。这种曲线需要非线性。
2.2 人造神经元
一个神经元做的就是这个:
输出 = 激活函数( w1*x1 + w2*x2 + ... + b )
- 先做线性组合(加权和加偏置)
- 然后扔进激活函数,产生非线性
激活函数有很多种,最经典的是 ReLU:负数变0,正数不变。
这个简单的“非线性开关”让模型可以拟合任意形状的曲线。
类比:神经元就像一个员工。他收到多个任务(x),每个任务有优先级(w),他自己有个基础工作量(b),然后他的领导(激活函数)告诉他:如果总工作量没超过阈值,就别干了(输出0);超过了,就干这么多(输出正值)。这就引入了“条件判断”。
2.3 堆成网络
一个神经元能学到的模式有限。把多个神经元并排放,形成一层,然后多层堆叠,就是神经网络。
万能近似定理:只要神经元数量足够多,神经网络可以逼近任何函数。
这句话我当时读了三遍,觉得太牛了。后来一想,其实也合理:你可以用无数个微小的直线段去逼近任意曲线,每个神经元负责一段。
我的直观感受:一层是简单函数,两层能组合出复杂函数,三层以上就能干很抽象的事了。大模型就是层数极多、每层神经元极多的那种。
3. 训练和过拟合:为什么数据越多越好
3.1 训练就是找最优参数
假设一个神经网络有 100 万个参数(w和b)。训练就是在参数空间里找一个点,使得损失最小。
参数空间是高维的,我们用一个叫梯度下降的方法,每次沿着“下坡”的方向走一小步。
类比:你在浓雾里的山上,不知道山顶在哪,但你能感觉到脚下的坡度。每次朝最陡的下坡方向走一步,最终能走到山脚(损失最小点)。
3.2 过拟合:死记硬背的坏学生
如果模型参数太多,训练数据太少,模型会记住训练集中的噪声而不是规律。
就像考试前只背了一本习题册的答案,考试时换题就不会了。
怎么避免:
- 用更多数据(最有效)
- 正则化(惩罚太大的参数)
- Dropout(训练时随机关掉一些神经元,防止它们过度依赖)
3.3 大模型为什么没炸?
大模型参数巨大(GPT-3 有 1750 亿),但训练数据更巨大(整个互联网的文本,数万亿 tokens)。数据量远超参数数量,所以学到的是统计规律,不是死记硬背。
类比:如果你只读过 10 篇英语文章,你背下来没问题,但给你新文章可能读不懂。如果你读过 100 万篇文章,你自然会学会英语的语法和惯用法,遇到新文章也能读。
4. 大语言模型:堆出来的智能
4.1 GPT 系列:Decoder-only
GPT(Generative Pre-trained Transformer)只用了 Transformer 的解码器部分,并且堆了很多层。
- GPT-3:96 层,每层 96 个注意力头,总参数 1750 亿。
- 训练数据:约 45 TB 的文本(Common Crawl、网页、书籍等)。
4.2 训练任务:预测下一个词
训练方法极其简单:给你一句话的前面部分,让你猜下一个词是什么。
比如输入“今天天气真”,模型应该输出“好”的概率最高。
用数万亿次这样的预测任务,模型学会了语法、语义、常识,甚至一些推理能力。
类比:小孩子学说话并不是先学语法书,而是通过听大人说话,不断猜测下一个词,错了被纠正。听了几百万句之后,自然就会了。
4.3 涌现能力
当模型规模超过某个阈值(大概几百亿参数),会突然出现一些没有明确训练过的能力:
- 上下文学习:给几个例子,它就能举一反三
- 思维链:让它一步步推理,能解数学题
- 代码生成:没有专门训练代码,但也能写 Python
这些是怎么出现的?目前还没完全搞懂,可能是大模型的“涌现”现象。
我当时的想法:就像一群蚂蚁,单只很蠢,但几百万只在一起就能建出复杂的蚁穴。大模型可能就是这种“量变引起质变”。
总结:从映射到智能,一路走来
- 函数/映射:
y = f(x),输入到输出的变换。 - 线性映射:
y = wx + b,太简单。 - 激活函数:引入非线性,让模型能拟合复杂曲线。
- 神经网络:把神经元堆成网络,万能近似定理保驾护航。
- 训练:梯度下降 + 损失函数,调参找最优。
- 过拟合:参数多数据少会背答案,要多喂数据。
- 序列问题:文本长度不固定,需要记住顺序。
- RNN:带记忆,但梯度消失 + 不能并行。
- 注意力:一步直达任意位置,并行友好。
- Transformer:全注意力 + 位置编码 + 多头 + 残差。
- 大语言模型:堆叠 Transformer 解码器 + 海量数据 + “预测下一个词”反复训练。
最终答案:大语言模型就是一个巨大的、从文本到文本的函数映射,这个映射是通过在互联网规模的数据上训练 Transformer 得到的。
写在最后
这一周的学习让我明白了一件事:大模型不神秘,它只是大。底层原理是我们可以理解的,只不过工程实现极其复杂。
作为普通程序员,我们不需要手写一个 Transformer,也不需要搞懂反向传播的数学推导。但理解“从函数映射到大模型”这条主线,至少能帮我们在和同事聊 AI 的时候不露怯,也能更好地决定是否在自己的项目里调用 API。