ChatGPT原理白话解析:从预训练到微调,带你了解其工作机制

ChatGPT 通过预训练、微调和优化三个阶段进行学习,核心是预测下一个词,并利用人类反馈进行强化学习,最终生成符合人类期望的回答。

原文标题:ChatGPT原理大白话解析,这次终于搞懂了!

原文作者:图灵编辑部

冷月清谈:

ChatGPT 的核心是 GPT,一个大型语言模型。它基于 Transformer 架构,利用自注意力机制理解上下文,并通过位置编码理解词语顺序。

模型的训练分为三个阶段:

1. 预训练:模型通过阅读大量文本数据,学习语言的结构和语义。
2. 微调:利用人类反馈的强化学习 (RLHF) 方法,让模型的回答更符合人类期望。
3. 优化:模型不断在预训练、微调和优化三个阶段循环,不断迭代提升性能。

ChatGPT 的核心任务是预测下一个词。它通过将词语转换成数字 ID,利用自注意力机制和位置编码理解句子,并使用 softmax 函数将词向量转换成概率分布,选择概率最高的词作为输出。

RLHF 方法通过人工评估模型的回答,并利用这些评估结果训练奖励模型,引导模型生成更优质的答案。PPO 算法通过限制策略更新的步幅或加入 KL 散度项,保证了模型训练的稳定性。温度参数控制输出的随机性,平衡回答的多样性和准确性。

怜星夜思:

1、文章提到ChatGPT的核心是预测下一个词,那么如果我想让它创作一首诗歌,它是怎么做到的呢?诗歌创作感觉和简单的对话不太一样。
2、文章中提到了温度参数,这个参数感觉挺有意思的,除了控制随机性,它还有其他作用吗?在实际应用中应该如何调整这个参数呢?
3、RLHF 中的人类反馈很重要,但会不会因为人类的偏见导致模型也产生偏见呢?如何避免这种情况?

原文内容

我们熟知,ChatGPT 能聊天画图,能编程啃论文。那么,这个聊天机器人到底是怎么学会与人类交流的呢?

经过这段时间的琢磨+翻阅各种资料,也终于明白了个大概,今天尽量用白话给大家说得明白些。

