基础研究 1 days ago 101 Views 0 Comments

从零到ChatGPT,大语言模型 (LLM) 是如何炼成的?

人人都是产品经理

Published 1096 Articles

从“语言模型”到“类人智能”,ChatGPT的爆火背后,是大语言模型技术的飞跃与演进。本文将带你穿越技术迷雾,从基础原理、模型训练到产业落地,系统梳理LLM的发展路径与关键节点。

面向2025年末出发的今天,已经没有人会质疑AI的强大能力,以及它即将走进千家万户的必然趋势 。像ChatGPT这样的大语言模型(LLM)已经逐渐赋能入我们的工作与生活,一再展现出我们意想不到的能力。

然而,求知欲的本能推动着我,让我发问:这些强大的AI究竟是如何被“训练”出来的?我写作此文的目的,正是为了让每一位对此好奇的读者都能理解AI训练的基本逻辑,于是便有了这篇深度拆解文章。

首先感谢地球🌍另一端的安德烈·卡帕西(Andrej Karpathy),他作为AI领域的关键人物,同样对AI的普世化极其重视,所以我会在他以化繁为简的视频基础上加以详细拆解。

通往LLM的路径

在深入细节之前,让建立一个清晰的蓝图。下表总结了这四个关键阶段的目标、数据、核心技术

阶段一:预训练(pre-training)—— 用整个互联网构建一个数字大脑

这是整个过程中计算成本最高、耗时最长的阶段。这个阶段的基础模型(Base Model)会在包含书籍、文章、网站、代码等在内的海量的文本数据上进行训练。通过反复执行“预测下一个词元”这个简单的自监督学习任务,模型逐渐学会了语法规则、掌握了大量事实知识,并发展出了初步的推理和编程能力。

【1】爬虫爬取互联网公开资源的数据集(以fineweb数据集为例)

要构建LLM,我们所需要的数据来自20世纪最杰出的发明互联网。但并非所有网络数据都是我们需要的,我们的目标在于:从公开资源中获取海量、种类繁多、且知识范围广高质量文本(此处训练的是LLM大语言模型,所需的材料即为文本)。虽然2025年的今天互联网的数据量粗算已经来到了175ZB(泽字节1ZB≈1024³GB),但LLM需要的是筛选后的高质量文本。

OpenAl、Anthropic 、谷歌这样的大型语言模型提供商都有自己筛选后构建的数据集。在huggingface严格筛选下的fineweb数据集很好的代表了实际生产中的应用情况,最后的数据集甚至只占用了44TB的容量,他们以非盈利的爬虫组织CommonCrawl 所爬取海量数据为基础来制作数据集。

简单说明一下commoncrawl的爬取模式:

