掘金 人工智能 07月09日 13:43
苹果🍎的奇幻漂流,当你提问后,ChatGPT在“想”什么?
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入浅出地解析了大型语言模型(LLM)的工作原理,以“我喜欢吃苹果”为例,揭示了从Token化、词嵌入到Transformer架构的完整流程。文章详细介绍了SFT和RLHF两种调教技术,以及LLM在生成回答时的“词语接龙”机制。同时,也指出了LLM的局限性,强调其本质是统计规律的体现,而非真正的理解。最终,文章鼓励读者将LLM视为强大的信息助手,而非全知全能的神。

🍎 **Token化与词汇表:** 计算机通过将文本拆解成Token(如字、词或标点符号),并赋予每个Token唯一的ID,完成了从文本到数字的初步转换,为后续处理奠定了基础。

💡 **词嵌入(Embeddings):** 通过将数字转化为高维向量,词嵌入技术使计算机能够“理解”词语之间的语义关系,将语义相似的词汇映射到向量空间中距离相近的位置。

🧠 **Transformer架构:** Transformer架构中的自注意力机制,通过为每个词生成Q、K、V三张“牌”,让每个词都能关注句子中其他词,从而理解上下文关系,解决了早期模型处理长句时信息丢失的问题。

🗣️ **SFT与RLHF:** SFT通过模仿人类提供的标准答案,让模型学习“正确答案”;RLHF则通过人类对多个答案的排序和打分,使模型学习人类的偏好,从而生成更自然、更符合人类价值观的回答。

从“我喜欢吃苹果🍎”说起

某个悠闲的午后,你在键盘上敲下“我喜欢吃苹果”,几秒钟后,ChatGPT 就给出了一个回复。

这时,你会不会好奇:屏幕后面发生了什么?这个“语言模型”是怎么“读懂”我的话,然后“想出”答案的?难道计算机真的会“思考”吗?

大语言模型发展的背景从图灵测试到语言模型

早在1950年,计算机科学先驱艾伦·图灵就提出了一个著名的思想实验——图灵测试。它的核心很简单:如果一个人通过文字对话,无法区分屏幕那头是真人还是机器(超过30%的误判率),就认为这台机器通过了测试,展现了智能。

为什么提这个呢?因为图灵测试为衡量机器能否“像人一样聊天”设定了一个重要标杆。我们不必纠结“智能”的哲学定义,就看它能不能进行流畅、自然、有信息量的对话

自然语言处理与人工智能发展历史有着密切而复杂的关系,如今当你使用 ChatGPT 时,是不是偶尔也会因为它某个精妙的回答,产生“屏幕后面是真人吧?”的错觉呢?这正是语言模型几十年发展的成果。看看它们是怎么一步步变聪明的

时期里程碑技术特点对话能力怎么样?
1950-1960sIBM俄英翻译机(1954)靠词典+语法规则很死板,一句话说错就懵
1960-1970sELIZA(1966)SHRDLU(1972)模式匹配+有限场景推理像背台词,只能按剧本走
2010sSiri(2011)Watson(2011)任务型问答+搜索整合能办事,但聊天容易卡壳,多轮对话弱,依赖预设流程
2013-2017Transformer(2017)自注意力机制突破能理解上下文关联了!但还不太会“创作”
2018-2020BERT(2018)GPT-3(2020)预训练大模型崛起,千亿参数聊天能力大飞跃!知识渊博,但逻辑偶尔抽风
2022至今ChatGPT(2022)GPT-4(2023)人类反馈强化学习 (RLHF) + 多模态聊天真假难辨,轻松通过图灵测试

背景说完了,那这些模型到底是怎么“听懂”我们的话,并“说出”回答的呢?故事得从计算机怎么“认识”文字开始讲起。

第一步:把文字变成“积木块” (Token)

计算机可看不懂“苹果”、“喜欢”这些字。它只认识数字!所以第一步,就是把你的句子拆成一小块的“积木”,这叫做 Token(分词)。可以是一个字,也可以是两个字的词,或三个字的词(像乐高积木),给定一个句子时,我们有多种获取不同Token的方式,可以分词,也可以分字。

好奇你的话会模型被切成什么样?可以试试 OpenAI 的 Tokenizer 可视化工具

