尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

大模型内部运转机制全解析:从Transformer到RLHF的AI对话原理

大模型内部运转机制全解析:从Transformer到RLHF的AI对话原理 如果你用过 ChatGPT、Claude 或文心一言有没有想过一个问题这些大模型为什么能和你对话它内部到底是怎么“思考”的很多人把大模型当作一个黑盒输入问题得到答案。但如果你是一名开发者或者希望深入理解 AI 技术仅仅停留在“调用 API”的层面是远远不够的。当模型输出“幻觉”时你如何排查当你想微调一个专属模型时你如何准备数据当你想评估模型性能时你该看哪些指标不理解内部运转机制这些问题都无从下手。最近AI 领域的大神 Andrej Karpathy前特斯拉 AI 总监、OpenAI 创始成员发布了一个长达一小时的演讲系统性地拆解了大模型从训练到推理的完整生命周期。这个演讲没有复杂的数学公式而是用清晰的逻辑和生动的比喻把 Transformer 架构、预训练、微调、对齐、推理优化等核心环节串联了起来。对于开发者而言这可能是理解大模型内部原理最高效的一小时。本文将以 Karpathy 的演讲为核心脉络结合当前主流实践为你彻底讲透大模型到底是怎么运转的。我们不会复述演讲的每一句话而是提炼其核心框架并补充大量工程实践中的关键细节、常见误区和操作指南。读完本文你将能清晰地回答大模型是如何被“制造”出来的它如何“理解”你的问题并生成答案以及作为开发者你该如何与这个庞大的系统有效交互。1. 大模型运转全景图从数据到智能的“制造流水线”在深入细节之前我们首先要建立一个宏观认知。大模型的运转并非一个单一过程而是一条漫长的“制造流水线”。Karpathy 将其精炼地划分为两个主要阶段训练Training和推理Inference。而训练阶段又可进一步细分为几个关键子阶段。我们可以用一个简化的流程图来建立初步印象注意这是概念流程非实际代码原始文本数据 - 预训练 (Pretraining) - 基础模型 (Base Model) 基础模型 指令数据 - 监督微调 (SFT) - 指令微调模型 (SFT Model) 指令微调模型 人类偏好数据 - 基于人类反馈的强化学习 (RLHF) - 对齐模型 (Aligned Model如ChatGPT) 对齐模型 - 部署与推理服务 - 用户交互这个流程的核心价值在于它解释了为什么现在的对话模型如此“好用”。预训练赋予了模型通用的语言知识和世界知识类似于“通识教育”监督微调教会它遵循指令格式类似于“专业技能培训”而 RLHF 则将其行为与人类价值观和偏好对齐类似于“职业道德与沟通技巧培养”。缺少任何一环我们都无法得到今天体验流畅的 ChatGPT。对于开发者理解这个全景图至关重要。它意味着问题定位当模型出现胡说八道幻觉可能是预训练知识不足或 SFT/RLHF 没做好。技术选型如果你只需要一个能完成特定格式任务如代码生成的模型可能到 SFT 阶段就足够了。成本评估预训练成本极高而微调和对齐成本相对较低。大部分开发者接触的是微调和对齐后的模型。接下来我们将沿着这条流水线深入每一个车间。2. 基石Transformer 架构与预训练Pretraining一切始于 Transformer。2017 年那篇著名的《Attention Is All You Need》论文为大模型时代奠定了基石。但 Karpathy 强调理解 Transformer 不必纠缠于数学细节关键是抓住其核心思想自注意力机制Self-Attention。2.1 通俗理解 Transformer一个超级“关联词查找器”想象一下你正在读这句话“苹果公司发布了新款手机它采用了更先进的芯片。” 作为人类你瞬间知道“它”指的是“新款手机”。Transformer 的自注意力机制就是让模型学会在序列的任何位置去“注意”和它最相关的其他词。在技术实现上模型会将输入文本例如“猫坐在垫子上”切分成 tokens可能是“猫”、“坐”、“在”、“垫子”、“上”并为每个 token 生成一个向量表示。自注意力层会计算每个 token 与序列中所有其他 token 的“关联度”一个权重分数然后用这些权重去加权聚合其他 token 的信息从而得到一个包含了上下文信息的新的向量表示。这个过程是并行且全局的不同于 RNN 的顺序处理这使得 Transformer 能够高效地处理长文本并捕捉长距离依赖。2.2 预训练给模型“填鸭式”灌输海量知识有了 Transformer 这个强大的“大脑结构”下一步就是给它“灌输知识”。这就是预训练。目标让模型学会预测下一个词Next Token Prediction。给定一段文本的前面部分让模型猜下一个词是什么。数据使用互联网规模的原始文本如网页、书籍、代码等。数据量可能达到万亿甚至十万亿 token 级别。过程这是一个无监督学习过程。模型通过海量的“完形填空”练习逐渐学会了语言的语法、事实知识、逻辑推理甚至一些编程模式和风格。结果产出一个基础模型Base Model例如 GPT-3、LLaMA。这个模型已经非常强大但它更像一个“知识渊博但不懂礼貌的学者”。你问它问题它可能会继续续写你的问题或者给出一个事实正确但冗长、带有偏见甚至有害的答案。因为它只学会了“预测下一个词”没学会“如何与人对话”。关键实践点Tokenizer在预训练之前文本需要被转换成模型能处理的数字tokens。这个过程由分词器Tokenizer完成例如 GPT 系列用的 BPE 分词。不同的分词器会影响模型的效率和对某些语言的支持。一个常见误区是认为 token 等于单词或汉字实际上它可能是子词或字符组合。# 示例使用 Hugging Face transformers 库查看分词过程 from transformers import AutoTokenizer tokenizer AutoTokenizer.from_pretrained(gpt-2) # 以 GPT-2 为例 text 大模型是如何运转的 tokens tokenizer.tokenize(text) token_ids tokenizer.encode(text) print(f文本: {text}) print(fTokens: {tokens}) print(fToken IDs: {token_ids}) # 输出可能类似于 # 文本: 大模型是如何运转的 # Tokens: [大, 模型, 是, 如何, 运转, 的, ] # Token IDs: [25931, 18604, 3221, 13388, 21133, 4638, 102]这段代码展示了文本如何被切分成 tokens 并映射为 ID。理解 token 是理解模型上下文窗口限制如 4K、8K、128K tokens和计算成本的基础。3. 塑形监督微调Supervised Fine-Tuning, SFT基础模型虽然知识丰富但行为不可控。SFT 的目标就是教会它“听话”按照我们想要的格式进行交流。3.1 SFT 做了什么我们准备一批高质量的“指令-回答”对数据。例如指令“用 Python 写一个快速排序函数。”回答“def quicksort(arr): ...”然后我们在这个数据上继续训练微调基础模型。训练目标依然是预测下一个词但这次数据是精心构造的对话。通过这个过程模型学会了当看到“用 Python 写一个...”这类指令时它应该生成代码而不是续写问题或闲聊。3.2 SFT 的局限与价值SFT 非常有效它能快速让模型适应特定任务格式如客服对话、代码生成、文案创作等。许多优秀的开源指令微调模型如 LLaMA-2-Chat 的早期版本、ChatGLM3-6B主要依赖 SFT。但是SFT 有一个天花板它依赖于我们提供的数据质量。数据覆盖不到的复杂、微妙或涉及价值观判断的情况模型可能表现不佳。例如对于“如何制作炸弹”这种问题SFT 模型可能依然会老实回答因为它只是在模仿数据中的问答模式没有深层的“好与坏”判断。4. 对齐基于人类反馈的强化学习RLHF为了让模型不仅有用而且安全、无害、符合人类偏好OpenAI 在 ChatGPT 中引入了 RLHF。这是让 ChatGPT 从“技术产品”蜕变为“现象级产品”的关键一步。Karpathy 用“训练一只狗”来类比 RLHF非常形象。4.1 RLHF 三步走第一步收集偏好数据训练“奖励模型”我们不再提供标准答案而是提供模型对同一个问题的多个不同回答让人类标注员给这些回答排序哪个更好。例如问题“解释一下量子计算。”回答A专业但晦涩难懂。回答B通俗易懂但略有简化。回答C包含错误信息。 标注员可能会排序B A C。利用大量这样的排序数据我们可以训练一个奖励模型Reward Model。这个模型的作用是给定一个问题和模型的回答它能输出一个分数预测人类对这个回答的偏好程度。第二步用强化学习优化策略模型现在我们把经过 SFT 的模型作为“策略Policy”把奖励模型作为“裁判”。让策略模型生成回答裁判打分。目标是调整策略模型的参数使得它生成的回答能获得尽可能高的奖励分数。这个过程就像训练狗狗做出一个动作生成回答如果得到奖励高分它以后就更可能做这个动作。通过大量的迭代策略模型逐渐学会生成更符合人类偏好的回答——更 helpful、honest、harmless。第三步迭代与融合RLHF 过程可以多轮迭代不断收集新的偏好数据训练更好的奖励模型从而优化策略模型。4.2 RLHF 的工程挑战RLHF 在理论上优雅但在工程上极其复杂和昂贵成本高需要大量高质量的人类标注。稳定性差强化学习训练过程可能不稳定容易“跑偏”。例如模型可能发现一些“欺骗”奖励模型的方式如回答以“根据人类偏好...”开头总能得高分而不是真正提升内容质量。目标冲突在优化“有帮助性”时可能会损害“真实性”导致幻觉增加。尽管如此RLHF 是目前实现大模型与人类价值观对齐最有效的已知方法。后续出现的 DPO直接偏好优化等新技术旨在用更稳定、更高效的方式达到类似目标。5. 推理模型如何“实时思考”训练好的模型最终要为用户服务这个过程就是推理Inference。推理的核心是自回归生成Autoregressive Generation。5.1 自回归生成一个字一个字地“蹦出来”当你向 ChatGPT 发送消息后它的回答并非瞬间完整生成而是一个 token 一个 token 依次产生的。模型接收你的全部输入prompt经过计算输出一个概率分布预测第一个 token 应该是什么。根据某种策略如选择概率最高的 token确定第一个 token并将其追加到输入序列末尾。将新的、变长的序列再次输入模型预测第二个 token。重复此过程直到生成结束标记eos或达到最大生成长度。# 概念性代码展示自回归生成的核心循环 import torch def generate_text(model, tokenizer, prompt, max_length50): input_ids tokenizer.encode(prompt, return_tensorspt) generated input_ids for _ in range(max_length): # 前向传播获取下一个token的logits with torch.no_grad(): outputs model(generated) next_token_logits outputs.logits[:, -1, :] # 采样策略这里使用贪心搜索选择概率最大的token next_token_id torch.argmax(next_token_logits, dim-1).unsqueeze(-1) # 将新token添加到已生成序列中 generated torch.cat([generated, next_token_id], dim-1) # 如果生成了结束符则停止 if next_token_id.item() tokenizer.eos_token_id: break return tokenizer.decode(generated[0], skip_special_tokensTrue) # 实际应用中会使用更复杂的采样策略如top-k, top-p和优化后的生成函数。这个循环就是模型“思考”的核心过程。每一次迭代都依赖于之前生成的所有 tokens因此无法并行化这也是推理速度远慢于训练的原因之一。5.2 推理优化技术为了提升推理速度、降低延迟和成本业界发展了大量优化技术量化Quantization将模型权重从高精度如 FP16转换为低精度如 INT8、INT4大幅减少内存占用和计算量对精度影响很小。KV 缓存Key-Value Cache在生成过程中对于已经计算过的 tokens 的中间结果K, V进行缓存避免重复计算这是推理加速的关键。推测解码Speculative Decoding用一个更小的“草稿模型”快速生成多个 tokens然后用原始大模型快速验证一次性接受多个 tokens提升吞吐量。模型剪枝与蒸馏移除模型中不重要的参数或用小模型学习大模型的行为。对于开发者直接使用优化后的推理库是最佳实践如vLLM,TGI(Text Generation Inference),llama.cpp等。6. 关键挑战幻觉Hallucination与评估理解了运转机制我们就能更深入地看待大模型的核心挑战幻觉。6.1 幻觉从何而来幻觉并非 bug而是模型本质的体现。模型只是在做“概率预测下一个词”它没有真假、对错的概念数据库。以下情况可能导致幻觉训练数据噪声预训练数据中本身存在错误或矛盾信息。概率采样即使正确答案的概率最高如 80%采样时也可能选中概率较低的错误 token。上下文误导Prompt 中如果包含错误前提模型可能会顺着错误前提生成看似合理但实际错误的内容。知识边界模型不知道它不知道什么。对于超出其训练数据范围的问题它倾向于“自信地编造”。6.2 如何应对与评估幻觉完全消除幻觉目前不可能但可以缓解检索增强生成RAG这是当前最有效的工程解决方案。不让模型凭空回忆而是先从外部知识库如向量数据库检索相关文档然后基于检索到的真实信息来生成答案。这相当于给模型配了一个“外部记忆”。提示工程在 Prompt 中明确要求模型“基于已知信息回答”、“如果不知道就说不知道”。后处理与验证对模型输出进行事实核查。评估模型性能尤其是对话模型是一个复杂课题。除了传统的准确率、BLEU 分数更需要关注有用性Helpfulness回答是否解决了用户问题真实性Truthfulness回答是否基于事实减少幻觉无害性Harmlessness回答是否安全、无偏见人类偏好对齐综合来看人类是否更喜欢这个回答目前像 MT-Bench、AlpacaEval 等基准测试以及基于强大模型如 GPT-4作为裁判的自动评估是常用的方法。7. 开发者实践指南从理解到动手理论最终要服务于实践。作为一名开发者理解大模型运转机制后你可以做以下几件事7.1 环境准备与工具链要深入实践你需要一个 Python 环境推荐 3.8和一些核心库。# 创建虚拟环境可选但推荐 python -m venv llm-env source llm-env/bin/activate # Linux/Mac # llm-env\Scripts\activate # Windows # 安装核心库 pip install torch transformers datasets accelerate # PyTorch 和 Hugging Face 生态 pip install bitsandbytes # 用于量化 pip install langchain langchain-community # 用于构建应用 pip install sentence-transformers faiss-cpu # 用于 RAG向量检索7.2 完整示例搭建一个本地知识问答助手RAG我们结合前面讲到的 RAG 技术实现一个基于本地文档的问答系统。这能有效缓解幻觉问题。步骤 1准备知识库并创建向量索引假设我们有一些关于公司产品的 Markdown 文档。# rag_index.py from langchain_community.document_loaders import DirectoryLoader, TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import FAISS # 1. 加载文档 loader DirectoryLoader(./knowledge_base/, glob**/*.md, loader_clsTextLoader) documents loader.load() # 2. 分割文本 text_splitter RecursiveCharacterTextSplitter(chunk_size500, chunk_overlap50) chunks text_splitter.split_documents(documents) # 3. 创建嵌入模型和向量库 embeddings HuggingFaceEmbeddings(model_namesentence-transformers/paraphrase-multilingual-MiniLM-L12-v2) vectorstore FAISS.from_documents(chunks, embeddings) # 4. 保存索引 vectorstore.save_local(faiss_index) print(f已创建索引包含 {len(chunks)} 个文本块。)步骤 2构建检索与生成链# rag_qa.py from langchain_community.vectorstores import FAISS from langchain_community.embeddings import HuggingFaceEmbeddings from langchain.chains import RetrievalQA from langchain_community.llms import HuggingFacePipeline from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline # 1. 加载本地向量索引 embeddings HuggingFaceEmbeddings(model_namesentence-transformers/paraphrase-multilingual-MiniLM-L12-v2) vectorstore FAISS.load_local(faiss_index, embeddings, allow_dangerous_deserializationTrue) # 注意安全提示 retriever vectorstore.as_retriever(search_kwargs{k: 3}) # 检索 top-3 相关片段 # 2. 加载一个本地或远程的 LLM # 示例使用一个较小的开源模型需提前下载 model_name Qwen/Qwen2.5-1.5B-Instruct # 或使用其他模型 tokenizer AutoTokenizer.from_pretrained(model_name, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained(model_name, device_mapauto, torch_dtypetorch.float16) pipe pipeline(text-generation, modelmodel, tokenizertokenizer, max_new_tokens512) llm HuggingFacePipeline(pipelinepipe) # 3. 创建检索问答链 qa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, # 简单地将检索到的文档“塞”给模型 retrieverretriever, return_source_documentsTrue, verboseTrue ) # 4. 提问 query 我们公司产品的主要优势是什么 result qa_chain.invoke({query: query}) print(答案, result[result]) print(\n--- 参考来源 ---) for doc in result[source_documents]: print(f- {doc.page_content[:200]}...)这个例子展示了如何将外部知识向量库与大模型生成能力结合构建一个更可靠、可追溯的问答系统。这正是理解了模型“幻觉”本质后采取的工程对策。8. 常见问题与排查思路在实际操作中你可能会遇到以下问题问题现象可能原因排查方式解决方案模型输出乱码或重复生成参数如 temperature, top_p设置不当模型本身训练问题。检查生成参数尝试降低 temperature如设为0.1检查 prompt 是否清晰。调整生成参数尝试不同的采样策略提供更明确的指令。回答与问题无关严重幻觉模型知识不足Prompt 引导性不强检索系统失效对于RAG。先测试一个模型已知的简单事实问题检查 RAG 检索出的文档是否相关。使用 RAG 引入外部知识改进 Prompt如“请根据以下上下文回答...”考虑微调模型。推理速度极慢模型过大未使用 GPU 或 GPU 内存不足未启用优化如 KV 缓存。使用nvidia-smi查看 GPU 使用情况检查代码是否在 CPU 上运行。对模型进行量化如使用 bitsandbytes 加载 4-bit 模型使用vLLM等优化推理引擎确保使用 GPU。加载模型时内存不足OOM模型参数过多超出 GPU/CPU 内存。计算模型大致内存占用参数量 * 精度字节数。使用量化如 8-bit/4-bit使用模型分片如accelerate库使用 CPU 卸载部分层放 CPU。微调后模型“失忆”或变差灾难性遗忘新数据覆盖了旧知识微调数据质量差或量太少。评估模型在原始任务和新任务上的表现。在微调数据中混合一部分原始预训练数据使用 LoRA 等参数高效微调方法只训练少量参数。9. 最佳实践与未来方向基于对大模型运转机制的理解我们可以总结出一些最佳实践并展望下一步的学习方向。最佳实践理解成本结构预训练极贵微调次之推理按需付费。根据需求选择合适的基础模型和微调策略。Prompt 优先在考虑微调前务必先优化你的 Prompt。清晰的指令、上下文和示例Few-shot往往能大幅提升效果。用 RAG 解决知识更新和幻觉对于需要精确、最新知识的场景RAG 是比重新训练或微调更经济高效的方案。评估是关键不要只看生成的文本是否“流畅”要建立针对你业务场景的评估体系如准确性、安全性、用户满意度。从小开始快速迭代先用小模型如 7B、13B跑通整个流程数据、Prompt、RAG、评估再考虑是否需要用更大模型。未来学习方向深入 Transformer研究注意力机制的各种变体如 FlashAttention、模型架构的演进如 MoE, Mixtral。掌握高效微调学习 LoRA、QLoRA、Prefix Tuning 等参数高效微调技术以极低成本定制模型。探索推理优化深入了解量化、编译如 Torch.compile、服务化部署如 vLLM, TGI。关注对齐技术了解 RLHF 的替代方案如 DPO、KTO以及 Constitutional AI 等安全框架。构建 AI 应用架构学习 LangChain、LlamaIndex 等框架设计包含规划、工具调用、记忆等模块的复杂 Agent 系统。大模型不再是遥不可及的黑箱。通过拆解其训练、对齐、推理的生命周期我们看到了一个由数据、算法和巨大算力构建的复杂系统。作为开发者我们的目标不是从头再造一个 GPT而是深刻理解这个系统的原理、优势和局限从而能够更好地驾驭它用它解决真实世界的问题。从理解 Token 开始到熟练运用 Prompt 和 RAG再到有能力对特定模型进行微调这条学习路径清晰可见。现在是时候动手将这份理解转化为实际生产力了。
返回列表