大语言模型(LLM, Large Language Model)的爆发,让人工智能应用进入新阶段。从 ChatGPT 到 DeepSeek,这些模型背后都有庞大的数据工程与复杂的训练体系。那么一个大模型是如何一步步构建起来的呢?本文将结合 DeepSeek 的思路,从整体架构、数据预处理、训练范式、推理部署等方面进行梳理,并附带部分 简化代码示例,帮助理解。
import torch import torch.nn as nn classSelfAttention(nn.Module): def__init__(self, embed_dim): super().__init__() self.query = nn.Linear(embed_dim, embed_dim) self.key = nn.Linear(embed_dim, embed_dim) self.value = nn.Linear(embed_dim, embed_dim) self.softmax = nn.Softmax(dim=-1) defforward(self, x): Q = self.query(x) K = self.key(x) V = self.value(x) attention = self.softmax(Q @ K.transpose(-2, -1) / (K.size(-1) ** 0.5)) return attention @ V
2. DeepSeek 的优化
稀疏注意力:降低长文本计算成本。
MoE(专家混合):部分路由激活专家网络,提高效率。
多模态扩展:不仅处理文本,还能处理图像、代码。
三、数据构建与预处理
1. 数据来源
通用文本:网页、百科、新闻。
专业数据:医学、科研、法律文献。
代码语料:GitHub 开源项目。
2. 数据清洗
defclean_text(text): text = text.strip() text = text.replace("\n", " ") return text raw_corpus = ["Hello!!!", "This is a test.", "<script>bad</script>"] clean_corpus = [clean_text(t) for t in raw_corpus] print(clean_corpus)
3. 数据标注与对齐
人工标注高质量问答。
RLHF:人类对输出排序,用于训练奖励模型。
四、预训练阶段
1. 训练任务
自回归语言建模(预测下一个 token)。
MLM(掩码语言建模)。
2. 简化训练循环
import torch.optim as optim model = SelfAttention(embed_dim=128) optimizer = optim.Adam(model.parameters(), lr=1e-4) loss_fn = nn.CrossEntropyLoss() for epoch in range(5): inputs = torch.randn(32, 10, 128) # batch=32, seq=10 targets = torch.randint(0, 128, (32, 10)) outputs = model(inputs) logits = outputs.view(-1, outputs.size(-1)) loss = loss_fn(logits, targets.view(-1)) optimizer.zero_grad() loss.backward() optimizer.step() print(f"Epoch {epoch}, Loss {loss.item():.4f}")