ChatGPT底层原理入门:从Transformer到RLHF的技术演进

1次阅读
没有评论

共计 1631 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

背景痛点

传统 NLP 模型(如 RNN、LSTM)在长文本生成中存在两个主要缺陷:

ChatGPT 底层原理入门:从 Transformer 到 RLHF 的技术演进

  1. 上下文遗忘问题 :循环神经网络依靠隐藏状态传递历史信息,随着序列长度增加,早期输入的细节逐渐丢失。实验表明,当文本超过 200 词时,LSTM 对开头内容的记忆准确率下降 40% 以上。

  2. 逻辑连贯性差 :基于 n -gram 的生成模型缺乏全局语义理解,容易产生前后矛盾的输出。例如在问答场景中,传统模型对同一问题的多次回答可能出现事实不一致。

核心架构

Transformer 的自注意力机制

Self-attention 通过三个核心矩阵实现上下文建模:

  • Q(Query):当前词的查询向量,维度通常为 dk
  • K(Key):所有词的键向量矩阵,维度为 [n_seq, dk]
  • V(Value):所有词的值向量矩阵,维度为 [n_seq, dv]

计算公式为:

Attention(Q,K,V) = softmax(QK^T/√dk)V

其中除以√dk 是为了防止点积结果过大导致梯度消失。下图展示了一个 3 词序列的注意力权重可视化(建议配简图):

[0.1, 0.7, 0.2]
[0.3, 0.4, 0.3]
[0.2, 0.5, 0.3]

RLHF 训练流程对比

  • GPT-3:仅使用无监督预训练(语言建模目标)
  • ChatGPT:三阶段训练
  • 监督微调(SFT):人工编写问答对训练
  • 奖励模型训练:人类标注员对多个输出排序
  • PPO 强化学习:根据奖励模型优化策略

代码实践

简化版 Attention 实现

import torch
import torch.nn.functional as F

def scaled_dot_product_attention(q, k, v, mask=None):
    # q,k,v shape: [batch, n_heads, seq_len, d_k]
    attn_logits = torch.matmul(q, k.transpose(-2, -1)) / torch.sqrt(torch.tensor(q.size(-1)))

    if mask is not None:
        attn_logits = attn_logits.masked_fill(mask == 0, -1e9)

    attn_weights = F.softmax(attn_logits, dim=-1)
    output = torch.matmul(attn_weights, v)
    return output

关键参数说明:
mask:用于 decoder 的三角矩阵,防止看到未来信息
d_k:通常设为 64,与原始论文保持一致

Temperature 调节示例

def sample_with_temperature(logits, temperature=1.0):
    logits = logits / temperature
    probs = F.softmax(logits, dim=-1)
    return torch.multinomial(probs, num_samples=1)

调节效果:
– temperature > 1.0:增加多样性
– temperature < 1.0:提高确定性

生产考量

显存占用估算

对于 L 层的 Transformer 模型:

 显存 (B) ≈ 4 * (n_params + 2 * batch * n_layers * seq_len^2)

典型场景:
– 175B 参数模型
– 序列长度 2048
– 需要约 350GB 显存

常见 Bad Case 处理

  1. 重复生成 :通过惩罚重复 token 的概率(repetition_penalty 参数)
  2. 事实性错误 :结合检索增强生成(RAG)引入外部知识

避坑指南

Prompt 设计原则

  • 明确指令格式:” 请用不超过 50 字回答 ”
  • 提供示例:” 例如:输入 ’ 天气 ’,输出 ’ 今天晴转多云 '”
  • 角色设定:” 你是一个专业的医疗顾问 ”

过拟合预防

  1. 早停机制(验证集 loss 连续 3 次不下降终止)
  2. 限制可训练参数:如仅微调 attention 层的偏置项

开放问题

如果要用 LoRA(低秩适配)微调 ChatGPT,下列哪些参数最值得优先优化?
– Attention 层的 Q / K 投影矩阵
– FFN 中间层权重
– LayerNorm 的参数
– 词嵌入矩阵

正文完
 0
评论(没有评论)