以 “我喜欢吃苹果。” 为例子会被切成:["我", "喜欢", "吃", "苹果", "。"]形式(具体切法取决于模型的设计,不同的算法模型切割的方式略有不同)。

这就像把乐高玩具拆成一个个小积木块,是计算机理解人类语言的第一步。

第二步:给积木块编号 (词汇表 Vocabulary)

光分解成“积木块”还不够,计算机需要给每个独特的积木块分配一个唯一的 ID 号码。这需要一个巨大的 词汇表 (Vocabulary) ,它本质上是个双向电话簿

它是实现文本到数字转换的桥梁。它主要体现为一个映射表,将人类可读的字符串(token)与机器可识别的ID关联起来。

比如我随便写一个词汇表模拟一下

    vocab = {        '[PAD]': 0,    # 填充符        '[UNK]': 1,    # 未知词        '[CLS]': 2,    # 句首分类符        '[SEP]': 3,    # 句子分隔符        # 英文部分 大模型的多语言也是这么处理的,多种语言都可以建立在词汇表上        'hello': 4, ',': 5, 'world': 6, '!': 7, 'how': 8, 'are': 9, 'you': 10, '?': 11,        # 中文        '我': 12, '喜欢': 13, '吃': 14,         '苹果': 15, '。': 16,            '香蕉': 17,           # ...                    '水果': 20,    # 相关概念        # ... 还有成千上万的其他词汇    }

由此你输入的一段话“我喜欢吃苹果。”最终进到模型里的其实是一连串id : [12, 13, 14, 15, 16]

GPT-4中 转换的id如下

第三步:计算机怎么“懂”文字的意思?词嵌入(Embeddings)

计算机现在拿到了 [12, 13, 14, 15, 16] 这串数字。但它还是不懂“苹果”是水果,也不知道“苹果”和“香蕉”是同一个种类,更不知道什么是“水果”。因为数字本身其实没意义!

这时,词嵌入 (Embedding) 登场了!它能把冷冰冰的数字 ,变成充满“含义”的向量

在语言模型训练之初,会创建一个巨大的 Embedding 矩阵,例如:假设词汇表有 5 万个 Token,每个 Token 都对应一个高维向量768(GPT-3 甚至高达 12288 维)那么矩阵形状 [50000, 768] 。具体根据模型的不同而不同

其中的规则就是,语义相似性 = 距离相近,语义上相似的词,在经过Embedding矩阵转换后,它们的向量在向量空间中的距离会更近。语义相似的词在向量空间中自动聚集成簇(相似的都聚在一起)

我们人脑根本无法想象这个空间,但可以将其类比为三维空间,大概像下图这样。

模型通过“阅读”海量互联网文本,不断调整每个词在这个高维空间里的位置。

我用简单的二维显示下矩阵(实际空间维度超高)

                             ^                                |                                |                          [植物区]                                |                        树🌳 •      • 叶子                                |                                |            [科技区]             |              [水果区]        • 手机                   |         • 香蕉 🍌                • 电脑💻         |      • 草莓 🍓                     • 耳机      |   • 橙子 🍊                         •      |        • 苹果 🍎 (最终位置)                                |            /  \                                |           /    \                                |     • 吃 🍽️   • 健康 💪                                |        \        /                                |         • 甜 🍬                                |      [无关区] • 汽车 🚗 • 足球 ⚽ |                              |                                |                                |                                |                                |------------------------>  

“苹果”这个词的向量位置,是在训练过程中,通过无数包含“苹果”的句子(如“我吃了苹果”、“苹果是健康水果”、“这有一棵棵苹果树)学习调整后确定的。最终,它稳稳落在了 水果区 和 植物区 的交界地带。

阶段输入示例“苹果”向量移动方向靠近的区域或相关词语描述
初始随机位置-随机分布在空间中可能靠近无关区,如:足球⚽️在初始训练时,"苹果"的向量随机分布,可能与无关的词语接近。
阶段 1“我吃了苹果”向 吃🍽️吃🍽️看到“苹果”与“吃”语境关联,模型调整其位置,逐渐靠近这些相关词语。
阶段 2:进一步训练“苹果是健康水果”向 健康💪 和 香蕉🍌 靠拢健康💪、香蕉🍌当训练数据包含“苹果是健康水果”时,"苹果"向健康和其他水果相关词语的方向偏移。
阶段 3:环境调整“这有一颗棵苹果树”向 树🌳 方向偏移树🌳在涉及“苹果树”的上下文时,“苹果”的位置会向植物类的词语(如树)靠拢。
阶段x
最终位置停在 水果区 与 植物区 交界处水果区、植物区经过多轮训练后,“苹果”的最终位置应位于水果和植物的交界处

还是以 我喜欢吃苹果 为例子,算出向量,大模型就知道了苹果这个词背后的关系

假设算出来的向量如下水果区:🍎 苹果 = [0.8, 0.2, -0.3]🍌 香蕉 = [0.7, 0.3, -0.2]🍊 橙子 = [0.9, 0.1, -0.4]科技区:🚗 汽车 = [-0.5, 0.9, 0.6]⚽️ 足球 = [-0.4, 0.8, 0.7]

计算向量距离

得出结论

苹果 和 香蕉 靠得近 → 它们是同类(水果)

苹果 和 汽车  离得远 → 它们含义不同(没有直接关系)

计算机会“算出”关系:

就这样,通过 Embedding,计算机虽然不懂“苹果”的概念,却能精确“计算”出它和其他词语的关系网,从而“读懂”了你的话!这就像我们学习一门语言,总是先学短语,固定搭配等,再理解长难句一样。

第四步:模型的最强大脑——Transformer(理解上下文的关键)

现在,模型拿到了代表你输入的那串数字(ID),并通过 Embedding 把它们变成了有“含义”的向量。但它怎么理解整句话的意思,尤其是词与词之间的关系呢?

还是举个苹果🍎例子“小明吃苹果,因为他饿了。”

我们通常是怎么思考的?

那语言模型是怎么知道“”指代的是”小明“呢?

早期的模型处理长句子时,语言模型很容易“忘记”开头说了啥,或者抓不住远处的词之间的联系,直到Google2017年发的一篇论文:“Attention Is All You Need”,提出了 Transformer 架构,其核心 自注意力机制 (Self-Attention) 完美解决了这个问题!简单来说就是在语言模型建模过程中,把注意力放在那些重要的Token上。

自注意力机制(Self-Attention)给每个词“发牌”

Transformer 在处理一个句子时,会为句子里的 每一个词 生成三张特殊的“牌”:并且通过权重矩阵(这里不展开了)分别赋值,大概意思如下

Q (问题牌 - Query)K (身份牌 - Key)V (信息牌 - Value)
小明“我是谁?在干嘛?” (主语)“我是人名/动作发起者”“我叫小明,是人”
“谁吃?吃什么?” (动作)“我是一个动作/行为”“吃这个动作需要对象”
苹果“被谁吃?是什么?” (对象)“我是食物/被作用对象”“苹果是一种可吃的东西”
因为“连接什么?原因还是结果?”“我表示原因”“我说明前面动作的原因”
“我指代谁?!” (关键问题)“我是代词,需要找指代对象”“我可能指人或物”
饿“描述谁?是什么状态?”“我是一种身体状态/原因”“饿会导致人想吃东西”

每个词用自己的 Q 牌去“询问”句子中所有词的 K 牌!

以 “他” 为例,向句子中的所有其他值发问:

Softmax 分配注意力权重

模型会把所有匹配度得分(原始分数),通过一个叫 Softmax 的函数转换成 概率分布(加起来等于 1)。这就像给每个词对“他”的重要程度打分

目标词关联词计算过程Softmax后权重含义
小明Q_他· K_小明 = 高相似度0.85“他”极可能指代“小明“
苹果Q_他 · K_苹果 = 低相似度0.10“苹果”不是指代对象
饿Q_他 · K_饿 = 中等相似度0.05“饿”是状态,非指代对象

“他”在模型的新理解 = 0.85 * V_小明 + 0.10 * V_苹果 + 0.05 * V_饿

由此模型明确知道 “他≈小明“

多头注意力(Multi-Head)多个视角,更全面的理解

一个 Transformer 通常不会只有一个“分析员”,而是有 多个(比如 12 个)注意力头 (Multi-Head) 同时工作!每个头都独立地玩一遍上面的“发牌提问”游戏,但它们关注的角度可能不同:

头编号关注点例子
头1语法结构“他”关联“小明”(主谓一致)
头2因果关系“吃”关联“饿”(因为饿才吃)
头3指代消解“他”明确指“小明”而非“苹果
·········

每个头都为“他”输出一个新的理解向量。 然后,这 12 个头向量会被拼接起来,再经过一些处理,最终融合成“他”这个词在这个句子上下文里的最终理解。

多头注意力就像一个专家团队协作: 每个“头”是一个独立的“语言专家”,从不同角度(语法、因果、指代...)分析句子中每个词的关系。最后,所有侦探的发现汇总起来,模型就彻底理解了整句话的逻辑: “小明因为饿了,所以吃了苹果” 。这样,它就能避免说出“苹果饿了”这种奇怪的理解,也能流畅地回答后续问题,比如“那小明吃饱了吗?”

Transformer 的自注意力和多头机制,正是 ChatGPT 能如此“聪明”地理解上下文的核心秘密武器!

第五步:生成回答——“词语接龙”大师

现在,模型已经“理解”了你的输入(“小明吃了苹果,因为他饿了”),并准备好“回复”了。它是怎么做的呢?

答案就是玩一个超级复杂的“词语接龙”游戏!回答你的过程其实就是“边猜边写”(推理生成)

    基于输入: 它先仔细“读”你输入的所有内容(已转换成向量并理解上下文)。猜第一个词: 基于你输入的内容,它运用学到的海量知识,计算出接下来最可能出现的第一个词是什么(比如,你输入“我喜欢吃苹果”,它可能算出“苹果”后面接“很”或“是”的概率很高)。猜下一个词: 把你输入的内容 加上 它刚猜出来的那个词,一起作为新的“开头”,再去猜下一个最可能的词(比如,输入+“很” → 猜“甜”或“好吃”)。一直猜到结束: 就这样,它像玩接龙一样,根据前面已有的所有文字,一个字一个字(Token by Token)地预测下一个最可能出现的字/词,直到它觉得一个完整的、有意义的回答已经生成了(或者达到了长度限制)。

而模型在“接龙”时,并不总是选概率最高的那个词,这样会显得很死板。它根据不同的生成策略,模型会选择最合适的词,下面有几种比较常见的参数,当然这些参数都是需要模型训练员去调整以达到最好的效果

简单模拟一下回答“我喜欢吃苹果”的生成过程:

    输入:小明吃了苹果,因为他饿了。    当前输出:[] → 预测下一个词概率:                      "好": 65%       "是": 12%       "嗯": 8%       ...    ↓ 采样选择"好"    输出:["好"]    ============    当前输出:["好"] → 预测下一个词概率:       "的": 58%   ← "好的"是常见搭配       "吧": 15%       "呀": 7%       ...    ↓ 采样选择"的"    输出:["好", "的"]    =============    时间步 | 已生成文本         | 下一个候选词概率假设取前3           | 选择    -------|-------------------|----------------------------------|-------     t=1  | [开始]            | 好(65%) 是(12%) 嗯(8%)          | → 好      t=2  | 好                | 的(58%) 吧(15%) 呀(7%)          | → 的     t=3  | 好的               | 。(82%) !(10%) ?(5%)          | → 。     t=4  | 好的。             | 你(42%) 我(30%) 请(15%)         | → 你     t=5  | 好的。你           | 还(38%) 有(32%) 想(12%)         | → 还     t=6  | 好的。你还          | 有(76%) 在(8%) 要(5%)           | → 有     ... 继续直到生成结束符...          最终输出【好的。你还有其他关于小明的问题吗?】

或者它也可能生成:“是的,苹果能快速缓解饥饿!” —— 这取决于模型在那一刻的计算和采样策略。

这就是 ChatGPT 回答你的核心过程! 它的本质就是一个在海量文本(万亿级 Token)上训练出来的、参数规模巨大(千亿级别)、架构极其先进(Transformer)的 大语言模型 (Large Language Model, LLM) ,玩着一个世界上最复杂的“词语接龙”游戏。

ChatGPT 更像“真人”的秘密武器:SFT 与 RLHF

如果你问一个只玩过基础“词语接龙”的模型:“我喜欢吃苹果。” 它可能会干巴巴地回:“苹果是一种水果。” 或者 “…因为它甜。” 虽然没错,但总觉得缺了点“人味”——不够热情、不够有帮助。

怎么让语言模型更像人?成为善解人意的聊天伙伴呢?这就要靠两招“秘术”狠狠调教了

调教秘术一:监督微调SFT(Supervised Fine-Tuning)

训练师提供准备标准答案,让模型直接”背”

用“我喜欢吃苹果”的例子,编写优质问答样本

问题标准回答目的
“我喜欢吃苹果。”“很高兴你喜欢苹果!苹果是一种营养丰富的水果,富含维生素C和膳食纤维。”提供了额外信息,是人类期望的
“请推荐一些健康的水果。”“除了苹果,草莓、香蕉、橙子、蓝莓都是非常健康的选择!”这个回答直接、清晰地回应了指令
……

模型会学习这些“问题-标准答案”对。它看到问题后,就尝试生成回答,然后和标准答案对比。如果回答错了,就调整自己的参数,直到能对同样的问题给出类似的“标准答案”。

SFT 本质: 训练师写“标准答案” → 模型努力“抄作业” (模仿)。

局限: 如果问题主观性强(比如“我为什么喜欢吃苹果?”),标准答案可能不止一个(营养?方便?好吃?)。模型只会随机模仿一种,无法判断哪个答案人类更喜欢。它也可能学会一些“安全但无用”的回答,比如:“这是个好问题,因为苹果非常好吃。”

调教秘术二:强化学习与人类反馈RLHF(Reinforcement Learning with Human Feedback)

RLHF被人熟知应该主要是源自OpenAI的《InstructGPT》这篇论文,如果用简单的语言来描述,其实就是用强化学习的算法,根据人类反馈改进语言模型

这次训练师不直接给答案了。他们让模型对同一个问题生成 多个不同回答,然后由人来 比较、排序、打分!(根据自己的喜好、常识、安全性、帮助程度等标准,选出他们最喜欢到最不喜欢的回答,并进行打分)

当用户输入:“我喜欢吃苹果” 得到大模型的返回值后大概如下所示

模型给出回答人类评分原因
苹果糖分高,小心发胖👎 2分扫兴且不友好
“我也喜欢苹果!🍎 它既脆甜又能补充能量。试试加点盐,超赞!”👍 9热情、有共鸣、提供了额外信息和小建议
哦,这样👎 1分态度冷漠

人类的大量评分数据被用来训练一个 奖励模型 (Reward Model) 。这个奖励模型学会了 判断什么样的回答更受人类青睐(有用、无害、热情、符合价值观等)。

阶段有监督微调(SFT)强化学习(RLHF)
核心方法模仿人类标准答案学习人类偏好排序
人类参与方式提供标准答案(1问1答)对多个答案排序(1问多答排序)
模型学什么“正确答案是什么?”“人类更喜欢哪种回答风格?”
解决什么问题基础准确性、专业性有用性、无害性、符合人类价值观

最终,结合 SFT 打下的“知识基础”和 RLHF 注入的“人类偏好”,模型就能在“词语接龙”时,优先选择那些我们觉得更自然、更有帮助、更安全的回答路径了。

ChatGPT = 知识渊博的“词语接龙大师” + 经过海量人类偏好“调教”的聊天艺术家。

强大的语言模型,仍有局限

结语:语言的力量与模型的角色

人类可以对呼气时发出的声音进行各种调控,创造了语言这个无比强大的工具,让我们得以交流思想、传承知识、创造文明。

语言模型的回答,目前其实是统计规律与人类偏好共同作用下的“词语接龙”杰作,而非真正的思考。认识到这一点,我们就能更清醒地利用这个工具:把它当作一个强大的信息助手、创意伙伴或学习辅导员,而不是全知全能的神。

文章写的比较简单,主要还是简单介绍,我一直认为使用工具,只有了解工具的运行原理才能更好的去使用它,至于如何与这位“词语接龙大师”相处,就取决于你的想象力了!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

ChatGPT 大语言模型 Transformer SFT RLHF
相关文章