ChatGPT 是怎么学习的?
先说说 ChatGPT 的核心部分:GPT(全称是Generative Pre-trained Transformer,里面的 P 和 T 我们一会儿会讲到),这是一个由 OpenAI 开发的大语言模型(LLM)。
接下来,理解 ChatGPT 的原理得先了解它的核心架构。ChatGPT 的核心架构是 Transformer(也就是 ChatGPT 中的 T),一种神经网络架构。有关 Transformer 可以看这篇:。
好比人类大脑的工作方式:神经网络由大量的“神经元”组成,这些神经元相互连接形成一个庞大的网络,经过学习和记忆大量的文本信息来理解生成复杂的人类语言。在这个网络结构里,参数(Parameters)就像是模型的脑细胞,帮助模型记住和理解语言模式。参数越多,模型的表达能力就越强,就像一个人学的知识越多,思维就越丰富一样。每个参数在模型中都有特定的作用。比如某些参数可能专门用于识别句子结构,另一些参数则是用于理解上下文关系,让模型能够捕捉细微的语言模式和复杂的语义关系
而 GPT-3.5 模型有近百亿个这样的参数,就像一个超级大脑。
( 这里补充讲讲 ChatGPT 用到的神经网络和之前有啥不同,对细节没兴趣的可略过此段:首先,自注意力(Self-Attention)机制是 Transformer 模型中的核心。Transformer 架构是 17 年谷歌团队发表的 Attention is All You Need 这篇论文引入的,这篇炸裂之作其实等于彻底改变了之前 NLP 模型的设计:现在在每一层中,模型使用自注意力机制(Self-Attention)来捕捉句子中单词之间的关系,理解上下文。
它的原理就是把输入序列的每个元素转换为三种向量:查询(Query)、键(Key)、值(Value),然后每个元素的查询向量会与序列中其他所有元素的键向量进行点积运算,产生一个注意力分数(Attention Score)。
这些分数决定了在生成输出时,每个元素应该给予其他元素多少“注意力”。这种计算方式允许模型同时处理输入序列中的所有位置,从而捕捉距离远的单词或概念之间的关系,无论它们在文本中的位置如何。这是与传统神经网络方法(如 RNN 或 LSTM)最大的不同之处,对长文本的处理尤其受用,让模型可以高效并行处理数据。
而以前的循环神经网络 (RNN) 是从左到右这么阅读的,也就是说,当相关的单词或概念在原文中彼此相邻时,这种方法还凑合,但当它们位于句子的两端时就很费劲了。就因为它必须按顺序阅读,导致阅读处理效率不高。)
聊完结构,接着来讲讲模型的预训练阶段,也就是ChatGPT 中的 P(pretraining)。
大模型的训练主要分为以下 3 个关键阶段:预训练微调优化,这三个阶段就好比大厨养成的几个关键步骤:先是大量阅读食谱和不同基础料理,然后针对某种菜系精修,最后不断通过食客的反馈精进厨艺。
在 GPT 出现之前,大多数 NLP 模型都是使用「监督学习」进行训练的,也就是依赖人工标注文本数据,比如:给句子标注语法结构、命名实体、动物照片等等,这些类型的训练数据虽然有效,但制作成本极高,需要大量的人力和时间来标注数据。
而 GPT 则通过无监督学习掌握语言的基本结构和语义,即通过输入大量互联网有记载的文本,如各种网站、书籍资料、文章论坛等来理解字词语句之间的关系模式,就像一个小孩通过不断地听和读来学习说话和写作。(GPT4 / 4o 的训练方式也类似,不过引入了多模态处理能力,能够学习和处理图像和音频等多种形式的数据)。
我们再来看看模型是怎么看懂句子的。
首先,模型对数字的理解力和处理效率更高。因此,模型会把一句话按照词或字符的边界进行切分(这就是分词的概念)比如,当你输入一个句子:我在一个月黑风高的夜晚,模型会首先将这个句子分成一个个独立的字符,这句话可以切分成‘一个’,‘月黑风高的’,‘夜晚’。然后每个字符都会被映射成一个唯一的数字 ID,供模型记忆学习。然后,自注意力技术让模型能够自动注意到输入句子中最重要的部分。比如,在句子“我在一个月黑风高的夜晚”中,“月黑风高”和“夜晚”对于理解整个句子的语义很关键,自注意力机制会让模型自动特别关注这些词。
另外,ChatGPT 还加入了位置编码,这是一种告诉模型每个词在句子中位置的方式。这样,模型就不仅知道了词的意义,还知道了它们在句子中的相对位置。
(在官网上可以尝试 tokenize 一句话,很直观地感受分词与字词的长度以及表现形式的不同)
好了,重点来了!ChatGPT 到底是如何与我们进行“对话”的? 
总的来说,其核心原理就是:预测下一个词!ChatGPT 的核心任务非常直接——预测接下来会出现的词。
那么,ChatGPT 是如何决定在一句话中下一个最合适的词是什么的?
当 ChatGPT 面对问题时,它的第一步是理解问题并决定如何回答。为了选择下一个词,它会从之前的训练中调用信息,预测哪些词最有可能构成一个合适、有信息量的回答。
在 ChatGPT 中,每一步处理之后,模型会得到一个向量,这个向量包含了所有可能的下一个词的信息,这时候,softmax 函数就像是一个“智能转换器”,它的任务是将这些个词向量转换成一个概率分布。这里就用到了概率分布的概念。(非战斗人士可再次选择性撤离)
概率分布是一个统计术语,用来描述某件事发生的可能性。简单来说,概率分布就是 ChatGPT 决定“接下来说什么”的一种计算方式。softmax 函数会将任何一组数值转换成概率分布,使得每个数值都被转换成一个介于 0 到 1 之间的概率,高分数的词将被转换为更高的概率,而低分数的词转换为更低的概率。
OK,怎么理解这个“转换”?这个转化是怎么发生的?
假设我们处理后得到的向量是一个数值列表,其中每个数值对应输入文本后可能跟随的一个词。例如,对于“今天天气真XX”,我们可能得到一个包含数千个分量的向量,每个分量对应词汇表中一个词。然后 Softmax 函数会查看这个向量的每个分量,然后用一个数学公式转换这些数值为概率。
这个公式大概长这样:
这个公式的意思就是,每个分量先被指数函数处理(作用是放大分量间的差异),然后通过所有处理过的分量的总和来归一化,确保所有的概率加起来是 1。得到了这个概率分布后,模型就可以根据每个词的概率来选择下一个词,选择概率最高的词作为输出。
通过 softmax 函数处理后,每个词都有了一个明确的概率,表明它成为句子中下一个词的可能性。ChatGPT 然后选择概率最高的词,将其添加到回答中。这个过程不断重复,直到整个回答构建完成。
这个函数把人类对回答的“重要性”“合适性”的考量转换为具体的概率。
这种方法使得 ChatGPT 在提供回答时更加贴近人类的思维方式,同时也保证了生成回答的多样性和创造性。
但是,问题来了。
预训练完成后,如果你问 ChatGPT 一个具体的问题,比如“我怎么学习数据科学?”,它可能还是会给出不着调的答案,比如“你可以先学习数据再学习科学。”
那么,确保 ChatGPT 不给出太过于匪夷所思的答案就非常重要了!也就是需要确保 ChatGPT 不只是随机地猜测下一个单词,而是能生成更符合人类期望的回答。
这时候就需要进行微调(Fine-tuning)。
所以,为了让 ChatGPT 的回答更接近人类的期望,这里会使用一种叫做 RLHF(Reinforcement Learning from Human Feedback,可以翻译成基于人类反馈的强化学习)的方法。简单来说,就是让一些“人类模型评委” 来问 ChatGPT 问题,然后根据这些回答的好坏进行评分,再利用这些评分来训练一个奖励模型。这个奖励模型会告诉 ChatGPT 哪些答案是好的,哪些是不好的,从而不断引导模型在未来给出更好的回答。
这个 RLHF 过程大致是这样的:首先,我们让 ChatGPT 根据它已有的训练生成一些回答。比如我们给它一个问题“如何学习 Python 编程?”
它可能生成多种不同的回答。
接下来,想象这些回答被展示给一群人类评估员,这些评估员会根据回答的相关性、准确性、可读性等方面给予评分。例如,如果 ChatGPT 给出的回答是“去报名一个编程课”,这可能会得到较高的评分;而如果它回答“去买台新电脑”,就会得到较低的评分。有了这些评分后,我们就可以构建一个奖励模型。
奖励模型的任务就是根据刚才这些人类评价的结果来学习判断哪些回答是好的,哪些是不好的。也就是把问题和回答扔进去,然后模型会模拟这些评委的偏好输出一个奖励分数,分数越高说明回答越符合人类的期望。最后,再使用这个奖励模型来训练 ChatGPT。在这个阶段每当 ChatGPT 生成一个回答,奖励模型都会评估这个回答并给出一个分数。然后,ChatGPT 会根据这个分数来调整自己,周而复始。通过 RLHF,ChatGPT 就能慢慢从会“说”,到能够“沟通”。( 这里简单展开解释一下 RLHF 常用算法PPO,非细节怪可再次选择性撤离本段......)
PPO 是一种在强化学习领域中十分流行的算法,特别适用于需要处理大量参数的复杂环境,如大规模语言模型和游戏 AI 等。它能够帮助训练算法在探索(尝试新的行为)和利用(利用已知的行为)之间找到平衡,常被用来解决策略梯度方法中策略更新步骤过大导致训练不稳定的问题。PPO 是通过限制策略更新前后的差异来实现这一点,大概分为两种方法:
1. 截断的重要性采样(Clipped Surrogate Objective):PPO 最常见的形式是使用一个截断的目标函数,这个函数会限制策略更新的步幅。简单来说,PPO 算法会计算出一个“重要性权重”来反映新策略与旧策略的相对概率。然后,这个重要性权重会被“截断”,使得其值保持在一定的范围内(比如,0.8 到 1.2 之间)。这种截断操作就保证了新策略不至于与旧策略差异太大,保证了大模型回答的稳定性。
2. 自适应 KL 惩罚系数(Adaptive KL Penalty Coefficient):另一种方法是通过在目标函数中加入一个KL散度项来直接控制策略更新。KL 散度是一种度量两个概率分布差异的方法,通过调整 KL 散度的惩罚系数,可以精细控制策略更新的幅度,从而保持新旧策略之间的接近性。这两种方法都是为了确保新策略不会偏离旧策略太远,从而维持学习过程的稳定性。
另外,温度参数(Temperature Scaling)在生成模型中可以被用来控制输出的随机性:温度较高时,模型生成的回答会更加多样化但没那么准确;温度较低时,生成的回答会比较保守,也就是倾向于重复训练数据中常见的回答。调整温度可以帮助找到生成回答的“创造性”与“准确性”之间的平衡点。)
就好比在网易云翻日推时,系统会确保推给你的歌尽量符合你的品味,也会偶尔在日推混入其他流派的好歌,保证一定的“推荐创新性。
以上,“预训练”,“微调”,“优化”三个阶段就是模型的工作重要过程,当模型不断在这三个阶段往复,ChatGPT 也就能不断迭代,变快变好变强。
你可能已经发现,大模型生成输出的整个过程实际上就是在所有可能的输出上形成一个概率分布,所有可能的输出取决于当前的语料和认知。
回答的多样性也反映了现实世界的不确定性,这也是大模型幻觉不完全可控的原因。(果然,科学的尽头是玄学!)那么进一步想,如果训练数据中某些信息被有意过多表示,或者选择性缺失,模型就会固执地坚持错误的判断。—— 它并不是有意为之,而是因为它的“视界”被训练数据(认知)所左右了。

