国内外大语言模型(LLM)超详细总结与代码实战​(可用于面试或学习,持续更新)-----国外篇

国外:

国内篇链接为:国内外大语言模型(LLM)超详细总结与代码实战​(可用于面试或学习,持续更新)-----国外篇-CSDN博客

一、GPT 系列

1. GPT-1

1. 基本用途

  • 核心任务:无监督语言建模、文本生成

  • 典型应用

    • 文章续写(给定上下文,自动生成后续文本)

    • 对话生成(基于历史对话上下文生成回复)

2. 工作原理流程

  • 输入表示

    1. 文本首先被拆分成 sub-word tokens(Byte-Pair Encoding),可以兼顾词汇覆盖和稀疏问题。

    2. 每个 token 被映射为一个高维向量(词嵌入),再加上与其在序列中位置对应的“位置编码”,以注入位置信息。

  • 自回归 Transformer 解码器

    1. Masked Self-Attention

      • 每层都会计算序列中每个 token 对之前所有 token 的注意力权重,确保当前 token 只能看到左侧已生成内容,防止“看到未来”信息。

      • Attention 输出与残差连接后进入规范化(LayerNorm)。

    2. 前馈网络(Feed-Forward Network)

      • 两层全连接网络,中间通过 GELU 激活函数引入非线性;上下文信息在这一过程中被进一步提炼。

      • 同样有残差连接和 LayerNorm,保证梯度稳定与信息流动。

    3. 多层堆叠

      • GPT-1 堆叠了 12 层这样的解码器,每层都在逐步丰富对上下文的建模能力。

  • 文本生成

    • 推理时,模型以“起始符”(<sos>)开始,每一步都将当前已生成的 token 序列输入解码器,预测下一个 token 的分布。

    • 生成策略可选最大概率取样(greedy)、束搜索(beam search)或随机采样(top-k/top-p),直到生成结束符为止。

3. 完整代码示例

from transformers import GPT2LMHeadModel, GPT2Tokenizer

# 为了演示,这里用 GPT-2 small 模型来模拟 GPT-1
model = GPT2LMHeadModel.from_pretrained("gpt2")
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")

prompt = "In a distant future,"
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_length=50, do_sample=True)

print(tokenizer.decode(outputs[0], skip_special_tokens=True))

2. GPT-2

1. 基本用途

  • 核心任务:大规模无监督语言建模

  • 典型应用

    • 长文本生成(新闻、故事续写)

    • 零样本/少样本下的任务适配

2. 工作原理流程

  • 架构升级

    • 相比 GPT-1,GPT-2 将堆叠层数从 12 增加到 24、36、48(不同规模);隐藏维度、注意力头数也相应放大。

    • 上下文窗口扩展至 1,024 token,能够在更长文本中捕捉远距离依赖。

  • 大规模预训练

    • 使用约 40GB 的高质量网页文本进行训练,模型学习到了更加丰富的语言模式与世界知识。

  • 细节优化

    • 增加学习率 warm-up、layer normalization 的位置微调,以及更稳健的优化器设置,提升了训练稳定性。

  • 生成阶段

    • 在解码器每层都沿用 Masked Self-Attention + 跨层残差,保持对长序列的高效建模。

    • 同样支持多种生成策略,常见做法是 top-k + top-p 联合控制多样性与流畅度。

3. 完整代码示例

from transformers import GPT2LMHeadModel, GPT2Tokenizer

model = GPT2LMHeadModel.from_pretrained("gpt2-xl")
tokenizer = GPT2Tokenizer.from_pretrained("gpt2-xl")

prompt = "Once upon a time,"
inputs = tokenizer(prompt, return_tensors="pt")
output = model.generate(**inputs, max_length=100, top_k=50, top_p=0.95)

print(tokenizer.decode(output[0], skip_special_tokens=True))

3. GPT-3

1. 基本用途

  • 核心任务:超大规模语言理解与生成

  • 典型应用

    • 会话助手(ChatGPT)

    • 编程辅助(Copilot)

    • 文本摘要、翻译、问答

