第一部分:最基础的"积木块"
这些是构成所有神经网络(包括大模型)的最底层概念。
1. Softmax(归一化指数函数)
- 一句话解释 :把一组任意大小的数值(logits,逻辑值),转换成一组加起来等于1的概率分布。 它能让大的数更大,小的数更小,突出最可能的选项。
- 为什么需要它? 神经网络最后一层输出的原始分数(比如
[2.0, 1.0, 0.1])很难直接解读。softmax将它们变成概率(比如[0.65, 0.24, 0.11]),这样我们就能说:"模型有65%的信心认为答案是选项A"。 - 举例 :一个3分类问题,模型输出原始分数
logits = [2.0, 1.0, 0.1]。- 先对每个数取指数:
e^2.0 ≈ 7.39,e^1.0 ≈ 2.72,e^0.1 ≈ 1.11。指数操作放大了数值差异。 - 求和:
7.39 + 2.72 + 1.11 = 11.22。 - 每个指数除以总和:
- 类别1概率:
7.39 / 11.22 ≈ 0.659(65.9%) - 类别2概率:
2.72 / 11.22 ≈ 0.242(24.2%) - 类别3概率:
1.11 / 11.22 ≈ 0.099(9.9%)
- 类别1概率:
- 最终输出:
[0.659, 0.242, 0.099],加起来为1。
- 先对每个数取指数:
2. Argmax(取最大值索引)
- 一句话解释 :找出数组中最大值的索引(位置)。 它是一个决定/选取函数,不产生概率。
- 与Softmax的关系 :
- 推理/预测时 :我们通常直接用
argmax。比如模型输出logits = [2.0, 1.0, 0.1],argmax会直接告诉你"最大值在索引0",所以最终答案是类别A。这样更快,不需要计算整个softmax。 - 训练时:我们使用softmax,因为概率分布能提供更丰富的梯度信息,告诉模型"你离正确答案还有多远"。
- 推理/预测时 :我们通常直接用
- 举例 :模型预测下一个词,对
['苹果', '香蕉', '橙子']的原始分数是[0.5, 3.2, 1.1]。argmax会返回索引1,对应'香蕉'。
第二部分:模型如何学习(训练过程的核心)
这些概念解释了模型从错误中学习、并改进自己的机制。
3. Loss / Loss Function(损失/损失函数)
- 一句话解释 :一个衡量模型预测结果与真实答案之间差距的分数。 损失越小,模型预测越准。训练的目标就是最小化这个损失。
- 为什么需要它? 它像一个"误差测量仪"。模型在训练时,每次预测都会计算一个损失值。这个值告诉模型:"你这次错得有多离谱"。
- 常用例子 :
- 交叉熵损失 :用于分类任务 。如果真实标签是
[1,0,0],模型预测概率是[0.7, 0.2, 0.1],损失会很小;如果预测概率是[0.3, 0.4, 0.3],损失会很大。它惩罚模型对于正确答案的不自信。 - 均方误差 :用于回归任务(预测房价、温度等)。计算预测值与真实值差的平方。
- 交叉熵损失 :用于分类任务 。如果真实标签是
- 直观理解:就像学生做选择题,老师(损失函数)不只看对错,还会根据你选择的选项、犹豫程度来给你一个"后悔程度"的分数。
4. Backpropagation(反向传播)
- 一句话解释 :一个高效的、从后向前逐层计算损失函数对每个参数(权重)偏导数的算法。 它告诉每个参数"应该往哪个方向微调,才能让损失下降"。
- 为什么需要它? 神经网络可能有上亿个参数。如果不靠反向传播,想找到每个参数的优化方向会难如登天。它利用了微积分的链式法则。
- 链式法则的简单理解 :最终的损失L依赖于中间结果b,b依赖于权重w。所以
dL/dw = (dL/db) * (db/dw)。反向传播就是从外层的L,一层层向内计算这几个"影响因子",一直算到最原始的参数w。 - 类比:你想调整工厂里一条流水线上多个机器的旋钮(参数),让最终产品质量(损失)最好。反向传播是一个系统,它能告诉你:"要提升质量,第一个机器应该顺时针转0.1圈,第二个逆时针转0.05圈..." 它是根据最终结果,逆向推导出每个环节的调整方案。
5. Learning Rate(学习率)
- 一句话解释 :一个控制模型参数每次更新步长大小的正标量(通常很小,如0.001)。 它决定了当你知道该往哪个方向调整参数时,你应该迈出多大的一步。
- 为什么需要它? 反向传播只给出了方向(梯度),但没给出步长。学习率就是人为设定的步长。
- 学习率的影响 :
- 太大:模型会在最优参数附近反复横跳,甚至直接"飞"出训练区域,导致损失激增(震荡)。
- 太小:模型会像老太太走路,训练速度极慢,可能卡在局部最优点,甚至永远走不到理想位置。
- 全流程示例 :
- 模型前向传播,计算预测值和损失
L。 - 反向传播 计算每个参数的梯度
g = dL/dw(它是一个向量,方向指向损失上升最快的方向)。 - 我们想让损失下降,所以走梯度的反方向,更新参数:
w_new = w_old - 学习率 * g。 - 重复上面步骤。
- 模型前向传播,计算预测值和损失
第三部分:与大语言模型(LLM)相关的专门概念
这些是训练和使用GPT类模型时经常会遇到的技术。
6. ChatML(Chat Markup Language,对话标记语言)
-
一句话解释 :一种将多轮对话结构化为纯文本的特殊格式,让模型能清晰地区分系统指令、用户输入和助手回复。
-
为什么需要它? 原始的基础模型(Base Model)只会做"文本补全"。你给它
"你好吗?",它会傻乎乎地接着写"我很好,谢谢。今天天气不错...",它分不清哪个是用户说的。ChatML通过加入特殊标记符,教会模型对话的"角色"。 -
常见的ChatML格式(以OpenAI的格式为例):
text<|im_start|>system 你是一个乐于助人的AI助手,名叫小智。<|im_end|> <|im_start|>user 你好,小智!今天天气怎么样?<|im_end|> <|im_start|>assistant 哎呀,我没有实时获取天气的能力,建议你打开手机上的天气应用查看哦!<|im_end|> <|im_start|>user 好吧,那你给我讲个笑话吧。<|im_end|> <|im_start|>assistant ...<|im_start|>和<|im_end|>:对话角色的开始和结束分隔符。system,user,assistant:角色标签。
模型在训练时,看到这种格式,就学会了:读到 <|im_start|>user 的内容是给我的指令;我需要生成 <|im_start|>assistant 后面的内容作为回答。在推理时,你构建好这个格式,模型就会乖乖地扮演助手的角色。
7. DPO(Direct Preference Optimization,直接偏好优化)
-
一句话解释 :一种比"从人类反馈中强化学习"(RLHF,Reinforcement Learning from Human Feedback)更简单、更稳定的新训练方法,它让模型学会"选择"人类偏好的回答,而不是"生成"最可能的回答。
-
背景知识(RLHF的痛点):ChatGPT惊艳效果的核心技术之一是RLHF。但它非常复杂:需要先训练一个"奖励模型"(评判官),然后用强化学习(PPO算法)去微调主模型。这个过程不稳定、计算量大、且有很多超参数需要调。
-
DPO的核心思想 :DPO绕过了复杂的强化学习。它发现,从数学上可以推导出一个公式,直接用人类偏好数据(比如"好回答A" vs "坏回答B")就能更新模型,而不需要显式地训练一个奖励模型。
-
DPO与RLHF的对比:
特性 RLHF (如PPO) DPO 复杂度 非常高,需要4个模型 低,只需要加载2次模型 稳定性 差,对超参数敏感 高,相对鲁棒 计算资源 高 低得多 核心逻辑 先学"人类喜欢什么",再让模型去"追求"它 直接让模型"偏爱"喜欢的回答,疏远不喜欢的 -
一个简化类比:
- RLHF:你先请一个评判专家(奖励模型),告诉他什么是好什么是坏。然后你的运动员(主模型)根据专家的评分(奖励信号)去调整自己的动作,这个过程可能很曲折。
- DPO:你直接给运动员看两个动作:"这是优秀运动员的动作(好例子),这是普通人的动作(坏例子),请你学着更像优秀运动员,并且不像那个普通人。" 运动员直接就懂了。
总结关系图:
- 训练时 :
输入数据->模型前向传播->Softmax(得到概率) -> 与真实标签计算Loss(如交叉熵) ->Backpropagation计算梯度 ->Learning Rate控制步长 ->更新模型参数。 - 推理时 :
输入数据->模型前向传播-> 得到logits-> 直接取Argmax-> 得到最终答案。 - 对话模型 :数据需要先格式化为
ChatML。 - 偏好对齐 :如果你想进一步提升模型的有用性和安全性,可以使用
DPO进行微调。
8. 鞍点(Saddle Point)
一句话解释
鞍点是目标函数(如损失函数)曲面上的一个特殊点,它在一个方向上是局部极小值,在另一个正交方向上是局部极大值,形状像马鞍。 它既不是真正的谷底,也不是真正的山峰。
直观比喻
想象一个马鞍(骑马用的那个):
- 沿着马背的方向(从前到后) :你处于一个向下弯曲的弧线中,这里是局部最小值(坐在马鞍最凹陷处)。
- 垂直于马背的方向(从左到右) :你处于一个向上弯曲的弧线中,这里是局部最大值(马鞍两侧翘起)。
若你坐在马鞍上,前后方向你卡在最低点,但左右方向你只要稍一倾斜就会滑下去。这个点就是鞍点。
更经典的数学例子是函数 ( f(x,y) = x^2 - y^2 ):
- 当 ( y=0 ) 时,( f(x,0) = x^2 ),这是一个开口向上的抛物线,在 ( x=0 ) 处取最小值。
- 当 ( x=0 ) 时,( f(0,y) = -y^2 ),这是一个开口向下的抛物线,在 ( y=0 ) 处取最大值。
- 点 ( (0,0) ) 处一阶导数为0,但既不是极小也不是极大------这就是鞍点。
在神经网络训练中的意义
- 为什么鞍点是个难题?
- 训练神经网络时,我们通过梯度下降(即反向传播+学习率)不断降低损失函数。梯度指向损失上升最快的方向,我们往反方向走。
- 在鞍点处,梯度恰好为零(或非常接近零)。如果算法恰好落在鞍点附近,它会误以为自己"收敛"了(因为梯度几乎为零),但实际上还在一个很差的位置------沿某个方向还有更低的损失可以探索。
- 鞍点 vs 局部极小值
- 在低维空间(比如二维或三维),人们常担心陷入"局部极小值"------一个真正的盆底,四周都比它高。
- 但在高维空间 (神经网络可能有数百万甚至数十亿参数),鞍点远比局部极小值普遍。原因是:要让一个点成为局部极小值,需要在所有方向上都是向上的曲率,这在高维中极难满足。而鞍点只需要部分方向向上、部分方向向下,概率大得多。
- 因此,训练深度模型时,最大的优化障碍往往不是局部极小,而是大量的鞍点 和平坦区域(梯度非常小的平原)。
- 如何逃离鞍点?
- 随机梯度下降(SGD):每次只使用一小批样本计算梯度,天然带有噪声。这种噪声可以帮助模型"震动"出鞍点。
- 动量优化器(Momentum, Adam等):积累历史梯度,像小球滚下山坡时带有惯性,即使当前点梯度为零,动量也能推动它穿越平坦区或鞍点。
- 二阶优化方法(如牛顿法):利用曲率信息(Hessian矩阵)直接判断一个临界点是极小、极大还是鞍点,并朝负曲率方向逃离。但计算量太大,很少用于大模型。
与之前概念的关联
- 梯度 & 反向传播 :反向传播计算梯度,梯度为零的点就是临界点------包括极小值、极大值和鞍点。因此,仅靠梯度无法区分它们。
- 学习率:如果学习率太大,模型可能反复"跳过"真正的极小值;如果太小,可能在鞍点停留过久。学习率调度策略(如warmup、余弦退火)有时能帮助逃离鞍点。
- Loss曲面:鞍点处的损失值可能比最终最优解高得多。如果训练过早出现损失停止下降("假收敛"),很可能是被困在鞍点附近。
总结对比表
| 类型 | 定义 | 在优化中的角色 |
|---|---|---|
| 局部极小值 | 所有方向的曲率为正 | "好"的收敛点,我们想找到它(尤其是全局极小) |
| 局部极大值 | 所有方向的曲率为负 | 最坏的点,梯度下降会自动避开(因为它会往反方向走) |
| 鞍点 | 有的方向曲率为正,有的为负 | 高维空间中的主要陷阱,看起来像静止但实际并非终点 |