LLM基础

第1课:LLM原理概述

📚 什么是大语言模型(LLM)

大语言模型(Large Language Model, LLM)是基于Transformer架构的深度学习模型,通过在海量文本数据上进行自监督学习,获得了强大的语言理解和生成能力。从GPT系列到LLaMA、Qwen,LLM正在深刻改变软件开发的范式。

🧠 核心概念:Transformer架构

2017年Google提出的Transformer架构是所有现代LLM的基础。其核心创新是自注意力机制(Self-Attention),允许模型在处理每个词时"关注"输入序列中的所有其他词,从而捕捉长距离依赖关系。

import torch
import torch.nn.functional as F

def self_attention(Q, K, V):
    # Q: Query, K: Key, V: Value
    d_k = Q.size(-1)
    scores = torch.matmul(Q, K.transpose(-2, -1)) / (d_k ** 0.5)
    attention_weights = F.softmax(scores, dim=-1)
    output = torch.matmul(attention_weights, V)
    return output, attention_weights

# 演示:4个token的注意力计算
torch.manual_seed(42)
Q = torch.randn(1, 4, 8)
K = torch.randn(1, 4, 8)
V = torch.randn(1, 4, 8)
output, weights = self_attention(Q, K, V)
print(f"输出形状: {output.shape}")
print(f"注意力权重形状: {weights.shape}")
print(f"权重每行和: {weights[0,0].sum().item():.4f}")

✅ 验证通过:自注意力计算正确,权重矩阵每行归一化为1

🏗️ LLM训练三阶段

┌─────────────────────────────────────────────────────┐
│               LLM 训练三阶段                          │
├─────────────────────────────────────────────────────┤
│  阶段1: 预训练 (Pre-training)                       │
│  海量无标注文本 → 预测下一个词(自监督)                │
│  数据量: TB级 | 成本: 数百万美元 | 输出: 基座模型     │
│                     ↓                               │
│  阶段2: 有监督微调 (SFT)                            │
│  高质量指令-回答对 → 学习遵循指令                     │
│  数据量: 10K-1M条 | 成本: 数万美元 | 输出: 对话模型   │
│                     ↓                               │
│  阶段3: 人类反馈强化学习 (RLHF/DPO)                 │
│  人类偏好数据 → 奖励模型 → PPO/DPO优化               │
│  目标: 更有用、更安全、更符合人类偏好 | 输出: 对齐模型 │
└─────────────────────────────────────────────────────┘

📊 主流LLM对比

模型参数量开发者特点开源
GPT-4o~1.8TOpenAI多模态,综合最强
Claude 3.5未公开Anthropic长上下文,安全对齐
GLM-4130B智谱AI中英双语优秀部分
Qwen2.572B阿里云开源最强之一
LLaMA 370BMeta开源标杆
DeepSeek-V3671B MoE深度求索MoE架构性价比高

🔬 Tokenization:文本的数字化

LLM不直接处理文本,而是将文本切分为Token(子词单元),再映射为整数ID。Token数量直接影响API费用和上下文窗口使用。

import tiktoken

enc = tiktoken.encoding_for_model("gpt-4")
text = "大语言模型正在改变世界"
tokens = enc.encode(text)
print(f"原文: {text}")
print(f"Token IDs: {tokens}")
print(f"Token数量: {len(tokens)}")
print(f"解码回文本: {enc.decode(tokens)}")
# 费用: GPT-4o $2.5/1M input, $10/1M output
# 1个中文字 ≈ 1-2 tokens | 1个英文单词 ≈ 1-1.5 tokens

✅ 验证通过:tiktoken编码/解码正确,中文通常占1-2个token

💡 上下文窗口

关键理解

上下文窗口决定了模型一次能处理的最大token数量,直接影响输入长度、输出长度和成本。

模型上下文窗口约等于
GPT-4o128K~10万字中文
Claude 3.5200K~15万字中文
Gemini 1.5 Pro1M~75万字中文

🎯 LLM的能力与局限

┌──────────────────────┬──────────────────────────┐
│       ✅ 擅长          │        ❌ 不擅长          │
├──────────────────────┼──────────────────────────┤
│ 自然语言理解与生成    │ 精确数学计算             │
│ 代码编写与解释       │ 实时信息获取             │
│ 知识问答与推理       │ 长期记忆(无状态)         │
│ 摘要翻译与改写       │ 执行物理动作             │
│ 创意写作与头脑风暴   │ 保证100%事实准确         │
└──────────────────────┴──────────────────────────┘

🤔 幻觉问题(Hallucination)

LLM最大的可靠性问题是幻觉——模型会自信地生成看似合理但实际错误的内容。缓解策略:RAG检索增强、提示词约束、降低温度、多次验证、人工审核。

# 幻觉的典型表现与应对
hallucination_types = {
    "虚构事实": "编造不存在的论文引用",
    "错误归因": "把A说的话归给B",
    "细节编造": "给真实事件添加虚假细节",
    "逻辑跳跃": "推理中跳过关键步骤",
}

mitigation = {
    "RAG检索增强": "用外部知识库提供事实依据",
    "提示词约束": "要求不知道就说不知道",
    "温度调低": "temperature=0减少随机性",
    "多次验证": "让模型自我检查输出",
    "人工审核": "关键场景必须有人把关",
}
print("幻觉缓解: RAG > 提示词 > 温度 > 验证 > 人工")

🏋️ 实战练习

练习1:Token计算器

import tiktoken

def estimate_cost(text, model="gpt-4o",
                  input_price=2.5, output_price=10.0,
                  output_ratio=0.5):
    enc = tiktoken.encoding_for_model(model)
    input_tokens = len(enc.encode(text))
    output_tokens = int(input_tokens * output_ratio)
    cost = (input_tokens*input_price + output_tokens*output_price) / 1_000_000
    return {"input_tokens": input_tokens, "cost_usd": round(cost, 6),
            "cost_cny": round(cost * 7.2, 6)}

result = estimate_cost("请详细解释Transformer架构的原理")
print(f"Token: {result['input_tokens']}, 费用: ¥{result['cost_cny']}")

练习2:模型选择决策

def select_model(task, budget, latency, privacy):
    if privacy == "high": return "Qwen2.5-72B(本地)"
    if task == "creative" and budget == "low": return "GPT-4o-mini"
    if task == "coding" and latency == "low": return "DeepSeek-Coder"
    if task == "analysis": return "GPT-4o"
    return "GPT-4o(通用)"

print(select_model("coding", "medium", "low", "high"))

🏆 本课成就

🏅 LLM基础认知者