2. 工作原理流程

  • 架构规模

    • 参数量达 1750 亿,层数可达 96 层,隐藏维度和注意力头数都大幅提升。

    • 支持 2,048 token 的 context window,能处理更长对话和文本。

  • 自回归生成

    • 与前作相同,每一步输入当前已生成序列,更新注意力权重和前馈网络,输出下一 token。

  • 少样本与零样本提示

    • 在提示(prompt)中嵌入少量示例或任务说明,模型无需微调即可完成翻译、问答、分类等任务。

  • API 服务化

    • 用户通过 REST API 提交 prompt,模型在后端完成推理并返回结果,无需本地部署。

3. 完整代码示例(OpenAI API)

import openai
openai.api_key = "YOUR_API_KEY"

response = openai.Completion.create(
    model="text-davinci-003",
    prompt="Translate to French: 'The weather is nice today.'",
    max_tokens=60,
    temperature=0.3
)
print(response.choices[0].text.strip())

4. GPT-3.5 / ChatGPT

1. 基本用途

  • 核心任务:优化对话生成、指令执行

  • 典型应用

    • 多轮对话系统

    • 代码生成、文本校对

    • 文档摘要与信息检索

2. 工作原理流程

  • 在 GPT-3 基础上微调

    1. 行为克隆:先让模型模仿人类标注示例的对话格式。

    2. 强化学习(RLHF):用人类偏好反馈训练一个奖励模型,引导生成更符合用户意图和安全要求的回复。

  • 多角色消息格式

    • 系统(system)、用户(user)、助手(assistant)分角色输入,模型根据上下文角色切换生成。

  • 对话管理

    • 模型内部维护对话历史,结合当前用户输入决定下一步生成内容。

  • 安全与对齐

    • 在生成前后会有检测和过滤机制,避免输出有害或敏感内容。

3. 完整代码示例(Chat Completions)

import openai
openai.api_key = "YOUR_API_KEY"

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Explain quantum entanglement simply."}
    ]
)
print(response.choices[0].message["content"])

5. GPT-4

1. 基本用途

  • 核心任务:更强的推理与多模态理解

  • 典型应用

    • 图文问答(上传图片生成解释)

    • 复杂指令执行(数学求解、代码编写)

    • 专业领域咨询

2. 工作原理流程

  • 架构改进

    • 在标准 Transformer 基础上,加入跨模态融合层,能够同时处理文本和图像。

    • 参数量和内部连接模式均有所优化,但官方未全部开源细节。

  • 多模态输入处理

    1. 图像编码:先用视觉编码器(如改进版 ViT)将图像转为向量;

    2. 文本编码:与之前相同的文本嵌入 + 位置编码;

    3. 联合注意力:在解码器或特定融合层中同时对图像和文本 Key/Value 做注意力计算,从而跨模态交互。

  • 增强推理能力

    • 采用更深的注意力模式以及更大的 context window(最高 32K token),可以处理超长文档和复杂逻辑链条。

  • 安全策略

    • 集成更严格的内容审核与对话跟踪机制,适合高风险场景。

3. 完整代码示例(多模态示例)

import openai
from PIL import Image
import base64

openai.api_key = "YOUR_API_KEY"
with open("diagram.png", "rb") as f:
    img_b64 = base64.b64encode(f.read()).decode()

response = openai.ChatCompletion.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "You can see images."},
        {"role": "user", "content": "What does this diagram illustrate?"},
    ],
    images=[{"data": img_b64}]
)
print(response.choices[0].message["content"])

二、BERT 系列

1. BERT-base

1. 基本用途

  • 核心任务:双向掩码语言建模(Masked LM),下游任务微调

  • 典型应用

    • 文本分类(情感分析、主题分类)

    • 命名实体识别(NER)

    • 问答(SQuAD、机器阅读理解)

