ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【机器学习】(34)—— 更大的语言模型

2026/8/6 17:58:13 拓冰建站 浏览量
【机器学习】(34)—— 更大的语言模型

更大的语言模型:一次利用更长的上下文

文章目录

  • 更大的语言模型:一次利用更长的上下文
    • 1. 短窗口看不全信息
    • 2. Transformer:编码器与解码器
    • 3. 自注意力:动态决定谁重要
      • 3.1 缩放点积公式
      • 3.2 代码:单头缩放点积(可运行)
    • 4. 预训练:掩码预测在优化什么
      • 4.1 代码:构造掩码样本(数据侧)
    • 5. 生成:提示后的反复补全
      • 5.1 贪心与带温度的采样
    • 6. 端到端小流程(概念)
    • 7. 收益、代价与汽车场景
      • 7.1 上线前核对
    • 8. 能力边界与常见误区
    • 9. 术语与延伸阅读
    • 10. 小结

摘要:第 33 篇用 N-gram 与 RNN 说明了「下一词概率」与短上下文的局限。**大规模语言模型(Large Language Model, LLM)**仍在预测 token 序列,但参数更多,并能一次汇聚更长上下文。本文讲清 Transformer 骨架、缩放点积自注意力、掩码预训练与生成采样,给出可运行的 NumPy 演示,并对照汽车工单 / 车评场景的适用边界。适合读完语言模型入门、需要建立 LLM 概念地图的读者。读完可独立说明:注意力权重从何而来、预训练在优化什么、生成为何仍可能幻觉。


1. 短窗口看不全信息

N-gram 把条件钉在固定长度上;RNN 逐步传递历史,对很长依赖仍吃力。看这条故障描述:

冷车时怠速抖动。上周已更换火花塞。路试正常,但再次冷启动时抖动依旧。

若模型只能盯住最后几个字,「更换火花塞」可能根本不在窗口内,续写容易跑偏。工业界常用的更大语言模型,预测目标没有变——仍是序列里下一个(或被遮住的)token——但有两个常见差别:

相对 N-gram / 常规 RNN含义
参数更多可拟合更复杂的共现与结构
上下文更长一次看到更长片段,而不是只靠逐步短记忆

专栏前文:【机器学习】(33)—— 语言模型 讲了 token、N-gram 与 RNN;【机器学习】(29)—— Embedding 的查表,在 LLM 里仍把每个 token 映成稠密向量,再交给注意力层。


2. Transformer:编码器与解码器

当前最常见的 LLM 骨架是Transformer。完整形态包含:

  • 编码器(Encoder):输入序列 → 中间表示
  • 解码器(Decoder):中间表示 → 输出序列

两侧都是很深的神经网络,中间靠注意力与前馈层堆叠,而不是把 N-gram 的N NN硬加大。

结构常见用途汽车向例子
编码器 + 解码器翻译等序列到序列中文工单草稿 → 英文摘要
偏编码器整句表示,供分类车评情感 / 故障类型分类
偏解码器续写、对话式生成根据症状生成回复草稿

本篇重点建立「注意力 + 堆叠」的直觉。具体该选编码器侧还是解码器侧,取决于任务要「表示一段文本」还是「往后写字」。


3. 自注意力:动态决定谁重要

自注意力(self-attention)对序列中每个位置估计:同一段输入里,其他位置对自己有多重要。「自」表示注意力发生在输入序列内部

示意句:

车辆未过路口,因为它太累。

「它」可能指「车辆」或「路口」。在「太累」语境下,「车辆」通常应获得更高权重;若改成「太宽」,「路口」往往升高。

概念说明
双向自注意力可看当前位置两侧;编码器侧常用
单向自注意力主要看已生成一侧;逐词生成时常用
多头 multi-head同一层多组注意力,学不同关系
多层堆叠浅层偏局部,深层可组合更抽象模式

嵌入空间里的远近(【机器学习】(30)—— 嵌入空间)是静态几何;自注意力是在当前句子里动态加权。流程通常是:Embedding → 注意力 → 前馈 → 再堆叠。

3.1 缩放点积公式

对长度为n nn的序列,先把每个位置的向量线性映射成查询Q QQ、键K KK、值V VV,再计算:

A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K ⊤ d k ) V \mathrm{Attention}(Q,K,V)=\mathrm{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)VAttention(Q,K,V)=softmax(dkQK)V

符号含义
Q QQ查询矩阵,形状约( n , d k ) (n, d_k)(n,dk)
K KK键矩阵,形状约( n , d k ) (n, d_k)(n,dk)
V VV值矩阵,形状约( n , d v ) (n, d_v)(n,dv)
d k d_kdk键 / 查询维数
d k \sqrt{d_k}dk缩放因子,减轻点积过大导致 Softmax 过尖
Softmax 行每个位置对所有位置的注意力权重(和为 1)

输出是V VV的加权和:权重大的位置,其「值」向量对当前表示贡献更大。这与 【机器学习】(27)—— 神经网络多分类 里 Softmax 把分数变成概率的用法一致,只是这里 Softmax 作用在「位置×位置」的分数上。

