免责声明
🌟作为一名资深文章撰写者,我深知语言的魅力与精准性至关重要。对于NLP领域的见解,虽然我的专业知识并非源于人工智能,但我对此充满热情和求知欲。在此文中,我会以严谨的态度探讨相关议题,力求提供有价值的信息。若有任何谬误之处,欢迎读者朋友们不吝赐教,您的反馈是我不断进步的灯塔。🚀
此外,文中配图均来自网络,版权归原作者所有,如果不希望自己的图被使用的话可联系删除。
2022/12/27 第一次修订
🌟原文改写🌟ChatGPT的强大功能源于其先进的技术,尤其是【上下文学习】这一核心机制。通过深入研究,我发现这对理解这个AI模型至关重要。在本次修订过程中,我已对这部分进行了详尽阐述,并对【迁移学习】和【强化学习】做了更新,以确保内容的准确性和时效性。🚀原文中缺失的技术细节——如GPT3与上下文学习的互动——已被我巧妙地融入了新的篇章中,旨在帮助读者更深入地探索ChatGPT的工作原理。同时,语言表述已进行了优化,以便搜索引擎能更好地理解和索引这些关键概念。📚如果你对ChatGPT的学习路径或其背后的理论感兴趣,这篇文章将是你不可或缺的指南。让我们一起揭开这个AI奇迹的神秘面纱吧!🔍
前言
🎉🚀ChatGPT的火爆,无疑是科技界近期最耀眼的一颗星!它以其卓越性能,彻底颠覆了我们对AI日常交互的认知。🔥相比传统服务型对话机器人,ChatGPT展现出了强大的多任务处理能力和深度学习智慧,让知识获取和文档编写变得简单而高效。📝代码修正、文本优化,一应俱全,仿佛一个全能的编程助手。💡技术的进步,源于Transformer和GPT家族的创新,它们如同引擎,推动着NLP领域日新月异的发展。对于那些对AI进步感到惊讶的同学,别急,ChatGPT只是冰山一角。2017-2020年间,Transformer与GPT的诞生,犹如技术革命的钟声,开启了自然语言处理的新篇章。它们不仅革新了模型架构,更引领了一场知识和创造力的解放。🎓接下来,让我们深入探讨这些里程碑背后的技术原理,揭示AI真正强大的秘密。📚#ChatGPT #AI进步 #NLP革命
🌟ChatGPT引领创新,Transformer与GPT技术巅峰之作🌟🔥ChatGPT的强大源于三大核心优势,解锁人工智能新纪元🔥1️⃣ 集成创新力量 🧬 – ChatGPT整合了Transformer和GPT的先进技术,这不仅是技术上的融合,更是智慧的结晶。2️⃣ 算法优化大师 💻 – 通过精密算法设计,它在处理自然语言任务时表现出色,效能超越预期。3️⃣ 用户友好体验 📝 – 人性化界面与强大的功能相结合,让交互变得更加流畅,满足用户多元化需求。🚀ChatGPT的崛起,标志着AI技术的新高度,优化搜索排名,提升内容价值,引领未来智能通信新时代🚀欲了解更多ChatGPT如何颠覆传统、塑造未来的精彩,请访问相关平台或关注最新动态。记得,每一次探索都可能开启一个新世界的大门!✨
使用的机器学习模型表达能力强。训练所使用的数据量巨大。训练方法的先进性。
我们接下来将会针对这三点进行探讨。
机器学习模型
在步入正题之前,我们可以先梳理一下NLP发展的历史。
基于文法的模型
在这个关键时期,大家普遍采用的策略是借助语言学大师的智慧,探索创建一套精简而高效的自然语言语法规则,并以此为指导开发出基于规则的解析工具,对文本进行深度处理。这种方法乍看似乎颇具逻辑,就像我们熟知的编译器如何将高级指令转化为机器可执行的语言一样。然而,自然语言的复杂性不容忽视,它犹如一座难以穷尽的迷宫,使得制定一个全面无遗漏的语法规则几乎成为不可能的任务。因此,这种基于规则的方法往往局限于特定领域,距离实现通用且强大的自然语言处理技术还有显著差距。
基于统计的模型
🌟在构建语言模型的初期阶段🌟,专家们通常会运用统计分析的方法,对海量的自然语言文本进行深度挖掘,以期望通过数据的力量揭示语言的规律。比如,显而易见,”吃”后面紧随”饭”的概率远超”牛”,即文案中常说的”P(饭|吃)>P(牛|吃)”,这种概率上的差异是不容忽视的语言现象。📚借助语料库的力量,我们能更精准地理解和预测语言的走向。
虽然这个阶段有很多模型被使用,但是本质上,都是对语料库中的语料进行统计,并得出一个概率模型。一般来说,用途不同,概率模型也不一样。不过,为了行文方便,我们接下来统一以最常见的语言模型为例,即建模“一个上下文后面接某一个词的概率“。刚才说的一个词后面接另一个词的概率其实就是一元语言模型。
模型的表达能力
在这里,我们很适合插播一下模型表达能力这个概念。
模型表达能力简单来说就是模型建模数据的能力,比如上文中的一元语言模型就无法建模“牛吃草”和“我吃饭”的区别,因为它建模的本质统计一个词后面跟另一个词的概率,在计算是选“草”还是选“饭”的时候,是根据“吃”这个词来的,而“牛”和“我”这个上下文对于一元语言模型已经丢失。你用再多的数据让一元语言模型学习,它也学不到这个牛跟草的关系。
模型参数数量
有人说,既然如此,为啥我们不基于更多的上下文来计算下一个词的概率,而仅仅基于前一个词呢?OK,这个其实就是所谓的n元语言模型。总体来说,n越大,模型参数越多,表达能力越强。当然训练模型所需要的数据量越大(显然嘛,因为需要统计的概率的数量变多了)。
模型结构
然而,模型表达能力还有另一个制约因素,那就是模型本身的结构。对于基于统计的n元语言模型来说,它只是简单地统计一个词出现在一些词后面的概率,并不理解其中的各类文法、词法关系,那它还是无法建模一些复杂的语句。比如,“我白天一直在打游戏”和“我在天黑之前一直在玩游戏“两者语义很相似,但是基于统计的模型却无法理解两者的相似性。因此,就算你把海量的数据喂给基于统计的模型,它也不可能学到ChatGPT这种程度。
基于神经网络的模型
上文提到,统计语言模型的主要缺点是无法理解语言的深层次结构。曾有一段时间,科学家们尝试将基于文法的模型和基于统计的模型相结合。不过很快,风头就被神经网络抢了过去。
RNN & LSTM
刚开始,流行的神经网络语言模型主要是循环神经网络(RNN)以及它的改良版本LSTM。
RNN的主要结构如下, x是输入,o是输出,s是状态。
如果RNN作为语言模型的话,那x可以作为顺序输入进去的词汇,而o就可以作为输出的词汇,而s就是通过x计算o的过程中生成的状态变量,这个状态变量可以理解为上下文,是对计算当前词汇时前文所有出现过的所有单词的浓缩并在一次次的计算中不断迭代更新。这也是为啥RNN可以建模词与词关系的根本原理。
与简单的基于统计的模型相比,循环神经网络的主要亮点就是能够对一段文字中不同词之间的关系进行建模,这种能力在一定程度上解决了基于统计的模型无法理解深层次的问题。
Attention Mechanisms
在更进一步之前,我们不得不提一下注意力(Attention)机制。
这个机制主要针对RNN语言模型中状态S作为上下文这一机制进行改进。。在RNN中计算当前词后的状态Si主要是通过计算上一个词时的状态Si-1迭代出来的。它的主要缺点就是它假设了距离较近的词汇之间的关系更密切。但是我们都知道,在自然语言中,这一假设并不是一直成立的。引入Attention之后,计算第i个词后的状态从单纯的Si变成了S0,S1…Si的组合,而具体“如何组合”,即哪个状态比较重要,也是通过数据拟合出来的。在这样的情况下,模型的表达能力又得到了进一步的提高,它可以理解一些距离较远但是又非常密切的词汇之间的关系,比如说代词和被指代的名词之间的关系。
Transformer
接下来,我们终于可以祭出之前提过的NLP跨越式发展的标志之一,Transformer的提出!
其实在有了Attention之后,Transformer的提出已经是顺理成章了。Transformer的主要贡献在于1. 将Multi-Head Self-Attention直接内建到网络中。所谓Multi-Head Self-Attention其实就是多套并行的Self-Attention,可以用于建模的词与词之间的多类不同地关系。
2. 利用专用位置编码来替代之前RNN用输入顺序作为次序,使得并行计算成为了可能。
举一个形象但不准确的例子,对于句子I often play skating board which is my favorite sport. 如果使用Multi-Head Self-Attention,那就可以有一套Attention专门用来建模play和skating board的谓宾关系,有一套Attention用来建模skating board与favorite的修饰关系。从而使得模型的表达能力又得到了提高。
ChatGPT所依赖GPT3.5语言模型的的底层正是Transformer。
训练数据
OK,我们现在有一个名为Transformer模型了,这个模型通过Multi-head Self-Attention,使得建立词与词之间的复杂关系成为了可能。因此可以说是一个表达力很强的语言模型了。然而,单有语言模型没有数据就是巧妇难为无米之炊。
GPT-3.5的相关数据并未被公开。我们就只说说它的上一代GPT-3。GPT-3整个神经网络就已经有1750亿个参数了。这不难理解,想一想Attention凭什么确定在当前上下文下哪些词比较重要?而网络又怎样通过Attention和输入生成输出?这些都是由模型里面的参数决定的。这也是为啥模型结构一样的情况下参数越多表达能力越强。那这些模型的参数怎么拿到?从数据中学习!其实大多数所谓的神经网络的学习就是在学参数。
好家伙,要训练1750亿个参数的神经网络要喂多少数据呢?这么多!(from wikipedia)
Dataset# TokensWeight in Training MixCommon Crawl410 billion60%WebText219 billion22%Books112 billion8%Books255 billion8%Wikipedia3 billion3%
可以预想的是,表达能力如此之强的模型,在喂入万亿级的数据之后,其对语言本身的理解已经开始接近人类了。比如它处理句子的时候,会通过训练Attention参数理解到句子中哪些词之间存在关系的?哪些词和哪些词之间是同义的?等一系列比较深度的语言问题。
这还只是2020年的GPT-3。如今已经2022年了,相信GPT-3.5的模型表达能力比GPT-3又有相当大地提升。
训练方法
监督学习 vs 无监督学习
简单来说,监督学习就是在“有答案”的数据集上学习。如果我们要用监督学习(supervised learning)训练一个中文到英文的机器翻译模型,我们就需要有中文以及其对应的英文。整个训练过程就是不断地将中文送入到模型中,模型会给出一个英文的输出,这个时候我们对比一下英文的输出与标准答案的差距远不远(Measured by Loss Function),如果差距比较大,那我们就调整模型参数。这也成为早期针对机器翻译模型的主要训练方法。
迁移学习
然而,“有答案”的数据终究是有限的。这也是限制之前很多自然语言学习的模型设计复杂度的原因。不是不想提高模型的表达能力,而是提上去之后,参数太多,我们没有足量的“有答案”的数据来训练这个模型。
2018年,另一个我认为NLP跨越式发展的标志来了,那就是GPT的提出。
GPT的主要贡献在于,它提出了自然语言的一种新的训练范式。即现通过海量的数据的无监督学习来训练一个语言模型。正如我们之前提到过的,所谓语言模型即是在一个上下文中预测下一个词,这个显然是不需要带有标注的数据的,现有的任何语料都可以作为训练数据的。由于GPT的底层借用了表达能力很强的Transformer,互联网经过长时间的发展,海量的无标记的自然语言数据也并不再是稀缺的事物。导致了训练出来的模型其实对语言有了相当深入地理解。因此模型的最后一层通常也被称为contextual emebedding。
这个时候,如果你想让这个语言模型能够做文本摘要,你只需要在模型的最后一层接一个全连接层,并用少量的数据做监督学习,即可以让他学会文本摘要。这个过程也被称为微调(fine-tune)。它是一种迁移学习(Transfer Learning)。
上下文学习
2020年,Open AI发表论文[6]正式推出了GPT3。GPT3的主要贡献在于提出了大模型的上下文学习(In-Context Learning)的能力。所谓上下文学习,简单来说就是通过向模型喂入一个提示(prompt),并选择性的加入少量的任务的样例,模型之后就可以利用Language Model的预测下一词的形式自动生成相关任务的答案。
相比上一节提到的基于Fine-tune的迁移学习,上下文学习主要了提升了零样本(Zero-shot)和少样本(Few-shot)任务的能力。Fine-tune还是需要一定数量的带标签的数据做监督学习的,但上下文学习就只需要及少量甚至完全不需要。这也为ChatGPT能够应对各种各样不同的问题提供了可能性。
值得一提的是,上下文学习是只有大模型(模型参数数量>40B)中才会出现的,因此学术界把这一类大模型才有的能力定义为突现能力(emergent ability)[7]
指令微调与强化学习
ChatGPT的目标是根据用户输入生成回复。在上下文学习的情况下,从输入输出的形式上来看,生成回答本身与语言模型是完全兼容的,都是根据一定的上下文生成一段文字。但是,生成回复和语言模型的内在目标却是不一致的,语言模型致力于在一定上下文下预测可能性最大的下一个词汇,而生成回复则是致力于生成一个人类认为比较满意的回答。为了解决这个不一致性。ChatGPT在还使用了一种叫做reinforcement learning from human feedback (RLHF)的技术。
其总体原理如下图所示,首先利用一系列问答对模型进行监督训练(这个操作也叫监督指令微调)。在完成监督指令微调后,就开始利用强化学习对模型进行进一步的指令微调,具体地,首先在人类的帮助下训练一个奖赏网络,这个奖赏网络具有对多个聊天回复好坏进行排序的能力。接着,利用这个奖赏网络,进一步通过强化学习(reinforcement learning)优化了聊天模型。该训练方法的细节可以参考论文[3]
在这一通操作之后,ChatGPT就变成了我们现在看到的这样子。
其他
至此,我们基本上就已经能明白为什么ChatGPT这么强了,但是我相信很多同学肯定会表示“就这?我不信,它都会改bug了,给他一段代码他都知道代码是干什么的了。”
Okay,我们可以首先解释一下为什么它可以做到修改代码中的bug,根据OpenAI提供的信息 :”GPT-3.5 series is a series of models that was trained on a blend of text and code from before Q4 2021.”,我们可以知道GPT-3.5中的训练数据其实是包含了海量的代码数据。所以说GPT-3.5对代码的理解也是相当强的。从论文[4]可以看到,将代码放入语言模型中进行训练后,训练出的语言模型已经可以做到代码语义级的搜索。
而ChatGPT又是怎么知道代码的功能的呢?目前我还没看到相关论文,不过可以参考一下OpenAI在GPT-3上做的代码训练的工作[5],大概就是将代码和其功能docstring注释放在一起做对比预训练(contrastive pretrain),这样可以让语言模型理解代码和其功能的关系。
总结
总之,ChatGPT并没有那么神秘,它本质上就是将海量的数据结合表达能力很强的Transformer模型结合,从而对自然语言进行了一个非常深度的建模。对于一个输入的句子,ChatGPT是在这个模型参数的作用下生成一个回复。
有人会发现ChatGPT也经常会一本正经胡说八道,这也是这一类方法难以避免的弊端。因为它本质上只是通过概率最大化不断生成数据而已,而不是通过逻辑推理来生成回复。
向ChatGPT询问比较严肃的技术问题也可能会得到不靠谱的回答。
Reference
Vaswani, Ashish, et al. “Attention is all you need.” Advances in neural information processing systems 30 (2017).Radford, Alec, et al. “Improving language understanding by generative pre-training.” (2018).Ouyang, Long, et al. “Training language models to follow instructions with human feedback.” arXiv preprint arXiv:2203.02155 (2022).Chen, Mark, et al. “Evaluating large language models trained on code.” arXiv preprint arXiv:2107.03374 (2021). Neelakantan, Arvind, et al. “Text and code embeddings by contrastive pre-training.” arXiv preprint arXiv:2201.10005 (2022).Brown, Tom, et al. “Language models are few-shot learners.” Advances in neural information processing systems 33 (2020): 1877-1901.Wei, Jason, et al. “Emergent abilities of large language models.” arXiv preprint arXiv:2206.07682 (2022).
AI时代,掌握AI大模型第一手资讯!AI时代不落人后!
免费ChatGPT问答,办公、写作、生活好得力助手!
扫码右边公众号,驾驭AI生产力!