2. 工作原理流程

  • 输入表示

    1. 将整句文本切分为 WordPiece tokens,并在句首/句尾分别添加特殊标记 [CLS][SEP]

    2. 每个 token 对应一个词嵌入(token embedding)、一个段落嵌入(segment embedding),再加上位置编码,一起输入模型。

  • 双向 Transformer 编码器

    1. 多头自注意力:在每一层,所有 tokens 相互交换信息,既能看到左文也能看到右文;不同头负责关注不同类型的依赖关系。

    2. 前馈网络:对每个 token 的自注意力输出做两层全连接和 GELU 激活,提升表达能力。

    3. 残差连接 + LayerNorm:每一步都有残差通路和层归一化,保证梯度稳定。

    4. 层级堆叠:BERT-base 堆叠 12 层,层层递进地抽象句子语义。

  • 预训练任务

    • Masked LM:随机掩码 15% 的 token,用上下文去预测被掩码的词。

    • Next Sentence Prediction(NSP):给定两句话,判断第二句话是否紧跟第一句话。

  • 下游微调

    • 在预训练基础上,针对不同任务加上少量特定头(classification head、span head),再用标注数据做几轮微调即可。

3. 完整代码示例

from transformers import BertTokenizer, BertForMaskedLM
import torch

tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertForMaskedLM.from_pretrained("bert-base-uncased").to("cuda")

text = "The capital of France is [MASK]."
inputs = tokenizer(text, return_tensors="pt").to("cuda")
with torch.no_grad():
    logits = model(**inputs).logits

mask_index = (inputs.input_ids[0] == tokenizer.mask_token_id).nonzero(as_tuple=True)[0].item()
pred_token_id = logits[0, mask_index].argmax(dim=-1).item()
print("Predicted token:", tokenizer.decode([pred_token_id]))

2. BERT-large

1. 基本用途

  • 核心任务:与 BERT-base 相同,但更强表示能力

  • 典型应用:相同任务下精度提升,尤其在长文本理解和复杂问答中表现更佳

2. 工作原理流程

  • 结构升级

    • 层数从 12 → 24,隐藏维度从 768 → 1024,注意力头数从 12 → 16。

    • 更深更宽的网络学习更细粒度的语言模式和长距离依赖。

  • 训练与预训练

    • 使用相同比例的掩码 LM 和 NSP 任务,但用更多数据、更长的训练时间来提升性能。

  • 微调策略

    • 对于资源受限场景,可先冻结前 N 层,只微调上层及任务特定 head,再逐步解冻。

3. 完整代码示例

from transformers import BertTokenizer, BertForSequenceClassification
import torch

tokenizer = BertTokenizer.from_pretrained("bert-large-uncased")
model = BertForSequenceClassification.from_pretrained("bert-large-uncased").to("cuda")

# 微调示例:二分类
text = "This movie was fantastic!"
inputs = tokenizer(text, return_tensors="pt").to("cuda")
with torch.no_grad():
    logits = model(**inputs).logits
print("Positive prob:", torch.softmax(logits, dim=-1)[0,1].item())

三、T5 系列

1. T5-base

1. 基本用途

  • 核心任务:统一“文本到文本”框架,将各种 NLP 任务都转化为条件生成

  • 典型应用

    • 翻译(translate English to German: …)

    • 文本摘要(summarize: …)

    • 问答(question: … context: …)

2. 工作原理流程

  • Seq2Seq 架构

    1. 编码器:将输入前缀 + 文本一起编码,捕捉整段上下文。

    2. 解码器:根据编码器输出和已生成序列自回归地生成目标文本。

  • 任务前缀设计

    • 在输入前添加任务说明,比如 “translate English to German: ”,模型根据提示切换能力。

  • 预训练与微调

    • 在 C4 大规模通用语料上预训练多种任务混合目标;

    • 下游只需换 prefix、换输出格式,微调代价低。

  • 生成策略

    • 支持 beam search、top-p/top-k 采样,既可追求准确度也可兼顾多样性。

3. 完整代码示例