朴素实现里,分数矩阵大小约为n × n n\times nn×n,再乘层数与头数,代价大致随n 2 n^{2}n2涨。上下文开到极长,显存与算力会先告急。

3.2 代码:单头缩放点积(可运行)

下面用 3 个词、手工向量演示完整一步:算分数 → Softmax → 加权求和。把「它」设得更靠近「车辆」。

importnumpyasnpdefsoftmax_rows(x:np.ndarray)->np.ndarray:z=x-x.max(axis=-1,keepdims=True)e=np.exp(z)returne/e.sum(axis=-1,keepdims=True)defscaled_dot_attention(Q,K,V):"""Q,K: (n, d_k), V: (n, d_v) -> (n, d_v), weights (n, n)"""d_k=Q.shape[-1]scores=(Q @ K.T)/np.sqrt(d_k)weights=softmax_rows(scores)out=weights @ Vreturnout,weights# 行顺序:车辆、路口、它E=np.array([[1.0,0.2],# 车辆[0.2,1.0],# 路口[0.9,0.3],# 它(更靠近车辆)],dtype=float,)# 教学简化:Q=K=V=E(真实模型里是三个不同线性层)out,w=scaled_dot_attention(E,E,E)labels=["车辆","路口","它"]print("「它」对三词的注意力权重:")forname,pinzip(labels,w[2]):print(f"{name}:{p:.3f}")print("「它」位置的输出向量:",out[2].round(3))# 正常情况:对「车辆」的权重应高于「路口」;自身位置也会分到一部分权重

若把第三行改成更靠近「路口」的向量,对「路口」的权重会升高。机制是相关性加权,不是写死的指代规则。

多头时,会把d dd维拆成多组,各组各自算一套注意力再拼回;多层则把上一层输出当作下一层输入,逐步组合更复杂的模式。


4. 预训练:掩码预测在优化什么

工业级 LLM 极少从零在小车评集上硬训到可用。常见第一阶段是在大规模文本上做自监督,例如掩码预测(masked prediction):遮住部分 token,根据可见上下文去猜。

原句:冷车时怠速抖动,更换火花塞后仍抖动 掩码:冷车时____抖动,更换____后仍抖动

对被遮位置,模型输出词表上的概率分布,再用交叉熵衡量与真实 token 的差距(多类损失,词表很大)。大量样本会迫使网络利用共现与结构线索。之后还可做指令微调等,提高「按提示办事」的能力——细节留到下一篇。

说法含义
预训练在通识大规模语料上先学通用序列规律
掩码训练时人为隐藏部分 token
交叉熵对正确 token 的负对数概率,作分类损失
指令微调用「指令→回答」数据继续训练(后续篇)

4.1 代码:构造掩码样本(数据侧)

importrandomdefmask_tokens(tokens:list[str],mask_rate:float=0.15,mask_token:str="[MASK]"):"""随机遮住若干位置,返回 (masked_tokens, 被遮位置与原词)。"""masked=list(tokens)targets={}fori,tokinenumerate(tokens):ifrandom.random()<mask_rate:targets[i]=tok masked[i]=mask_tokenreturnmasked,targets sent=list("冷车时怠速抖动更换火花塞后仍抖动")# 按字演示masked,targets=mask_tokens(sent,mask_rate=0.2)print("掩码后:","".join(masked))print("需预测的位置:",targets)

真实训练里,分词多用子词,掩码策略更精细(整词掩码、动态掩码等)。这里只说明:损失信号来自「猜被遮住的那几处」。

对汽车业务:通识预训练提供语言能力;领域工单 / 故障码往往还要微调或检索增强。离散 ID 与文本如何接到同一训练流程,可对照 【机器学习】(31)—— 如何得到 Embedding——LLM 侧规模大几个数量级,但「表示可学习」的思路相通。


5. 生成:提示后的反复补全

模型会估计空缺处的分布后,就可在用户提示后接上假想空白,反复取 token,写成句段。

提示(前文)→ 下一 token 分布 → 选取(贪心 / 采样) → 拼回序列 → 再预测 → … 直到结束条件

5.1 贪心与带温度的采样

贪心每步取arg ⁡ max ⁡ \arg\maxargmax;采样可先用温度T TT平滑分布:

p i ′ = exp ⁡ ( z i / T ) ∑ j exp ⁡ ( z j / T ) p_i'=\frac{\exp(z_i/T)}{\sum_j\exp(z_j/T)}pi=jexp(zj/T)exp(zi/T)

T TT越小越尖、越「果断」;T TT越大越平、越多样。