互联网存在太多琐碎的我们不需要的数据,例如:

  1. URL过滤:恶意软件网站、垃圾网站、营销网站、音频、视频网站、种族歧视网站、成人网站,诸如此类。(URL过滤规则网站示例https://dsi.ut-capitole.fr/blacklists/)
  2. 文本提取:爬虫保存下来的其实是原始HTML代码,代码中会存在列表标记,导航栏,或是css样式表之类的代码所以同样需要过滤掉。
  3. 语言识别阶段:fineweb在制作数据集时,只保留英语内容超过65%的网页。(PS:这是不同公司在设计大模型时的策略不同,如ChatGPT一类的国外LLM定然会更侧重英语内容材料。🌰例:如果我在收集数据集的过程中过滤掉中文,那可想而知这个模型在中文的表现力上会超级差。即不同公司在开发LLM时的侧重点不同,而导致的训练集需求不同。)
  4. 去重:去掉不同网站的同一信息的材料
  5. 个人可识别信息(PII)过滤:地址、电话、身份证号(personallyidentifiableinformation)

最后得到例如“fine web”的数据集,这些纯粹的人类语言的文本数据。(如觉得不直观可去看看最后fine web的数据集中的真实文本数据
https://huggingface.co/datasets/HuggingFaceFW/fineweb)

【GIF图中滚动的部分展示的就是fine web中的爬取后并筛选出来的高质量文本数据】

【2】开始制作模型数据集

我们要做的就是开始用这些数据训练神经网络,这样神经网络就能吸收消化,并模仿文本的行文方式/文本特征。

接下来,我将直观的模拟数据集内部的变化情况,我把所有前文获得的文本排列在一起组成模型数据集(一维文本),就像这样:

但在我们将文本喂给神经网络之前,我们将确定如何表示这些文本&怎样把他们输入网络

因为神经网络和人不一样,他“不懂”人类的语言。

我们得大致讲一下神经网络的技术工作原理:

他需要输入一维“符号序列”,且这些符号必须来自一个有限集合。所以我们得去确定,使用哪些“符号”。并依据我们需要的这些“符号”把文本转化为这些符号组成的一维序列。

【以上这段话十分重要,这是我们了解LLM预训练最重要的地方】

而且,虽然你看到的上图中的文字集呈现的一个“面”,就像你现在正在阅读我写的这一篇文章,在你的显示器上呈现二维的样子,但实际上他也是从左到右、从上到下排列的。只是为了方便在你有限的显示屏内阅读,而展示成了二维,其本质还是一维的文字集。

而说到计算机,这些文本在底层编码后,得到的计算机中对应这段文本的原始比特数据,而展示的一种特定的表示方式:

像这样,我们就把获得的文字数据集变成了计算机能够读懂的,由0 & 1两个符号组成的,专属于计算机的“文本序列”。

如果看过黑客帝国的朋友肯定不陌生,在男主neo在最后觉醒成救世主后所看到的世界。你可以粗略的理解为这就是神经网络能看懂的两个符号“0 & 1”,他构成了伟大互联网世界的一切。

但是,对于神经网络来说,只有“0&1”组成的序列还是太占地方了,因为由这些符号组成的序列,他的长度是有限的,是神经网络中最宝贵的资源之一,他决定着神经网络的训练效率,以及训练好后的调用效率。我们想要的不是“0&1”两个符号组成的过长序列,所以我们把数据集中高概率出现的符号连续的字节,继续压缩成全新符号。再次强调这些数据不要把他看成数字而是把他看成一个一个便于给神经网络使用的符号。也可以类似理解为“Emoji”➡️“🤣😭🌟”。这样只要“符号”越多,我们就能成倍的压缩我们的字节序列。直接减少我们数据的总长度,和扩大我们的符号集。

一句话总结:我们把我们获取的文本数据转换为模型能读懂,且节省“空间”的高效语言。

依据行业里的经验,一个比较理想的符号集数量,大约是10万个符号。

以上将原始文本转换成这些符号的过程,叫做“分词”(tokenization)最终,文本(如句子、段落)被分割成的一个个独立符号,称为“tokens”。

这些 tokens 可以是单词、子词、标点符号等(甚至同一单词不同的大小写都会影响产生不同的tokens),是模型处理文本的基本单位。在预训练模型(如 BERT、GPT 系列等)中,tokenization 是预处理文本数据的最关键步骤之一。如果你感兴趣想去直观了解不同模型不同数据集而影响的分词tokens长啥样可以去 tiktokenizer 这个网站输入你想要的文本选择你想了解的模型,亲手体验一下。

【直观感受文本于tokens的网站:
https://tiktokenizer.vercel.app/?utm_source=listedai】

在最后得到一个这样的全是符号的数据集,开始训练我们的基础大模型(Base Model)。

【3】如何训练基础大模型(Base Model)

训练神经网络(neural network training)的过程的这个阶段,是计算量最大、最耗费资源的部分。

在这一步我们要建立统计关系模型,具体来说就是这些tokens在序列中如何相互关联,我们首先要做的是回到刚刚的“词汇表”(序列数据集)中提取一段tokens,并输入给模型⬇️

比如:

提取并输入{【91】、【860】、【287】、【11579】}。去预测下一个可能的内容{【tokens】}

本质上他是一个随机过程,所以在训练初期输入{【91】、【860】、【287】、【11579】}后对应得到的{【19438】}、{【11799】}、{【3962】}这三个答案的概率基本是随机的。由于我们的词库包含了100,277(以GPT4为例)个的tokens。神经网络就存在100,277个可能的情况。

我们使用一个数学公式/算法(比如核心的梯度下降)去更新神经网络。本质上就是提升我们想要的正确答案的概率,降低其他所有选项的概率。

现在更新神经网络后再输入{【91】、【860】、【287】、【11579】}这4个特定的tokens后,神经网络就会有所调整,得出新的结果:

以上4个tokens组成的这条序列(上下文)的长度可以从0 tokens~8000 tokens。这里的0~8000 tokens,就是我们预设的上下文窗口的最大值。理论上我们可以使用任意长度的上下文,比如4000、8000、16000。但处理越长的上下文计算起来就越耗费资源,所以能处理多少的上下文也算做检验这个模型是否强大的指标之一。

比如 GPT-4 的上下文窗口能处理几万字的文本,这意味着它能“记住”更长的对话或文章内容,不会聊到一半就“忘了前面说什么”——上下文窗口越大,模型处理长文本的能力越强。

当然训练神经网络的过程不仅仅发生在这个4个特定的tokens上,而是同时作用于整个数据集中的所有tokens。

这就是神经网络的训练过程,它的本质就是找到一组合适的参数设置,让预测结果训练集的实际统计数据的特征相符。使词元之间的关联概率一致,这些tokens相互跟随的统计规律与数据集中的一致。

这里简单展示了神经网络的内部结构(现代的神经网络可能是由数万亿个项组成的庞大表达式来构成),神经网络架构研究的目标就是设计出高效的数学表达式(有着易于优化、可并行处理等优势的表达式)。

这里,我需要简述一下模型内最重要的Transformer架构:

2017年那篇名为《Attention is All You Need》的论文,它引入的Transformer架构,成为了GPT乃至整个现代AI领域的基石,在这里我会简单分享他是怎么样在模型中运行的,方便理解模型的工作状态。

Transformer本质上是一套带“自注意力机制”的数学函数:它能让模型在“猜下一个词”时,重点关注上下文里更重要的词(比如“喜欢唱跳”后面,“篮球”比“天空”更相关),这种对‘关联度’的捕捉能力,正是 GPT 等模型能理解语境、进行推理的关键。

它由一堆固定参数来定义,是把输入转化为输出的一种方法。当我们微调这些参数时,就会得到不同的预测结果。我们目的是要找到一组最佳的参数设置,让预测结果大致符合训练集中的模式

(PS:此处重要的是在理解模型是怎么样根据问题生成答案的。)

  1. 首先我们给模型我们的词元(tokens)
  2. 模型会根据向量空间(模型存储“知识”的一个空间)中的权重(注意哪两个token更重要,以及token间的紧密性)来激活对应包含知识的“神经元”进行“猜测”
  3. 最后在注意全部输入的tokens以及注意全部输出的tokens下,逐步一个一个词的“猜”出答案。

【Transformer3D可视化网站:https://bbycroft.net/llm】

这个阶段的产物是一个基础模型(Base Model)。它知识渊博,但还不是一个合格的助手。如果你向它提问 “教我如何烤面包” ,它很可能会续写成 “在一个家用烤箱里” ,因为它认为这是一个在统计上最合理的句子补全,而不是提供一份步骤指南。模型每一次的生成,都伴随着不断的“掷硬币”,所以并不是每一次模型都能准确的输出一模一样的答案。

所以,从本质上讲,一个基础的大语言模型(Base Model)本质上是一个“基于统计的词语组合器”。它唯一的目标就是观察一串文本序列,然后预测出在统计上最有可能紧随其后的下一个词或字符(即“词元”)。

接下来我们来看一个具体的训练例子,以及一些具体的推理过程让你直观感受其实际效果。(以训练GPT2为例)

【红框勾选的每一行都是一次模型的更新,每一行都是优化训练集中百万tokens的预测能力。】

我们在更新模型的预测能力时,同时更新每一个token的权重。也就是更新神经网络的参数。

我们微调参数,提高它预测序列中下个token的能力。

在更新过程中,你就只需优雅的点一杯咖啡☕️,静静的守在电脑前观察损失值,他反映了神经网络当前的性能好坏,观察数值越低越好。

阶段二:有监督微调(SFT)

此时我们发现,我们已有的Base Model,他只是一个“阅读了世界上所有百科全书的孩子”,他还不懂得怎样有效的跟人类对话。所以我们需要“给他案例,教会他怎么说话”。

所以我们在此时可以给他例举几段我们想要的query+response的问答对,引导模型“说话”,例如:

其中:

“<|im_start|>user<|im sep|>” & “<|im start|>assistant<|im_sep|>”指是谁在发出问题

“<|im_end|>”指此条输入结束

以上所有的:

“<|im_end|>”“<|im_start|>user<|imsep|>”“<|im start|>assistant<|im_sep|>”

都是在预训练阶段从未出现过的“新标记”,这些标记就像“对话的标点符号”,告诉模型:这部分是用户问的,那部分是模型助手该回答的。

让模型清楚的认识到这个结构,引导让他真正意识上成为一个能给予我们想要的回答与回答格式的“助手(assistant)”。

所以在这个阶段,研究人员会收集一个规模相对较小但质量极高的数据集,其中包含了成千上万条由专业的AI训练师与数据标注人员共同构建出的“query—response”的问答对儿(QR对儿)。模型会在这个数据集上进行有监督学习,目标是模仿这些高质量的范例

SFT的核心目的,与其说是教给模型新知识,不如说是教给它一种新行为。预训练模型已经拥有了海量的知识,但这些知识是以一种无序、非对话的形式存在的。

而SFT则为模型提供了一个行为模板,告诉它:“当用户以X的形式提问时,你应该以Y的形式回答。”它重塑了模型的输出风格,从“补全”转变为“协助”,从而解锁了其庞大预训练知识库的实用价值 。

实际工作中数据标注员会写下一个指令,如“用简单的语言解释相对论”,然后再撰写一个理想的、有帮助的回答。模型通过学习这些范例,模仿这种行为模式 。

SFT明确地教会了让模型扮演“助手”这一角色的格式和风格。它将模型的目标从“补全这段文本”转变为“有帮助地回应这条指令” 。这是一个典型的有监督学习过程 。

阶段三:强化学习(RL)

我们在训练模型就像是让模型去“上学”:

其核心机制模仿了人类乃至动物通过“试错”来学习并实现目标的过程 。

这一学习过程基于一个直观的“奖惩”范式:

当模型的行为有助于实现预设目标时,该行为会得到“强化”。反之,那些偏离目标的行为则会被“忽视”或“惩罚”。强化学习算法在处理数据的过程中,通过分析每次行动带来的反馈,自主探索达成最终目标的最佳路径。

🌰例如训练宠物

想象训练一只狗:当狗做出‘坐下’这种我们期望的行为时,训练师用抚摸、喂食作为‘奖赏’;如果狗做出乱咬的行为,则没有奖赏。狗会逐渐通过‘试错’学会‘做对事有奖励’,这就是强化学习的核心逻辑——模型就像这只小狗,通过“行为→反馈(奖/惩)”的循环优化策略

它是一种自主学习机制,模型在没有明确“正确答案”指导的情况下,仅凭环境的反馈信号,就能逐步优化其行为策略。

阶段四:基于人类反馈的强化学习(RLHF)

把每个这样富有创造性的任务的所有生成结果依次让数据标注人员借助制定好的规则加上一定的主观评判,对其进行打分,用于模型训练。

阶段四内:所以针对这个情况,我们需要借助一个“小模型”–奖励模型(Reward Model)

实际结合RM进行的RLHF如下:

  1. 针对一个给定的提示(prompt),让SFT模型生成多个不同的回答。
  2. 人类标注员会对这些回答进行排序,从最好到最差。
  3. 然后,利用训练出的这个独立的语言模型,即“奖励模型”(RewardModel)。把上述标注员的排序,输出一个单一的数值分数。这个分数代表了“一个典型的人会有多喜欢这个回答”。

这样标注人员就不需要去做夸张工作量的打分,而是做少部分的素材排序,更便于训练。

而奖励模型,它本身是一个至关重要的“抽象层”。因为人类的价值观是复杂的、主观的,且难以用明确的规则来编码。直接用这种模糊的反馈来训练主模型是极其困难的。奖励模型的存在,就是为了学习一个简化的、可计算的“代理指标”,来代表这个复杂的价值系统。这个单一的数值分数,为最终的对齐阶段提供了一个清晰、可优化的数学目标。奖励模型就像一个翻译器,将模糊的人类偏好,翻译成了强化学习算法可以理解的语言。

通过这个循环,LLM被训练去生成那些能够从奖励模型中获得最高分数的回答。这个过程使得大规模对齐成为可能,其规模远超人类手动编写SFT数据所能达到的范畴。

RLHF是塑造模型最终“性格”的关键,使模型变得更强大,并与复杂的人类价值观保持一致 。为了防止模型在追求高奖励分数的过程中“走火入魔”(幻觉),产生偏离正常语言模式的奇怪回答,通常还会加入一个惩罚项,确保其输出不会与原始的SFT模型差异过大。

结语

呼~~到这里,这轮关于 LLM 的分享就告一段落了。

其实坦白说,这篇文章算不上原创,更像是对安德烈・卡帕西系列视频的一次拙劣模仿。他用化繁为简的智慧敲开了我理解 AI 的大门,而我只是试着把这份通透,用更贴近中文读者的视角再讲一遍。若能像他年初帮到我那样,给一些好奇的朋友带去启发,就足够让我觉得值得。

跟着文字走完这趟旅程会发现:ChatGPT 这类 LLM 的构建逻辑从不是遥不可及的 “黑箱”。从预训练时吞下海量文本搭建知识地基,到SFT教会模型 “以助手身份对话”,再到RLHF用人类偏好校准方向,每一步都是前人从无到有的探索。看吧~抱着学习的心态拆解,那些看似复杂的技术,离我们一点也不远。

而 AI 本身,早已不是钢铁侠中的贾维斯只是一个符号。它注定会像水、像法拉第发现的交流电那样,成为渗透生活的基础力量,甚至在未来承载更复杂的创造与连接。

当然,篇幅所限,还有太多有趣的话题没能展开:比如 LLM “幻觉”背后的逻辑,又比如 DeepSeek 那样的模型如何实现“深度思考”。但即便如此,我也依然能冥冥中感觉到到 “AI 走进千家万户” 的未来轮廓。

就像年初卡帕西的视频点亮了我,希望这篇梳理也能为一些朋友添一点光亮。而我们所有人,都在朝着通用 AGI 的方向,带着憧憬,一步步靠近。

本文由 @四吉在这 原创发布于人人都是产品经理。未经作者许可,禁止转载

题图由作者提供

人人都是产品经理

人人都是产品经理

1096 Articles 158562 Views 58654 Fans

Comment (0)

睡觉动画