【硬核知识】 当你提问后,ChatGPT 在“想”什么?【转载】
<h2>从一个苹果🍎开始的奇幻漂流~</h2><p>某个悠闲的午后,你在键盘上敲下“<strong>我喜欢吃苹果</strong>”,几秒钟后,ChatGPT 就给出了一个回复。</p>
<p><strong>这时,你会不会好奇:屏幕后面发生了什么?这个“语言模型”是怎么“读懂”我的话,然后“想出”答案的?难道计算机真的会“思考”吗?</strong></p>
<p><img src="https://images.bigseek.com//forum/202507/09/162022sfd3szdzpv4tv4gj.webp" alt="4252dec1c29df8b5c19269e0dffed1e89d838daa.webp" title="4252dec1c29df8b5c19269e0dffed1e89d838daa.webp" /></p>
<h2>**大语言模型发展的背景:**从图灵测试到语言模型</h2>
<p>早在1950年,计算机科学先驱艾伦·图灵就提出了一个著名的思想实验——<strong>图灵测试</strong>。它的核心很简单:如果一个人通过文字对话,无法区分屏幕那头是真人还是机器(超过30%的误判率),就认为这台机器通过了测试,展现了智能。</p>
<p><img src="https://images.bigseek.com//forum/202507/09/162042qfif8f4x4x4zx88g.webp" alt="4627c21b0657a2b3b17df229468de555f8f7dfba.webp" title="4627c21b0657a2b3b17df229468de555f8f7dfba.webp" /></p>
<p>为什么提这个呢?因为图灵测试为衡量机器能否“像人一样聊天”设定了一个重要标杆。我们不必纠结“智能”的哲学定义,就看它能不能进行<strong>流畅、自然、有信息量的对话</strong>。</p>
<p>自然语言处理与人工智能发展历史有着密切而复杂的关系,如今当你使用 ChatGPT 时,是不是偶尔也会因为它某个精妙的回答,产生“屏幕后面是真人吧?”的错觉呢?这正是聊天机器人/语言模型几十年发展的成果。看看它们是怎么一步步变聪明的</p>
<table>
<thead>
<tr>
<th><strong>时期</strong></th>
<th><strong>里程碑</strong></th>
<th><strong>技术特点</strong></th>
<th><strong>对话能力怎么样?</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>1950-1960s</strong></td>
<td>IBM俄英翻译机(1954)</td>
<td>靠词典+语法规则</td>
<td>很死板,一句话说错就懵</td>
</tr>
<tr>
<td><strong>1960-1970s</strong></td>
<td>ELIZA(1966)SHRDLU(1972)</td>
<td>模式匹配+有限场景推理</td>
<td>像背台词,只能按剧本走</td>
</tr>
<tr>
<td><strong>2010s</strong></td>
<td>Siri(2011)Watson(2011)</td>
<td>任务型问答+搜索整合</td>
<td>能办事,但聊天容易卡壳,多轮对话弱,依赖预设流程</td>
</tr>
<tr>
<td><strong>2013-2017</strong></td>
<td><strong>Transformer(2017)</strong></td>
<td><strong>自注意力机制</strong>突破</td>
<td>能理解上下文关联了!但还不太会“创作”</td>
</tr>
<tr>
<td><strong>2018-2020</strong></td>
<td><strong>BERT(2018)GPT-3(2020)</strong></td>
<td><strong>预训练大模型</strong>崛起,千亿参数</td>
<td>聊天能力大飞跃!知识渊博,但逻辑偶尔抽风</td>
</tr>
<tr>
<td><strong>2022至今</strong></td>
<td><strong>ChatGPT(2022)GPT-4(2023)</strong></td>
<td><strong>人类反馈强化学习 (RLHF)</strong>+ 多模态</td>
<td>聊天真假难辨,轻松通过图灵测试</td>
</tr>
</tbody>
</table>
<p>背景说完了,那这些模型到底是怎么“听懂”我们的话,并“说出”回答的呢?故事得从计算机怎么“认识”文字开始讲起。</p>
<h2><strong>第一步:把文字变成“积木块” (Token)</strong></h2>
<p>计算机可看不懂“苹果”、“喜欢”这些字。它只认识数字!所以第一步,就是把你的句子拆成一小块的“<strong>积木</strong>”,这个过程叫做 <strong>Tokenize</strong>(分词)。可以是一个字,也可以是两个字的词,或三个字的词(像乐高积木),给定一个句子时,我们有多种获取不同Token的方式,可以分词,也可以分字。<br />
<img src="https://images.bigseek.com//forum/202507/09/162114cokplg38teqdi3tq.webp" alt="6284e4b9b4c2bfa894c62c09d8555ab828cec9a4.webp" title="6284e4b9b4c2bfa894c62c09d8555ab828cec9a4.webp" /></p>
<ul>
<li>一个常见的英文单词(如 “apple”) 通常是一个Token。</li>
<li>一个汉字(如 “我”)通常是一个Token。</li>
<li>但复杂的词可能会被拆开:比如 <code>understand</code>可能被拆成 <code>understand</code> 两个Token。</li>
<li>标点符号(如 “.”, “?”)也是Token。</li>
</ul>
<p>好奇你的话会模型被切成什么样?可以试试 OpenAI 的 Tokenizer 可视化工具。</p>
<p>https://platform.openai.com/tokenizer</p>
<p><img src="https://images.bigseek.com//forum/202507/09/162138gubnux69z8kokfbx.webp" alt="07a8a26d0ab5fccc382c51b2c0696eacf34b9dfd.webp" title="07a8a26d0ab5fccc382c51b2c0696eacf34b9dfd.webp" /></p>
<p>以 “我喜欢吃苹果。” 为例子会被切成:<code>["我", "喜欢", "吃", "苹果", "。"]</code>形式(具体切法取决于模型的设计,不同的模型切割的方式略有不同)。</p>
<p><strong>这就像把乐高玩具拆成一个个小积木块,是计算机理解人类语言的第一步。</strong></p>
<h2><strong>第二步:给积木块编号 (词汇表 Vocabulary)</strong></h2>
<p>光分解成“积木块”还不够,计算机需要给每个独特的积木块分配一个唯一的 <strong>ID 号码</strong>。这需要一个巨大的 <strong>词汇表 (Vocabulary)</strong> ,它本质上是个双向 <code>电话簿</code>:</p>
<ul>
<li><strong>查号:</strong> 知道 Token “苹果” → 对应 ID 是 12345。</li>
<li><strong>反查:</strong> 知道 ID 12345 → 对应 Token 是 “苹果”。</li>
</ul>
<p>它是实现文本到数字转换的桥梁。它主要体现为一个<strong>映射表</strong>,将人类可读的字符串(token)与机器可识别的ID关联起来。</p>
<p>比如我随便写一个词汇表模拟一下</p>
<pre><code>vocab = {
'': 0, # 填充符
'': 1, # 未知词
'': 2, # 句首分类符
'': 3, # 句子分隔符
# 英文部分 大模型的多语言也是这么处理的,多种语言都可以建立在词汇表上
'hello': 4, ',': 5, 'world': 6, '!': 7, 'how': 8, 'are': 9, 'you': 10, '?': 11,
# 中文
'我': 12, '喜欢': 13, '吃': 14,
'苹果': 15, '。': 16,
'香蕉': 17,
# ...
'水果': 20, # 相关概念
# ... 还有成千上万的其他词汇
}
</code></pre>
<p>由此你输入的一段话 <code>“我喜欢吃苹果。”</code><br />
最终进到模型里的其实是一连串id : <code></code></p>
<p><strong>GPT-4</strong>中 转换的id如下<br />
<img src="https://images.bigseek.com//forum/202507/09/162211z0q7dc949bao4wp9.webp" alt="632cbfe4d117d441060f1a9e07d19df27e2f43c5.webp" title="632cbfe4d117d441060f1a9e07d19df27e2f43c5.webp" /></p>
<h2><strong>第三步:计算机怎么“懂”文字的意思?词嵌入(Embeddings)</strong></h2>
<p>计算机现在拿到了 <code></code> 这串数字。但它还是不懂“苹果”是水果,也不知道“苹果”和“香蕉”是同一个种类,更不知道什么是“水果”。因为数字本身其实没意义!</p>
<p>这时,<strong>词嵌入 (Embedding)</strong> 登场了!它能把冷冰冰的数字 ,变成充满“含义”的<strong>向量</strong>。</p>
<p>在语言模型训练之初,会创建一个巨大的 <code>Embedding 矩阵</code>,例如:假设词汇表有 5 万个 Token,每个 Token 都对应一个高维向量768(GPT-3 甚至高达 12288 维)那么矩阵形状 <strong><code></code></strong> 。具体根据模型的不同而不同</p>
<p>其中的规则就是,<strong>语义相似性 = 距离相近</strong>,语义上相似的词,在经过Embedding矩阵转换后,它们的向量在向量空间中的距离会更近。<strong>语义相似的词在向量空间中自动聚集成簇</strong>(相似的都聚在一起)</p>
<p>我们人脑根本无法想象这个空间,但可以将其类比为三维空间,大概像下图这样。<br />
<img src="https://images.bigseek.com//forum/202507/09/162228atbmytrbrntrorut.webp" alt="ba6f06b887a08bb70857f5d6739110e477018502.webp" title="ba6f06b887a08bb70857f5d6739110e477018502.webp" /></p>
<p>模型通过“阅读”海量互联网文本,不断调整每个词在这个高维空间里的位置。</p>
<p>我用简单的二维显示下矩阵(实际空间维度超高)</p>
<ul>
<li>“苹果”“香蕉”“草莓”会挤在 <strong>水果区</strong>。</li>
<li>“吃”“美味”“健康”会围绕在它们附近。</li>
<li>“手机”“电脑”则待在遥远的 <strong>科技区</strong>。</li>
<li>“汽车”“足球” 可能在另一个 <strong>无关区</strong>。</li>
</ul>
<pre><code>^
|
|
[植物区]
|
树🌳 • • 叶子
|
|
[科技区] | [水果区]
• 手机 | • 香蕉 🍌
• 电脑💻 | • 草莓 🍓
• 耳机 | • 橙子 🍊
• | • 苹果 🍎 (最终位置)
| /\
| / \
| • 吃 🍽️ • 健康 💪
| \ /
| • 甜 🍬
|
[无关区] • 汽车 🚗 • 足球 ⚽ |
|
|
|
|
|------------------------>
</code></pre>
<p>“苹果”这个词的向量位置,是在训练过程中,通过无数包含“苹果”的句子(如“我吃了苹果”、“苹果是健康水果”、“这有一棵棵苹果树)学习调整后确定的。最终,它稳稳落在了 <strong>水果区</strong> 和 <strong>植物区</strong> 的交界地带。</p>
<table>
<thead>
<tr>
<th><strong>阶段</strong></th>
<th><strong>输入示例</strong></th>
<th><strong>“苹果”向量移动方向</strong></th>
<th><strong>靠近的区域或相关词语</strong></th>
<th><strong>描述</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>初始随机位置</strong></td>
<td>-</td>
<td>随机分布在空间中</td>
<td>可能靠近无关区,如:足球</td>
<td>在初始训练时,"苹果"的向量随机分布,可能与无关的词语接近。</td>
</tr>
<tr>
<td><strong>阶段 1</strong></td>
<td>“我吃了苹果”</td>
<td>向 吃</td>
<td>吃</td>
<td>看到“苹果”与“吃”语境关联,模型调整其位置,逐渐靠近这些相关词语。</td>
</tr>
<tr>
<td><strong>阶段 2:进一步训练</strong></td>
<td>“苹果是健康水果”</td>
<td>向 健康和 香蕉靠拢</td>
<td>健康 香蕉</td>
<td>当训练数据包含“苹果是健康水果”时,"苹果"向健康和其他水果相关词语的方向偏移。</td>
</tr>
<tr>
<td><strong>阶段 3:环境调整</strong></td>
<td>“这有一颗棵苹果树”</td>
<td>向 树 方向偏移</td>
<td>树</td>
<td>在涉及“苹果树”的上下文时,“苹果”的位置会向植物类的词语(如树)靠拢。</td>
</tr>
<tr>
<td>阶段x</td>
<td>…</td>
<td>…</td>
<td>…</td>
<td>…</td>
</tr>
<tr>
<td><strong>最终位置</strong></td>
<td></td>
<td>停在 水果区 与 植物区 交界处</td>
<td>水果区、植物区</td>
<td>经过多轮训练后,“苹果”的最终位置应位于水果和植物的交界处</td>
</tr>
</tbody>
</table>
<p>还是以 <code>我喜欢吃苹果</code> 为例子,算出向量,大模型就知道了苹果这个词背后的关系</p>
<pre><code>假设算出来的向量如下
水果区:
🍎 苹果 =
🍌 香蕉 =
🍊 橙子 =
科技区:
🚗 汽车 = [-0.5, 0.9, 0.6]
⚽️ 足球 = [-0.4, 0.8, 0.7]
</code></pre>
<p><strong>计算向量距离</strong>:</p>
<ul>
<li>🍎→🍌距离:<strong><code>√[(0.8-0.7)² + (0.2-0.3)² + (-0.3+0.2)²] ≈ 0.1</code></strong>(近!)</li>
<li>🍎→🚕距离:<strong><code>√[(0.8+0.5)² + (0.2-0.9)² + (-0.3-0.6)²] ≈ 2.0</code></strong>(远!)</li>
</ul>
<p><strong>得出结论</strong>:</p>
<p><strong><code>苹果</code></strong> 和 <strong><code>香蕉</code></strong> 靠得近 → <strong>它们是同类(水果)</strong></p>
<p><strong><code>苹果</code></strong> 和 <strong><code>汽车</code></strong>离得远 → <strong>它们含义不同(没有直接关系)</strong></p>
<p><strong>计算机会“算出”关系:</strong></p>
<ul>
<li>算出“苹果”🍎 和 “香蕉”🍌的向量距离很近 → 哦,它们是同类(水果)!</li>
<li>算出“苹果”🍎 和 “汽车”🚕的向量距离很远 → 嗯,它们没直接关系!</li>
</ul>
<p>就这样,通过 Embedding,计算机虽然不懂“苹果”的概念,却能精确“<strong>计算</strong>”出它和其他词语的关系网,从而“读懂”了你的话!这就像我们学习一门语言,总是先学短语,固定搭配等,再理解长难句一样。</p>
<h2><strong>第四步:模型的最强大脑——Transformer(理解上下文的关键)</strong></h2>
<p>现在,模型拿到了代表你输入的那串数字(ID),并通过 Embedding 把它们变成了有“含义”的向量。但它怎么理解整句话的意思,尤其是词与词之间的关系呢?</p>
<p>还是举个苹果🍎例子 <code>“小明吃苹果,因为他饿了。”</code></p>
<p>我们通常是怎么思考的?</p>
<ul>
<li>“他” 指代谁?→ 你会自动关联到“<strong>小明</strong>”(而不是“<strong>苹果</strong>”)</li>
<li>“饿” 解释为什么要“吃”的原因 → 关联“吃”和“饿”</li>
</ul>
<p>那语言模型是怎么知道“<strong>他</strong>”指代的是”<strong>小明</strong>“呢?</p>
<p>早期的模型处理长句子时,语言模型很容易“忘记”开头说了啥,或者抓不住远处的词之间的联系,直到7位来自 Google 的大佬、1位多伦多大学的大佬于2017年共同发布署名的一篇论文:“Attention Is All You Need”,提出了 <strong>Transformer 架构</strong>,其核心 <strong>自注意力机制 (Self-Attention)</strong> 完美解决了这个问题!简单来说就是在语言模型建模过程中,把注意力放在那些重要的Token上。</p>
<h3><strong>自注意力机制</strong>(Self-Attention)<strong>给每个词“发牌”</strong></h3>
<p>Transformer 在处理一个句子时,会为句子里的 <strong>每一个词</strong> 生成三张特殊的“牌”:<strong>并且通过权重矩阵(这里不展开了)分别赋值,大概意思如下</strong></p>
<table>
<thead>
<tr>
<th>词</th>
<th>Q (问题牌 - Query)</th>
<th>K (身份牌 - Key)</th>
<th>V (信息牌 - Value)</th>
</tr>
</thead>
<tbody>
<tr>
<td>小明</td>
<td>“我是谁?在干嘛?” (主语)</td>
<td>“我是人名/动作发起者”</td>
<td>“我叫小明,是人”</td>
</tr>
<tr>
<td>吃</td>
<td>“谁吃?吃什么?” (动作)</td>
<td>“我是一个动作/行为”</td>
<td>“吃这个动作需要对象”</td>
</tr>
<tr>
<td>苹果</td>
<td>“被谁吃?是什么?” (对象)</td>
<td>“我是食物/被作用对象”</td>
<td>“苹果是一种可吃的东西”</td>
</tr>
<tr>
<td>因为</td>
<td>“连接什么?原因还是结果?”</td>
<td>“我表示原因”</td>
<td>“我说明前面动作的原因”</td>
</tr>
<tr>
<td>他</td>
<td>“我指代谁?!” (关键问题)</td>
<td>“我是代词,需要找指代对象”</td>
<td>“我可能指人或物”</td>
</tr>
<tr>
<td>饿</td>
<td>“描述谁?是什么状态?”</td>
<td>“我是一种身体状态/原因”</td>
<td>“饿会导致人想吃东西”</td>
</tr>
</tbody>
</table>
<p><strong>每个词用自己的 Q 牌去“询问”句子中所有词的 K 牌!</strong></p>
<p>以 <strong>“他”</strong> 为例,向句子中的所有其他值发问:</p>
<ul>
<li><strong>问小明</strong>: <strong><code>“他”的Q · “小明”的K</code></strong> = (“指代谁?” vs “人名”)→ <strong>高分!</strong> (0.9)</li>
<li><strong>问苹果</strong>: <strong><code>“他”的Q · “苹果”的K</code></strong> = (“指代谁?” vs “食物”)→ <strong>低分!</strong> (0.1)</li>
<li><strong>问饿</strong>: <strong><code>“他”的Q · “饿”的K</code></strong> = (“指代谁?” vs “状态”)→ <strong>无关!</strong> (0.0)</li>
</ul>
<h3>Softmax 分配注意力权重</h3>
<p>模型会把所有匹配度得分(原始分数),通过一个叫 <strong>Softmax</strong> 的函数转换成 <strong>概率分布</strong>(加起来等于 1)。这就像给每个词对“他”的重要程度打分</p>
<table>
<thead>
<tr>
<th><strong>目标词</strong></th>
<th><strong>关联词</strong></th>
<th><strong>计算过程</strong></th>
<th><strong>Softmax后权重</strong></th>
<th><strong>含义</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>他</td>
<td>小明</td>
<td><strong><code>Q_他· K_小明</code></strong>= 高相似度</td>
<td>0.85</td>
<td>“他”极可能指代“小明“</td>
</tr>
<tr>
<td>他</td>
<td>苹果</td>
<td><strong><code>Q_他 · K_苹果</code></strong>= 低相似度</td>
<td>0.10</td>
<td>“苹果”不是指代对象</td>
</tr>
<tr>
<td>他</td>
<td>饿</td>
<td><strong><code>Q_他 · K_饿</code></strong>= 中等相似度</td>
<td>0.05</td>
<td>“饿”是状态,非指代对象</td>
</tr>
</tbody>
</table>
<p><strong>“他”在模型的新理解 = 0.85 * V_小明 + 0.10 * V_苹果 + 0.05 * V_饿</strong></p>
<p><strong>由此模型明确知道 “他≈小明“</strong></p>
<h3><strong>多头注意力(Multi-Head)多个视角,更全面的理解</strong></h3>
<p>一个 Transformer 通常不会只有一个“分析员”,而是有 <strong>多个</strong>(比如 12 个)<strong>注意力头 (Multi-Head)</strong> 同时工作!每个头都独立地玩一遍上面的“发牌提问”游戏,但它们关注的角度可能不同:</p>
<table>
<thead>
<tr>
<th><strong>头编号</strong></th>
<th><strong>关注点</strong></th>
<th><strong>例子</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>头1</td>
<td>语法结构</td>
<td>“他”关联“小明”(主谓一致)</td>
</tr>
<tr>
<td>头2</td>
<td>因果关系</td>
<td>“吃”关联“饿”(因为饿才吃)</td>
</tr>
<tr>
<td>头3</td>
<td>指代消解</td>
<td>“他”明确指“小明”而非“苹果</td>
</tr>
<tr>
<td>···</td>
<td>···</td>
<td>···</td>
</tr>
</tbody>
</table>
<ul>
<li><strong>头1 (语法):</strong> 确认“他”是主语,指向“小明”和动作“吃”。</li>
<li><strong>头2 (因果):</strong> 建立“饿”→“吃”的因果链,且“饿”属于“小明”。</li>
<li><strong>头3 (指代):</strong> “苹果” 关联 “吃” → 明确 <strong>动作对象</strong></li>
</ul>
<p><strong>每个头都为“他”输出一个新的理解向量。</strong> 然后,这 12 个头向量会被拼接起来,再经过一些处理,最终融合成“他”这个词在这个句子上下文里的最终理解。</p>
<p><strong>多头注意力就像一个专家团队协作:</strong> 每个“头”是一个独立的“语言专家”,从不同角度(语法、因果、指代…)分析句子中每个词的关系。最后,所有侦探的发现汇总起来,模型就彻底理解了整句话的逻辑: <strong>“小明因为饿了,所以吃了苹果”</strong> 。这样,它就能避免说出“苹果饿了”这种奇怪的理解,也能流畅地回答后续问题,比如“那小明吃饱了吗?”</p>
<p><strong>Transformer 的自注意力和多头机制,正是 ChatGPT 能如此“聪明”地理解上下文的核心秘密武器!</strong></p>
<h2><strong>第五步:生成回答——“词语接龙”大师</strong></h2>
<p>现在,模型已经“理解”了你的输入(“小明吃了苹果,因为他饿了”),并准备好“回复”了。它是怎么做的呢?</p>
<p><strong>答案就是玩一个超级复杂的“词语接龙”游戏!回答你的过程其实就是“边猜边写”(推理生成)</strong></p>
<ol>
<li><strong>基于输入:</strong> 它先仔细“读”你输入的所有内容(已转换成向量并理解上下文)。</li>
<li><strong>猜第一个词:</strong> 基于你输入的内容,它运用学到的海量知识,<strong>计算</strong>出接下来<strong>最可能</strong>出现的第一个词是什么(比如,你输入“我喜欢吃苹果”,它可能算出“苹果”后面接“很”或“是”的概率很高)。</li>
<li><strong>猜下一个词:</strong> 把你输入的内容 <strong>加上</strong> 它刚猜出来的那个词,一起作为新的“开头”,再去猜下一个最可能的词(比如,输入+“很” → 猜“甜”或“好吃”)。</li>
<li><strong>一直猜到结束:</strong> 就这样,它像玩接龙一样,根据前面已有的所有文字,<strong>一个字一个字(Token by Token)地预测下一个最可能出现的字/词</strong>,直到它觉得一个完整的、有意义的回答已经生成了(或者达到了长度限制)。</li>
</ol>
<p>而模型在“接龙”时,并不总是选概率<strong>最高</strong>的那个词,这样会显得很死板。它根据不同的生成策略,模型会选择最合适的词,下面有几种比较常见的参数,当然这些参数都是需要模型训练员去调整以达到最好的效果</p>
<ul>
<li><strong>Top-k / Top-p (Nucleus Sampling):</strong> 只从概率最高的几个词(Top-k)或者累积概率达到一定比例的词(Top-p)里面随机挑一个。这样回答不会千篇一律。</li>
<li><strong>采样温度 (Temperature):</strong> 控制随机性。温度高,更随机;温度低,更确定。
<ul>
<li><strong>温度高 (e.g., 0.8-1.0):</strong> 更“天马行空”,创意足但也可能跑偏。</li>
<li><strong>温度低 (e.g., 0.2-0.5):</strong> 更“严谨保守”,准确但可能平淡。</li>
</ul>
</li>
<li><strong>贪婪解码 (Greedy Decoding):</strong> 每次都选概率最高的词(确定性最高,但可能单调)。</li>
</ul>
<p><img src="https://images.bigseek.com//forum/202507/09/162623kx7j61e3q73pxpje.webp" alt="cd364b62444f48959f407037813367e8c832a6ad.webp" title="cd364b62444f48959f407037813367e8c832a6ad.webp" /></p>
<p><strong>简单模拟一下回答“我喜欢吃苹果”的生成过程:</strong></p>
<pre><code>输入:小明吃了苹果,因为他饿了。
当前输出:[] → 预测下一个词概率:
"好": 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%) | → 有
... 继续直到生成结束符...
最终输出【好的。你还有其他关于小明的问题吗?】
</code></pre>
<p><strong>或者它也可能生成:“是的,苹果能快速缓解饥饿!”</strong> —— 这取决于模型在那一刻的计算和采样策略。</p>
<p><strong>这就是 ChatGPT 回答你的核心过程!</strong> 它的本质就是一个在海量文本(万亿级 Token)上训练出来的、参数规模巨大(千亿级别)、架构极其先进(Transformer)的 <strong>大语言模型 (Large Language Model, LLM)</strong> ,玩着一个世界上最复杂的“词语接龙”游戏。</p>
<p><img src="https://images.bigseek.com//forum/202507/09/162643ippyyk9dz0vml7dy.webp" alt="2e0e2d2fdae7bf2d62a5fa4cfbe560c467abbfb4.webp" title="2e0e2d2fdae7bf2d62a5fa4cfbe560c467abbfb4.webp" /></p>
<h2>ChatGPT 更像“真人”的秘密武器:SFT 与 RLHF</h2>
<p>如果你问一个只玩过基础“词语接龙”的模型:“我喜欢吃苹果。” 它可能会干巴巴地回:“苹果是一种水果。” 或者 “…因为它甜。” 虽然没错,但总觉得缺了点“人味”——不够热情、不够有帮助。</p>
<p>怎么让语言模型更像人?成为善解人意的聊天伙伴呢?这就要靠两招“秘术”狠狠调教了<br />
<img src="https://images.bigseek.com//forum/202507/09/162658sg69z3aeam382igz.webp" alt="5d6186d46d31b326288d52b13afd4ab39452fe3d.webp" title="5d6186d46d31b326288d52b13afd4ab39452fe3d.webp" /></p>
<h3>调教秘术一:监督微调 | SFT(Supervised Fine-Tuning)</h3>
<p><strong>训练师提供准备标准答案,让模型直接”背”</strong></p>
<p>用“我喜欢吃苹果”的例子,编写优质问答样本</p>
<table>
<thead>
<tr>
<th><strong>问题</strong></th>
<th><strong>标准回答</strong></th>
<th>目的</th>
</tr>
</thead>
<tbody>
<tr>
<td>“我喜欢吃苹果。”</td>
<td>“很高兴你喜欢苹果!苹果是一种营养丰富的水果,富含维生素C和膳食纤维。”</td>
<td>提供了额外信息,是人类期望的</td>
</tr>
<tr>
<td>“请推荐一些健康的水果。”</td>
<td>“除了苹果,草莓、香蕉、橙子、蓝莓都是非常健康的选择!”</td>
<td>这个回答直接、清晰地回应了指令</td>
</tr>
<tr>
<td>……</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>模型会学习这些“问题-标准答案”对。它看到问题后,就尝试生成回答,然后和标准答案对比。如果回答错了,就调整自己的参数,直到能对同样的问题给出类似的“标准答案”。</p>
<p>**SFT 本质:训练师写“标准答案” → 模型努力“抄作业” (模仿)。<br />
<img src="https://images.bigseek.com//forum/202507/09/162709pxker0abjko6lxbf.webp" alt="fd7bc1222ad74da5f5654c2361f4431b0d67e50c.webp" title="fd7bc1222ad74da5f5654c2361f4431b0d67e50c.webp" /></p>
<p><strong>局限:</strong> 如果问题主观性强(比如“我为什么喜欢吃苹果?”),标准答案可能不止一个(营养?方便?好吃?)。模型只会随机模仿一种,无法判断哪个答案人类更喜欢。它也可能学会一些“安全但无用”的回答,比如:“这是个好问题,因为苹果非常好吃。”</p>
<h3>调教秘术二:从人类反馈中强化学习 | RLHF(Reinforcement Learning from Human Feedback)</h3>
<p><strong>RLHF</strong>被人熟知应该主要是源自OpenAI的《InstructGPT》这篇论文,如果用简单的语言来描述,其实就是用强化学习的算法,根据人类反馈改进语言模型。</p>
<p>《InstructGPT》论文:https://arthurchiao.art/blog/instructgpt-paper-zh/</p>
<p>这次训练师不直接给答案了。他们让模型对同一个问题生成 <strong>多个不同回答</strong>,然后由人来 <strong>比较、排序、打分</strong>!(根据自己的喜好、常识、安全性、帮助程度等标准,选出他们最喜欢到最不喜欢的回答,并进行打分)</p>
<p>当用户输入:<code>“我喜欢吃苹果”</code> 得到大模型的返回值后大概如下所示</p>
<table>
<thead>
<tr>
<th><strong>模型给出回答</strong></th>
<th><strong>人类评分</strong></th>
<th><strong>原因</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><em>苹果糖分高,小心发胖</em></td>
<td>👎2分</td>
<td>扫兴且不友好</td>
</tr>
<tr>
<td>“我也喜欢苹果!🍎它既脆甜又能补充能量。试试加点盐,超赞!”</td>
<td>👍9</td>
<td>热情、有共鸣、提供了额外信息和小建议</td>
</tr>
<tr>
<td><em>哦,这样</em></td>
<td>👎分</td>
<td>态度冷漠</td>
</tr>
</tbody>
</table>
<p>人类的大量评分数据被用来训练一个 <strong>奖励模型 (Reward Model)</strong> 。这个奖励模型学会了 <strong>判断什么样的回答更受人类青睐</strong>(有用、无害、热情、符合价值观等)。</p>
<ul>
<li><strong>RLHF 过程:</strong> SFT 模型生成回答 → 奖励模型打分 (高/低奖励) → 模型根据奖励调整参数 (高奖励行为强化,低奖励行为避免)。</li>
<li><strong>RLHF 本质:人类给回答“投票” → 模型学习“人类更喜欢哪种风格”。</strong></li>
</ul>
<table>
<thead>
<tr>
<th><strong>阶段</strong></th>
<th><strong>有监督微调(SFT)</strong></th>
<th><strong>强化学习(RLHF)</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>核心方法</strong></td>
<td>模仿人类标准答案</td>
<td>学习人类偏好排序</td>
</tr>
<tr>
<td><strong>人类参与方式</strong></td>
<td>提供标准答案(1问1答)</td>
<td>对多个答案排序(1问多答排序)</td>
</tr>
<tr>
<td><strong>模型学什么</strong></td>
<td>“正确答案是什么?”</td>
<td>“人类更喜欢哪种回答风格?”</td>
</tr>
<tr>
<td><strong>解决什么问题</strong></td>
<td>基础准确性、专业性</td>
<td>有用性、无害性、符合人类价值观</td>
</tr>
</tbody>
</table>
<p><img src="https://images.bigseek.com//forum/202507/09/162907sk232eaosseb3qnl.webp" alt="b03872db101e8078246e62fbb102f49f6624a430.webp" title="b03872db101e8078246e62fbb102f49f6624a430.webp" /></p>
<p><strong>最终,结合 SFT 打下的“知识基础”和 RLHF 注入的“人类偏好”,模型就能在“词语接龙”时,优先选择那些我们觉得更自然、更有帮助、更安全的回答路径了。</strong></p>
<p>ChatGPT = 知识渊博的“词语接龙大师” + 经过海量人类偏好“调教”的聊天艺术家。</p>
<p><img src="https://images.bigseek.com//forum/202507/09/162918n7h7o7gd7vvg0p78.webp" alt="223b6119d43952a8e1b94b0f54aaed3ccf24fd31.webp" title="223b6119d43952a8e1b94b0f54aaed3ccf24fd31.webp" /></p>
<h2><strong>强大的语言模型,仍有局限</strong></h2>
<ul>
<li>它<strong>没有真正的理解</strong>,只是通过统计规律“模仿”人类语言。通过海量文本统计“哪些词常一起出现”,而非像人类一样理解语义、拥有意识或常识,虽然<strong>不懂题目含义却总能蒙对答案</strong></li>
<li>它<strong>不会查资料</strong>,而<strong>知识有“保质期”,模型训练完成后,知识库即固定</strong> 如(GPT-4知识截止2023年10月)<br />
<img src="https://images.bigseek.com//forum/202507/09/162937a8f218m5q54f04rr.webp" alt="d50143b872a30d72ba08aa67b5780cc75c9638b9.webp" title="d50143b872a30d72ba08aa67b5780cc75c9638b9.webp" /></li>
<li><strong>可能“一本正经地胡说八道”(Ai幻觉 - Hallucination):</strong> 因为它本质是预测下一个词,有时为了“接”下去,会生成<strong>看似合理但事实上错误或完全虚构的内容</strong>。</li>
<li><strong>依赖数据,可能放大偏见:</strong> 模型的知识和“偏好”都来源于训练数据。如果数据本身存在偏见、错误或不平衡,模型就可能学会并反映出来。</li>
</ul>
<h2><strong>结语:语言的力量与模型的角色</strong></h2>
<p>人类可以对呼气时发出的声音进行各种调控,创造了<strong>语言</strong>这个无比强大的工具,让我们得以交流思想、传承知识、创造文明。</p>
<p>语言模型的回答,目前其实是统计规律与人类偏好共同作用下的“<strong>词语接龙</strong>”杰作,而非真正的思考。认识到这一点,我们就能更清醒地利用这个工具:<strong>把它当作一个强大的信息助手、创意伙伴或学习辅导员,而不是全知全能的神。</strong></p>
<p>文章写的比较简单,主要还是简单介绍,我一直认为使用工具,只有了解工具的运行原理才能更好的去使用它,至于如何与这位“词语接龙大师”相处,<strong>就取决于你的想象力了!</strong></p>
好硬的长文啊,太硬了 非常适合入门的文章
但这篇文章会出现:
需要看的人太长看不下去
不需要看的人反而看到津津有味
的症状 tight!tight!tight!AI科普界的冰!上头 好文章,通俗易懂,非常适合给外行学习理解用。 这文章的作者得有多硬核啊,能拆解这么详细 这是真的牛 能发一期小论文了 太硬核了,有点看懵了 语言模型原理好复杂
页:
[1]