defsample_next(logits:np.ndarray,temperature:float=1.0)->int:"""logits: (V,) 未归一化分数 → 采样一个下标。"""z=logits/max(temperature,1e-6)z=z-z.max()p=np.exp(z)p=p/p.sum()returnint(np.random.choice(len(p),p=p))defgenerate(prefix_logits_fn,start_ids,max_new=16,temperature=0.8,eos_id=None):""" prefix_logits_fn(ids) -> (V,) logits 演示生成循环;真实 LLM 由 Transformer 提供 logits。 """ids=list(start_ids)for_inrange(max_new):logits=prefix_logits_fn(ids)nxt=sample_next(logits,temperature=temperature)ids.append(nxt)ifeos_idisnotNoneandnxt==eos_id:breakreturnids# 玩具:词表 5,logits 与「上一个 id」弱相关(仅演示接口)deftoy_logits(ids):V=5logits=np.zeros(V)logits[ids[-1]%V]=2.0logits[(ids[-1]+1)%V]=1.0returnlogitsprint("采样轨迹:",generate(toy_logits,[0],max_new=8,temperature=0.7))

看起来像在解应用题时,底层仍常是「对这类题面的高概率续写」。能力可以很强,但评估必须单独设计,不能默认「会写」等于「事实正确」。


6. 端到端小流程(概念)

把本篇串成一条可对照的流水线:

1. Token 化(子词)+ Embedding 2. 多层自注意力 + 前馈(Transformer 块) 3. 预训练:掩码 / 下一词等自监督损失 4. (可选)指令微调、领域微调 5. 推理:提示 → 反复生成;温度 / 截断等解码参数 6. 业务侧:规则校验、人工抽检、引用检索(若需要事实)
步骤专栏可对照
Embedding第 29~32 篇
Softmax 多类头第 27 篇
过拟合与算力第 21、28 篇
下一词概率直觉第 33 篇

相关串讲:【机器学习】(32)—— Embedding 串讲、【机器学习】(28)—— 神经网络小结。


7. 收益、代价与汽车场景

常见收益常见代价 / 风险
续写更流畅,可打包翻译、摘要幻觉:事实错误、编造细节
长上下文有助于消歧与指代训练与推理算力、电耗高
减少部分手工文本特征数据偏见进入生成
车评摘要、草稿回复更省事不能免检当作维修结论

参数规模上,在数据与算力跟上时,更大 Transformer 往往更强;这与「小任务先用小模型」不矛盾。上 LLM 的前提是:任务确实需要长文本理解或生成。

场景更稳妥的起点
品牌 / 车型等表格 IDEmbedding + 监督模型
短文本分类小模型或编码器式表示
长工单摘要、草稿回复LLM + 人工 / 规则校验
安全相关诊断定责禁止仅凭生成文本

7.1 上线前核对

[ ] 任务是否真需要长上下文 / 生成,而不是表格模型即可 [ ] 解码参数(温度等)已在验证样例上试过 [ ] 幻觉风险:是否有检索、规则或人工闸门 [ ] 延迟与成本是否可接受(注意上下文长度) [ ] 领域术语 / 故障码是否需微调或词表约束

8. 能力边界与常见误区

情况说明
把 LLM 当可靠知识库生成的是高概率文本,不是保证真实的库查询
忽略n 2 n^{2}n2代价超长上下文会迅速抬高算力
小车评集从头训「自己的大模型」数据与算力通常不够;用预训练 + 微调
表格字段全改成提示词结构化字段用 Embedding 往往更直接
不设校验就自动结案幻觉风险不可接受
多头多层任意堆叠成本、延迟与过拟合都会上升
温度开很大还要求稳定口径多样与稳定互斥,需按产品目标调

适用前提:有长文本或生成需求,且能承担校验成本。纯数值油耗回归,不必先上 LLM。


9. 术语与延伸阅读

术语含义
LLM大规模语言模型
Transformer以注意力为核心的序列架构
自注意力序列内部位置的相关性加权
Q / K / V查询、键、值三套投影
多头注意力多组注意力再拼接
掩码预测遮住 token 再训练去猜
温度采样用 T 平滑 logits 再采样
幻觉内容看似合理但不正确
资源说明
【机器学习】(33)—— 语言模型token、N-gram、RNN
【机器学习】(29)—— Embedding稠密向量与查表
【机器学习】(30)—— 嵌入空间距离与静态嵌入
【机器学习】(31)—— 如何得到 Embedding联合训练与上下文嵌入
PyTorch Transformer官方层接口

10. 小结

更大的语言模型仍做 token 序列上的概率建模,但靠更多参数与自注意力一次汇聚更长上下文,超过短窗口 N-gram 与常规 RNN。缩放点积注意力用 Softmax 得到位置权重,再对V VV加权;预训练常用掩码预测;生成是提示后的反复补全,可用温度调节多样性。收益是流畅与任务打包能力,代价是幻觉、算力与偏见。汽车场景:表格 ID 继续 Embedding;长文本生成必须加校验。

下一篇谈微调、蒸馏与提示:在预训练大模型上,用较小代价适配业务,以及提示在推断阶段的作用。

系列导航

  • 上一篇:【机器学习】(33)—— 语言模型
  • 下一篇(预告):微调、蒸馏与提示:把大模型接到业务上

如果本篇对你有帮助,欢迎点赞、收藏、关注博主,机器学习专栏持续更新中,下次更新不迷路。