from transformers import T5Tokenizer, T5ForConditionalGeneration
import torch

tokenizer = T5Tokenizer.from_pretrained("t5-base")
model = T5ForConditionalGeneration.from_pretrained("t5-base").to("cuda")

# 翻译示例
input_text = "translate English to German: How are you?"
inputs = tokenizer(input_text, return_tensors="pt").to("cuda")
outs = model.generate(**inputs, max_length=40)
print("German:", tokenizer.decode(outs[0], skip_special_tokens=True))

# 摘要示例
input_text = "summarize: The quick brown fox jumps over the lazy dog."
inputs = tokenizer(input_text, return_tensors="pt").to("cuda")
outs = model.generate(**inputs, max_length=30)
print("Summary:", tokenizer.decode(outs[0], skip_special_tokens=True))

四、LLaMA 系列

1. LLaMA-1

1. 基本用途

  • 核心任务:开源高效自回归语言建模

  • 典型应用:通用文本生成、研究基线

2. 工作原理流程

  1. 数据准备与预处理

    • 汇集 CommonCrawl、书籍、维基、论坛等多源高质量文本;

    • 对原始文本做语言检测、去重、长短文本均衡采样;

    • 使用 SentencePiece 学习统一的 sub-word 分词器,既能覆盖罕见词也能保持处理速度。

  2. 模型架构

    • 多层自回归解码器:每层结构──

      • Masked Multi-Head Self-Attention

        • 将每个 token 的嵌入映射为 Q/K/V 矩阵;

        • 通过掩码确保位置 i 只能 attend 到 ≤ i 的位置;

        • 多头并行;最后拼接并投影回隐藏维度。

      • 前馈网络:两个线性层夹在 GELU 激活之间,逐 token 独立运算;

      • LayerNorm + 残差连接:Attention 和 FFN 之后各自跟残差与归一化,保证深层网络可训。

    • LLaMA-1 提供 7B/13B/33B/65B 几种规模,层数与头数随之线性扩展。

  3. 高效训练细节

    • 混合精度训练:FP16 + 动态损失缩放,减少显存占用;

    • 梯度累积:利用累积实现大 batch size;

    • 分布式并行:Tensor Parallel + Pipeline Parallel,跨 GPU/节点拆分模型和数据;

    • 优化器与调度:AdamW + cosine learning‐rate decay,线性 warm-up。

  4. 推理优化

    • FlashAttention:内存高效的 Attention 实现,降低显存峰值;

    • KV 缓存:在自回归解码中缓存前面所有层的 K/V,不重复计算;

    • 并行解码:对超长生成可跨设备同时扩展;

  5. 生成流程

    • 用户输入 prompt,经 tokenizer 转为 token IDs;

    • Embedding + 位置编码 → 一层层解码器运算(Attention + FFN);

    • 每步输出 logits,经 softmax 得到下一个 token 分布;

    • 采样策略(greedy/beam/top-p)选 token,加入序列,重复直至 EOS。

3. 完整代码示例

from transformers import LlamaTokenizer, LlamaForCausalLM
import torch

model_name = "meta-llama/Llama-1-7b"
tokenizer = LlamaTokenizer.from_pretrained(model_name)
model = LlamaForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")

prompt = "Once upon a time,"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
gen = model.generate(**inputs, max_new_tokens=50, do_sample=True, top_p=0.9)
print(tokenizer.decode(gen[0], skip_special_tokens=True))

2. LLaMA-2

1. 基本用途

  • 核心任务:开源对话与指令微调,提升多轮交互质量

  • 典型应用:AI 助手、知识问答、编码辅助

