本文用通俗语言解释大语言模型的核心原理,并给出两个实践方向的完整指南:微调一个法律领域小模型,以及从零预训练一个小模型。适合对 AI 感兴趣、想动手实践的读者。
一、白话大模型原理
1. 大模型就是一个"猜下一个词"的机器
如果只用一个词概括大模型的核心,那就是:下一个词预测器。
它做的事情很简单:给你一段话,它猜接下来最可能出现的词。比如看到"我今天早上喝了一杯___",模型会计算"咖啡""水""牛奶"等词出现的概率,然后选一个输出。
训练目标就是:给定前面的文本,最大化正确预测下一个词的概率。
当这个简单的动作重复了无数次、模型规模大到一定程度后,就会涌现出翻译、写作、推理、编程等看起来像智能的能力。
2. Token:模型看到的不是字,是"词元"
模型不是按汉字或单词处理的,而是把文本切成token。例如"我喜欢学习人工智能"可能被切成 ["我", "喜欢", "学习", "人工智能"]。英文中一个单词可能被切得更碎。每个 token 对应一个唯一编号,模型内部有一个词表,通常几万个 token。
3. 向量与嵌入:让词变成可计算的数字
光有编号不够,模型需要知道"猫"和"狗"关系近,"猫"和"汽车"关系远。于是每个 token 被映射成一个高维向量,叫嵌入向量。语义相近的词,向量距离更近。这些向量是模型在训练中自己学出来的,不是人工设计的。
4. Transformer:大模型的核心架构
几乎所有大语言模型底层都是 Transformer 架构。它最核心的思想是:处理一个词时,要关注整句话里所有词和它的关系。
自注意力机制
每个 token 会生成三个向量:Query(查询)、Key(键)、Value(值)。通过计算 Query 和所有 Key 的相关性,得到注意力分数,再用分数对 Value 加权求和。这样每个词都能根据上下文动态调整含义。比如"她"在"小明把苹果给了小红,她很开心"中,会更多地关注"小红"。
多头注意力
一个注意力头只能捕捉一种关系,比如指代、动宾、修饰。Transformer 会并行使用多个头(比如 32 个),分别捕捉不同模式,最后拼接。
前馈网络与堆叠
注意力层之后接一个普通前馈网络,对每个 token 的向量做非线性变换。一层注意力 + 一层前馈网络构成一个 Transformer 块,大模型堆叠很多这样的块。层数越多,模型能学到的抽象程度越高。
5. 训练三阶段:从"续写"到"会聊天"
阶段一:预训练(海量文本学续写)
用互联网上的网页、书籍、论文、代码等海量文本,采用自监督学习:输入一段文本的前 N-1 个 token,让模型预测第 N 个 token,然后对比真实 token 计算误差,反向传播更新参数。经过几千亿甚至万亿 token 的训练,模型学到了语法、世界知识、逻辑关系、编程模式等。
阶段二:指令微调(学会"听话")
预训练模型只会续写,不会回答问题。用人工构造的"指令→正确回答"数据继续训练,让模型学会遵循指令。例如输入"请解释什么是光合作用",输出对应的解释。
阶段三:RLHF(让回答更符合人类偏好)
让模型生成多个回答,人类标注员排序打分,训练一个奖励模型学习人类偏好,再用强化学习优化模型,使输出更自然、有用、安全。
6. 规模效应:为什么"大"很重要?
研究者发现规模定律:模型参数、数据量、算力越大,性能越好。更神奇的是涌现能力:当模型规模超过某个阈值后,会出现小模型没有的能力,比如复杂推理、代码生成。这些能力不是程序员写进去的,而是模型变大后自然出现的。
7. 推理:怎么生成回答?
训练好的模型采用自回归生成:输入用户问题,模型预测下一个 token,把它拼到输入末尾,再预测下一个,直到生成结束符。选择 token 的策略有贪心解码、温度采样、Top-p 采样等,所以同一个问题每次回答可能不同。
8. 上下文学习:给几个例子就会了
模型不需要重新训练,只要在提示中给几个示例,它就能完成类似任务。因为预训练时见过海量包含任务示例的文本,能识别并模仿这种模式。
9. 大模型的能力与局限
擅长: 文本生成、翻译、总结、代码、常见问答、创意写作、一定程度的推理。
局限:
- 幻觉: 一本正经地编造事实,因为它在生成"看起来合理"的文本,而不是查数据库。
- 知识截止: 训练完成后知识固定,不知道之后的事。
- 上下文长度有限: 一次处理 token 数有上限。
- 推理能力有限: 复杂数学、多步逻辑仍可能出错。
- 不理解世界: 没有视觉、听觉、身体经验,只是从文本中统计模式。
二、实践一:微调一个网络安全法规领域小模型
如果你手里有一个网络安全法规相关的数据集(如《网络安全法》《数据安全法》《个人信息保护法》、等保条例、行业标准等),想训练一个"小的大模型",最现实的路线是:选一个开源小模型作为基座 → 用你的数据做领域微调 → 评估 → 部署。
1. 明确任务
网络安全法规数据可以做很多任务,不同任务的数据准备和训练方式不一样:
| 任务 | 输入 | 输出 |
|---|---|---|
| 法规问答 | 用户问题 | 答案 + 引用具体条款 |
| 安全事件报告摘要 | 安全事件描述 | 摘要 |
| 合规性检查建议 | 系统描述 | 适用的法规要求 |
| 政策条款解读 | 条款原文 | 通俗解释 |
| 漏洞通告分析 | 漏洞描述 | 影响和整改建议 |
| 安全标准检索辅助 | 自然语言问题 | 相关标准片段 |
建议先聚焦 1~2 个核心任务,不要贪多。小模型能力有限,任务越聚焦,效果越好。
2. 选择基座模型
不建议从零预训练。推荐中文开源小模型:
- Qwen2.5 / Qwen3(0.5B / 1.5B / 3B / 7B):中文强,生态好
- ChatGLM3-6B
- Baichuan2-7B
- LLaMA3-8B 中文版
- Yi-6B
算力有限时,优先 Qwen2.5-1.5B 或 3B,用 LoRA 微调,单张 24GB 显卡即可。注意开源协议。
3. 数据处理:最关键的一步
清洗: - 去重(完全重复和高度相似) - 去乱码、HTML 标签 - 格式统一 - 脱敏(系统名称、IP、人员信息等) - 截断到模型上下文长度以内(如 2048 token)
构造训练格式: 通常需要"指令—回答"对。常用两种格式:
Alpaca 格式:
{
"instruction": "根据《网络安全法》第21条,网络运营者应当履行哪些安全保护义务?",
"input": "",
"output": "根据《网络安全法》第21条,网络运营者应当按照网络安全等级保护制度的要求,履行下列安全保护义务:制定内部安全管理制度和操作规程,确定网络安全负责人,落实网络安全保护责任;采取防范计算机病毒和网络攻击、网络侵入等危害网络安全行为的技术措施;采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月;采取数据分类、重要数据备份和加密等措施。"
}
ShareGPT 格式(多轮对话):
{
"conversations": [
{
"from": "human",
"value": "什么是个人信息?"
},
{
"from": "gpt",
"value": "根据《个人信息保护法》第4条,个人信息是以电子或者其他方式记录的与已识别或者可识别的自然人有关的各种信息,不包括匿名化处理后的信息。包括姓名、出生日期、身份证件号码、生物识别信息、住址、电话号码、电子邮箱、健康信息、行踪信息等。"
},
{
"from": "human",
"value": "处理个人信息需要满足什么条件?"
},
{
"from": "gpt",
"value": "根据《个人信息保护法》第13条,处理个人信息应当取得个人同意,但为订立、履行个人作为一方当事人的合同所必需,或者为履行法定职责或者法定义务所必需等情况下,不需取得个人同意。"
}
]
}
如何把纯法规数据变成训练数据?
- 法规转问答: 用大模型对每条法规生成几个问题,法规内容作为答案。
- 案例摘要: 原文作为输入,摘要作为输出。
- 合规检查: 输入系统描述或安全实践,输出适用的法规要求。
- 多轮对话: 围绕一个安全合规主题构造连续问答。
注意:大模型生成的数据必须人工审核,安全领域容错率低。
数据量建议: 指令微调:至少几千条高质量数据,1 万~5 万条效果更好。如果纯法规文本很多(几百万字),可以先做继续预训练,但小模型优先做指令微调。
4. 选择微调方法
小模型推荐参数高效微调,不更新全部参数。
| 方法 | 显存需求 | 效果 | 适用场景 |
|---|---|---|---|
| 全参微调 | 高 | 上限高 | 数据多、算力足 |
| LoRA | 低 | 较好 | 单卡微调 7B 以下 |
| QLoRA | 更低 | 略低 | 显存紧张,如 24GB 卡微调 7B |
对于 1.5B~7B 小模型,QLoRA 或 LoRA 性价比最高。
关键超参数参考:
- LoRA rank:16~64
- LoRA alpha:rank 的 2 倍
- 学习率:1e-4 ~ 3e-4
- epoch:3~5
- batch size:4~16(根据显存调整)
- 优化器:AdamW
- 调度器:cosine
5. 训练工具与流程
推荐 LLaMA-Factory,中文界面,支持多种模型和微调方法,几行命令跑通。
基本流程:
- 安装 LLaMA-Factory
- 准备数据,放到 data/ 目录,注册到 dataset_info.json
- 启动训练命令(示例):
llamafactory-cli train \
--model_name_or_path Qwen/Qwen2.5-3B-Instruct \
--dataset your_sec_data \
--template qwen \
--finetuning_type lora \
--lora_rank 32 \
--output_dir ./output/sec_model \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--learning_rate 2e-4 \
--num_train_epochs 3 \
--cutoff_len 2048
- 监控 loss 下降,防止过拟合
- 合并 LoRA 权重回基座模型
6. 评估模型
留出 500~1000 条测试集,不参与训练。
- 自动化指标: ROUGE、BLEU、准确率、F1
- 安全领域必须有人工评估: 由安全合规专家打分,重点看法规引用准确性、合规建议的严谨性、有无幻觉
- 对比基座模型: 同样问题测试微调前后,看是否有提升
7. 部署与推理
- 量化工具: AutoGPTQ、AWQ、GGUF
- 推理框架: vLLM、Ollama、llama.cpp
- 小模型可用消费级显卡甚至 CPU 推理(GGUF 格式)
8. 网络安全法规领域特别注意事项
- 幻觉风险: 小模型易编造法规条文或错误引用,建议结合 RAG 检索,让模型基于检索结果回答。
- 法规时效性: 网络安全法规更新频繁(如等保2.0、数据出境规定等),需定期更新数据或用 RAG 补充最新法规。
- 数据合规: 训练数据涉及具体系统、漏洞信息时需脱敏,注意数据来源的授权和保密要求。
- 小模型能力边界: 复杂合规分析、多法规交叉适用有限,必要时增大参数量、增加数据或引入 RAG。
- 不能替代专业法律意见: 生成内容仅供辅助,重大合规决策需由专业人士审核。
- 安全使用: 模型可能被诱导生成不安全的建议,需设置防护措施。
三、实践二:从零预训练一个网络安全法规领域小模型
从零预训练和微调完全不同,它需要让模型从海量文本中自己学会语言基本规律、知识和推理能力。
1. 先判断是否需要从零预训练
| 场景 | 建议 |
|---|---|
| 已有开源模型,只需适应领域 | 继续预训练或微调 |
| 数据量 < 10GB 纯文本 | 不要从零预训练 |
| 算力 < 多张 80GB A100 | 不要从零预训练 |
| 学术研究、学习目的 | 可以从小规模做起 |
从零预训练一个还不错的模型,至少需要:
- 数据: 10B~100B token(约 50GB~500GB 纯文本)
- 算力: 数十到数千 GPU 小时
如果条件不满足,建议做继续预训练或指令微调。
2. 总体流程
收集原始文本 → 清洗 → 去重 → 训练Tokenizer → 切分为token id → 模型前向 → 计算损失(预测下一个token) → 反向传播 → 更新参数 → 重复
3. 数据准备
- 来源: 网络安全法律法规、标准规范(如等保、ISO 27001、NIST)、安全通告、漏洞库描述、安全博客、安全事件报告、通用中文语料(保持通用能力)
- 数据量: 小模型(<500M)建议至少 5~10GB;1B 模型 20GB 以上
- 清洗: 去 HTML、乱码、非目标语言,统一标点,去超长句子,脱敏
- 去重: 句子级和文档级(MinHash),法规文本重复率高必须去重
- 格式: 每行一个文档,空行分隔
4. 训练 Tokenizer
需要自己的 Tokenizer,因为领域词汇分布不同。
- 算法: BPE(GPT 系列常用)、WordPiece、Unigram
- 词表大小: 小模型 16k~32k,中文需覆盖常用字词和安全术语
- 工具: Hugging Face tokenizers 库、SentencePiece
示例:
from tokenizers import Tokenizer, models, trainers, pre_tokenizers
tokenizer = Tokenizer(models.BPE())
tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel(add_prefix_space=False)
trainer = trainers.BpeTrainer(vocab_size=30000, special_tokens=["<unk>", "<s>", "</s>", "<pad>"])
tokenizer.train(files=["sec_corpus.txt"], trainer=trainer)
tokenizer.save("sec_tokenizer.json")
5. 模型架构配置
主流为 GPT 类 decoder-only Transformer。小模型参考配置:
| 参数规模 | 层数 | 隐藏维度 | 注意力头数 | 序列长度 |
|---|---|---|---|---|
| 100M | 12 | 768 | 12 | 1024 |
| 300M | 24 | 1024 | 16 | 2048 |
| 1B | 24 | 2048 | 32 | 2048 |
可直接使用 Hugging Face 的 GPT-2、Llama、Qwen 等架构,随机初始化权重。例如用 GPT-2 架构创建模型。
6. 训练设置
- 优化器: AdamW,学习率 1e-4 ~ 3e-4,权重衰减 0.01~0.1
- 学习率调度: 预热(前几千步线性增加)→ 余弦衰减
- 批次大小: 总 batch size 建议 512~1024 个序列,用梯度累积实现
- 序列长度: 1024 或 2048,随机截取连续文本
- 正则化: Dropout 0.1,梯度裁剪 1.0
- 混合精度: bf16 或 fp16 加速训练
7. 训练基础设施
- 1B 以下可用单张 80GB A100,小模型(100M)单张 3090/4090 可跑
- 多卡: PyTorch DDP 或 DeepSpeed ZeRO
- 框架: Hugging Face Trainer、Megatron-LM、DeepSpeed
Hugging Face Trainer 示例:
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir="./sec_pretrain",
per_device_train_batch_size=4,
gradient_accumulation_steps=32,
learning_rate=2e-4,
warmup_steps=1000,
max_steps=100000,
logging_steps=100,
save_steps=5000,
fp16=True,
optim="adamw_torch",
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset,
data_collator=data_collator,
)
trainer.train()
8. 监控与评估
- Loss: 平稳下降为佳,震荡大降低学习率,不下降检查数据和初始化
- 梯度范数: 配合梯度裁剪
- 验证集困惑度(Perplexity): 定期评估,判断是否学到语言规律
- 生成样本检查: 每几千步生成文本看是否通顺
9. 常见问题
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| Loss 不下降 | 学习率太大/太小 | 调整学习率,做学习率扫描 |
| Loss 突然上升 | 梯度爆炸 | 加强梯度裁剪,降低学习率 |
| 生成重复词 | 模型退化 | 增加数据多样性,调整采样参数 |
| 显存不足 | batch size 太大 | 减小 batch size,梯度累积,开启 ZeRO |
10. 小模型预训练参考案例
训练一个 300M 网络安全法规领域小模型的大致参数:
- 数据: 10GB 中文安全法规文本 + 少量通用文本
- Tokenizer: 30k BPE
- 模型: 12 层,768 维,12 头,1024 序列
- 优化器: AdamW,lr=3e-4,warmup 2000 步,cosine 衰减
- batch size: 512(累积)
- 训练步数: 约 50k~100k 步
- 硬件: 单张 A100 80GB,约 1~2 天
结语
大模型原理看似复杂,但核心就是一个在海量文本上训练出来的、基于 Transformer 的巨大"下一个词预测器"。它并不真正理解世界,而是从语言中学习到了极其复杂的统计规律。
在实际应用中,对于绝大多数人,基于开源模型微调是性价比最高的路线。从零预训练门槛高、成本大,更适合研究或极端定制场景。无论选择哪条路,高质量的数据和清晰的评估都是成功的关键。
希望这篇白话指南能帮助你迈出第一步。