END

【本文转载自公众号:DataCafe】

Reference

https://platform.openai.com/tokenizer

https://proceedings.neurips.cc/paper_files/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Reviews.html

https://www.nn-group.com/news/how-nn-uses-ai-to-check-fraud-risks-and-injury-claims/

https://chatgpt.com/g/g-BzrNI7EiD-nn-software




推荐阅读



《大模型应用开发极简入门:基于GPT-4和ChatGPT》 

[比] 奥利维耶·卡埃朗,[法] 玛丽–艾丽斯·布莱特 | 著

何文斯 | 译

大模型应用开发极简指南,实战必读,了解 GPT-4 和 ChatGPT 的工作原理 2 小时上手开发,快速构建大模型应用并实践提示工程、模型微调、插件、LangChain 等,送配套代码。大模型一线创业者、应用技术专家联袂推荐:宝玉、张路宇、孙志岗、邓范鑫、梁宇鹏(@一乐)、罗云、宜博。

《深度学习入门:基于Python的理论与实现》

斋藤康毅 | 著

陆宇杰 | 译

深度学习“鱼书”,畅销 10 万册,相比 AI 圣经“花书”,本书更合适入门。本书深入浅出地剖析了深度学习的原理和相关技术,书中使用 Python 3,尽量不依赖外部库或工具,从基本的数学知识出发,带领读者从零创建一个经典的深度学习网络,使读者在此过程中逐步理解深度学习。