2. 工作原理流程

  1. 基础预训练

    • 沿用 LLaMA-1 的数据管道与大规模自回归训练;

    • 加入更严格的去重和低质量过滤,提升预训练文本质量。

  2. 指令微调(Instruction Tuning)

    • 构建数十万条“提示→完成”对:包括问答、摘要、翻译、代码等多任务;

    • 用监督学习让模型学会根据提示产出更符合人类期望的格式和内容。

  3. 对话微调(Chat Tuning)

    • 在清洗后的多轮对话数据集上进一步训练,使模型学会保持上下文连贯性、角色切换;

    • 每轮对话保留系统/用户/助手角色标签,模型内部根据标签动态调整注意力分布。

  4. 安全与对齐

    • 引入简单规则过滤器对抗暴力、色情、仇恨等;

    • 结合少量人类反馈的优劣打分,微调一个轻量级评价器,在生成后筛选候选回复。

  5. 推理时序

    • 格式化 Prompt:将对话历史拼成 "system:…\nuser:…\nassistant:…\n"

    • Tokenize → Embedding → 解码器层:同 LLaMA-1,但解码器中自注意力会优先关注最新用户提问;

    • 缓存机制:对话每生成一轮,KV 缓存再利用,保障多轮对话效率;

    • 生成与后处理:输出候选后再经过安全过滤,剔除不合规或不连贯回答。

3. 完整代码示例

from transformers import LlamaTokenizer, LlamaForCausalLM
import torch

model_name = "meta-llama/Llama-2-7b-chat-hf"
tokenizer = LlamaTokenizer.from_pretrained(model_name)
model = LlamaForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Explain the theory of relativity simply."}
]
prompt = "".join(f"{m['role']}: {m['content']}\n" for m in messages)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

gen = model.generate(**inputs, max_new_tokens=150, do_sample=True, top_p=0.95)
print(tokenizer.decode(gen[0], skip_special_tokens=True))

五、BLOOM

1. BLOOM

1. 基本用途

  • 核心任务:多语种、大规模开源文本生成

  • 典型应用:跨语言翻译、代码生成、对话系统

2. 工作原理流程

  1. 多语种大规模预处理

    • 汇集 46 种语言、1,000+ 编程语言的海量语料;

    • 按区域和语言分布做平衡采样,防止高频语种过拟合;

    • 对代码文本做语法检查、缩进标准化;对自然语言做去重与长度剪裁。

  2. 解码器架构

    • Layer 架构与 GPT 类似:Masked Multi-Head Self-Attention → FFN → 残差 + LayerNorm;

    • 参数并行:每层 Attention/QKV/输出投影在模型并行下拆分到不同设备;

    • 稀疏专家(Mixture-of-Experts)(大模型版本中可选):部分 FFN 分支只对部分 token 激活,提高参数利用率。

  3. 训练优化

    • Megatron-DeepSpeed:结合 NVIDIA Megatron 和 Microsoft DeepSpeed,实现亿级参数高效并行训练;

    • 动态批次与序列拼接:可变序列长度拼接,最大化 GPU 利用率;

    • 梯度检查点:减半显存占用,允许更深层数训练。

  4. 推理与生成

    • 并行解码:同 LLaMA-1 KV 缓存与 FlashAttention 思路;

    • 多语种自适应采样:根据不同语种分布,动态调整 top-k/top-p 超参,保证低频语言生成质量;

    • 专家路由(若启用 MoE):每个 token 会根据路由器分配到少数专家子网络,仅这些子网参与该 token 的 FFN 运算,减少计算量。

  5. 应用部署

    • 可部署为 HuggingFace Pipeline、ONNX Runtime 或定制化 C++ 服务;

    • 支持 CPU/GPU/TPU 后端,并可通过 Triton Inference Server 横向扩展。

3. 完整代码示例

from transformers import BloomTokenizerFast, BloomForCausalLM
import torch

tokenizer = BloomTokenizerFast.from_pretrained("bigscience/bloom")
model = BloomForCausalLM.from_pretrained("bigscience/bloom", torch_dtype=torch.float16, device_map="auto")

prompt = "Hello, world! Translate to French:"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
gen = model.generate(**inputs, max_new_tokens=50, top_p=0.9)
print(tokenizer.decode(gen[0], skip_special_tokens=True))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值