《Hello 算法》

靳宇栋(@krahets)


动画图解、一键运行的数据结构与算法教程,GitHub Star 101k !近 500 幅动画插图,近 200 段精选代码,助你快速入门数据结构与算法。

书中系统介绍了数据结构与算法基础、复杂度分析、数组与链表、栈与队列、哈希表、树、堆、图、搜索、排序、分治、回溯、动态规划和贪心算法等核心知识,通过清晰易懂的解释和丰富的代码示例,以及生动形象的全彩插图和在线动画图解,揭示算法工作原理和数据结构底层实现,教授读者如何选择和设计最优算法来解决不同类型的问题,切实提升编程技能,构建完整的数据结构与算法知识体系。


《BERT基础教程》

苏达哈尔桑·拉维昌迪兰|著

周参|译


详细讲解十余种 BERT 变体的原理,本书聚焦谷歌公司开发的 BERT 自然语言处理模型,由浅入深地介绍了 BERT 的工作原理、BERT 的各种变体及其应用,书中用简单的文字清晰阐释 BERT 背后的复杂原理,让你轻松上手 NLP 领域的里程碑式模型。


扫码啦!一起学习~👇


可以这么想,ChatGPT 写诗就像一个rapper 即兴freestyle,它根据给定的主题或开头,利用它庞大的“词汇库”和“韵律库”,不断地往下接词,最终形成一首诗。

创作诗歌也一样是预测下一个词,只不过它需要考虑韵律、节奏、意象等更多因素。可以理解为,在诗歌创作模式下,ChatGPT 的“下一个词预测库”里,那些更符合诗歌规则的词的概率会被调高。

调整温度参数需要根据具体应用场景来定。比如写故事,可以把温度调高一些,让故事更精彩;如果是写代码或做数学题,最好把温度调低,保证准确性。

关于“温度参数”的调整,我觉得可以参考烹饪的火候。大火爆炒适合需要创意的场景,小火慢炖适合需要精确的场景。当然,具体怎么调还得根据“食材”和“口味”来决定。

这个问题确实存在。为了减少人为偏见,需要选择多样化的评估人员群体,并对评估人员进行培训,让他们尽可能客观地进行评估。还可以使用一些技术手段,比如去除数据中的敏感信息,来降低偏见的风险。

就像培养孩子一样,如果只给孩子灌输单一视角的知识,孩子很容易形成偏见。所以,训练模型也需要“均衡营养”,让它接触各种各样的数据和观点,才能健康成长。

我觉得ChatGPT写诗是先确定一个主题或意象,然后根据这个主题和已有的诗歌语料,一句一句地“预测”下去,就像我们人类写诗一样,只不过它的速度更快,而且可以参考的语料库更大。

可以考虑建立一个反馈机制,让用户也能参与到模型的评估中来,这样可以收集更广泛的意见,并及时发现和纠正模型的偏见。

温度参数就像一个创造力旋钮。温度高,ChatGPT 就更天马行空,可能会出现一些意想不到的答案,但准确性可能会下降;温度低,它就更中规中矩,适合需要精确答案的场景。