语言模型进化史(下)

news2024/10/6 6:39:37

由于篇幅原因,本文分为上下两篇,上篇主要讲解语言模型从朴素语言模型到基于神经网络的语言模型,下篇主要讲解现代大语言模型以及基于指令微调的LLM。文章来源是:https://www.numind.ai/blog/what-are-large-language-models

四、现代语言大模型

Transformer的发明标志着现代LLM时代的开始。 自2018年以来, AI实验室开始训练规模越来越大的模型。令众人惊讶的是,这些模型的质量也在不断提高!下图对这些模型进行了可视化,我们将重点介绍其中值得关注的模型:

LLM进化树。来源:https://github.com/Mooler0410/LLMsPracticalGuide

这些语言模型主要分为三类。一是“仅编码器(encoder-only)”组(上图中的粉色部分),该类语言模型擅长文本理解,因为它们允许信息在文本的两个方向上流动。二是“仅解码器(decoder-only)”组(上图中的蓝色部分),该类语言模型擅长文本生成,因为信息只能从文本的左侧向右侧流动,以自回归方式有效生成新词汇。三是“编码器-解码器(encoder-decoder)”组(上图中的绿色部分),该类语言模型对上述两种模型进行了结合,用于完成需要理解输入并生成输出的任务,例如翻译。

这一切都主要始于文本理解类模型。最初是使用RNN的ELMo,之后是谷歌著名的BERT模型及其派生模型(如RoBERTa),它们都基于Transformer。这些模型通常具有几亿个参数(相当于约1GB的计算机内存),在大约10GB到100GB的文本上进行训练(通常为几十亿个单词),并且可以在现代笔记本电脑上以约0.1秒的速度处理一段文本。这些模型极大地提升了文本理解任务的性能,如文本分类、实体检测和问题回答等。 这已然是NLP(自然语言处理)领域的一场革命,不过才刚刚拉开序幕……

在文本理解类语言模型发展的同时,OpenAI开始基于Transformer创建文本生成类语言模 型。首先是2018年的GPT-1,有1亿个参数;然后是2019年的GPT-2,拥有高达15亿个参数,并在40GB的文本上进行了训练。至少对我来说,GPT-2的创建是一个至关重要的时刻。以下是GPT-2可以生成的文本示例,从一个由人类撰写的段落开始:

来源:https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf 

生成的英语文本质量很不错,而且具有连贯性。例如,科学家的名字没有改变,而这在基于RNN的模型中是个经典问题。由于GPT-2在所生成文本的质量上取得了巨大突破,为避免滥用,OpenAI最初决定不向公众发布。可以说GPT-2标志着LLM正朝着正确的方向发展。 需要注意的是:使用这类语言模型需要先提供一个起始文本,这个起始文本被称为提示(prompt)。

一年后(2020年),OpenAI创建了GPT-3。GPT-3是一个具有1750亿个参数的模型(需要700GB的计算机内存来存储模型!),该模型不仅规模显著扩大,文本生成质量也有重大改进。除了性能的提升外,GPT-3还让人们对未来如何使用LLM大开眼界。

首先,GPT-3能够编写代码。例如, 你可以使用GPT-3来生成(非常)简单的网站,只需在提示中描述网站的外观即可。以下是一个示例,让GPT-3使用HTML创建一个按钮:

这些基本的编码能力在当时并不十分实用, 但它们的出现意味着软件开发在未来可能会发生根本性转变。

GPT-3另一令人瞩目的能力是能够进行上下文学习, 它可以通过提示中所展示的示例来学习如何执行任务。这意味着你可以通过编写提示来定制LLM,而无需更改它们的权重。这一能力开辟了一种全新的、完全基于提示的自然语言处理方式,如今十分受欢迎。

总而言之,GPT-3展示了“提示”作为一种新方式的潜力,可以让机器通过自然语言按照我们的意愿执行任务。

注意:GPT-3比GPT-2要大得多。 自2018年以来,模型的规模急剧增加。以下是一些值得关注的LLM及其规模:

在两年时间里,模型参数的数量增加了1000倍,目前最大的模型(如GPT-4)已接近1万亿个参数,这是因为模型规模的增加与性能的改善密切相关,并且目前还未达到性能瓶颈。这些模型规模十分庞大,与人脑相比,人脑约有1000亿个神经元,每个神经元平均与其他1000个神经元相连接,总共约有100万亿个连接。从某种意义上说,最大的LLM仍然比人脑小100倍。当然,这只是一个非常宽泛的比较,因为人脑和当前LLM使用的架构和学习方法都截然不同。

另一个有趣的指标是这些模型在训练阶段所“阅读(read)”的单词数量。

如你所见, 数量十分庞大。这些模型在训练过程中会接触超1000亿个单词,是一个人在一生中听到或阅读单词数量的100倍以上!这显示出神经网络与人脑的不同之处:神经网络的学习速度比人类慢得多,但可以获得比人类接触的多得多的数据。

需要注意的是, LLM在训练过程中所接触到的单词数量并未像参数数量那样迅速增长(从GPT-1到GPT-3只增长了3倍)。这是因为优先考虑模型规模,不过结果证明这是一个小小的失误。最新的模型并没有比GPT-3大很多,但通过处理更多单词来进行训练。

这种对数据的渴求导致了一个问题, 即可用文本的总量存在硬性限制,约为数万亿个单词,而模型正在接近这一限制。虽然仍有可能循环遍历所有文本,但这会导致模型性能的回报递减。总而言之,可得出结论:网络在训练阶段处理的有效限制是几十万亿个单词,比GPT-4的数量约多出10倍。

另一个问题是, 通过用更多的数据训练更大的模型,计算成本也在增加。以下是训练上述模型的预估计算成本:

为显著超越当前模型的性能,下一代模型需要耗费数亿美元的计算资源。虽然考虑到这些模型能带来的好处,这一成本是合理的,但如此巨大的花费仍然是一个问题。

模型的扩展变得越来越困难。幸运的是,扩大规模并不是改进LLM的唯一途径。2022年末,一项创新开启了另一场革命,这次的影响远远超出了NLP领域。

五、指令调优和聊天机器人LLM

GPT-3揭示了提示的潜力,但撰写提示并不容易。事实上,传统语言模型经训练可以模仿其在网络上看到的内容。 因此,要想创建一个好的提示,你必须清楚网络上哪种起始文本可能会引导模型生成你所期望的结果。这是一种奇怪的游戏,也是一种找到正确表述的艺术,你需要改变措辞,假装自己是专家,展示如何逐步思考的示例等等。这一过程叫做提示工程, 这使得使用这些LLM变得困难。

为解决这个问题,研究人员一直在探索如何修改基础LLM,以让其更好地遵循人类指令。现在主要有两种方法:一是使用人类编写的指令-回答对(instruction-answer pairs),并在此数据集上对基础LLM进行微调(即继续训练)。二是让LLM生成几个可能的答案,然后由人类对答案评分,并使用强化学习在此数据集上对LLM微调。这就是著名的RLHF(人类反馈的强化学习)的过程。此外,我们还可以将两种方法相结合,OpenAI在InstructGPT和ChatGPT中就对这两者进行了结合。

InstructGPT和ChatGPT的指令调整步骤。来源: https://openai.com/blog/chatgpt(修改自https://arxiv.org/abs/2203.02155)

将这两种技术结合在一起可以得到一个经过指令调整的LLM。调整后的LLM比基础模型更擅长遵循人类指令,使用起来更加容易。

经过指令调整的LLM已经非常出色了,但还有最后一步才能将这些LLM真正转化为每个人都可以使用的东西——聊天机器人。 OpenAI在2022年12月发布了ChatGPT,一个基于GPT-3.5的聊天机器人。它的创建方式与InstructGPT相同,但这次使用的是整个对话而不仅仅是指令-回答对。

ChatGPT发布后,基于LLM的新型聊天机器人开始层出不穷。 OpenAI使用GPT-4来代替GPT-3.5,对ChatGPT进行了改进,Anthropic发布了Claude,Google推出Bard,Meta也 研发出了LLaMA,还有几个开源LLM正在发布过程中。这是一次真正的模型大爆炸,将会带来许多令人兴奋的应用,NuMind也会为此出一份力。

ChatGPT发布两个月后,迅速拥有了上亿用户,成为有史以来用户增长最快的产品。人们用ChatGPT来根据要点编写电子邮件、重新组织文本、总结文本、编写代码,或学习东西(在此之前,搜索引擎一直垄断着这项任务)。ChatGPT的发布是LLM发展史的转折点,它让 人们意识到了LLM的潜力,引发了“AI竞赛”,世界上主要人工智能实验室和初创公司都参与其中。

值得注意的是, LLM的突然普及也引发了人们的担忧。人们担心LLM被有心人利用,做一些有害的事情,所以创建开放式LLM聊天机器人必须确保它们的“安全”性(或“与人类价值观保持一致”),也就是说它们不能帮助制造炸弹等。目前有一些方法可以绕过聊天机器人的安全防御措施,但随着时间推移,这些安全措施会逐渐完善,想绕过它们将变得十分困难。

六、语言大模型的未来

近年来, LLM取得了很大进步,人们对它的热情达到了空前高度,在这一领域投入了大量精力。那么,LLM的未来将如何发展?虽然预测未来很难,但我们也有一些看法:

模型大小和训练规模将继续扩大。扩展在过去取得了非常好的效果,且仍有提升空间,但问题是,模型的训练成本急剧增长,逐渐让人望而却步(>1亿美元)。更好的GPU和新的专用硬件有助于扩展模型规模,但它们的开发和生产需要时间。此外,最大的模型已经迭代了所有书籍和整个网络,这意味着我们正在达到可用训练数据的极限(即“词元危机”)。

因此,可以肯定的是,在未来几年内,参数数量不会像过去那样出现爆发式增长。最大的模型今年应该会稳定在1万亿参数以下规模, 然后以每年50%的速度增长。

LLM将超越纯语言模型,将图像和视频纳入训练数据,成为多模态模型。从图像和视频中学习可能有助于模型更好地理解世界。GPT-4就是在图像和文本上进行训练的,且取得了少许性能提升。利用视频数据训练LLM可能给这一领域带来质的改变,但这需要大量计算。预计还需两年多的时间才能真正实现利用视频训练“语言”大模型。

扩大规模、实现语言模型向多模态模型的转变需要大量算力。为缓解这一问题,我们可以采用更好的神经架构和训练程序,这些架构和训练程序要么计算强度较低,要么可以用更少的数据进行学习(人类大脑证明这是可能的)。然而更可能的是类似于RNN的内存会卷土重来,因 为这种内存运行时的效率非常高(例如最近的RWKV架构)。

此外,还可能有一些更大的变化, 例如LLM不以自回归的方式生成,而是以自上而下的方式 生成(例如在生成单词之前做出(随机)决定),这种做法可能更合乎逻辑(这就是神经网络目前生成图像的方式)。到底何时会开发出这样的新架构/方法还很难说,但我们预计应该就 在未来几年,一旦开发出来, LLM模型的性能将得到大幅提升。

另一个改进方向是继续进行指令调优,让更多人参与到“教育”LLM(即与AI对齐)的过程中。这可以由私人AI实验室来实现,也可以是一个更像维基百科的众包项目,以改进和对齐开放模型的LLM能力。在这个问题上,我们还是希望偏离传统的RLHF,而是让人们与模型对话来进行教导,就像我们对待孩子一样。我不确定这种项目的具体时间线,但我已经思考了一段时间,非常希望看到它的实现。

上文我们只讨论了改进实际模型的方法,但实际上有一些方法可以在不改变模型的情况下改进LLM。方法之一就是为LLM提供工具。这种工具可以是用于查找准确信息的搜索引擎,或者是用于进行基本数学计算的计算器。此外,它还可以是一个结合了推理引擎(符号人工智能的经典组件)的知识库,如Wolfram Alpha,用于查找事实、进行逻辑推理或其他神经网络不擅长的计算。当然,这个工具还可以是一个用于编写和运行代码的完整编程环境。LLM可以通  过生成触发API调用的特殊词元(单词)来使用这些工具, 然后将API的输出插入到生成的文本中。

LLM使用工具示例。来源:https://arxiv.org/abs/2302.04761

上述趋势实际上已经开始了(例如,ChatGPT插件、LangChain库和Toolformer论文),我相信这些工具将成为LLM的核心。

改进LLM的另一个方法是以更智能的方式使用它们,让它们更好地完成任务。这可以通过巧妙的提示或更高级的程序来实现。比如说我们可以让LLM按步骤进行思考(即思想链提示(chain-of-thoughts prompting)),并提高LLM在逻辑任务上的表现。以下是提示LLM按步骤思考的示例:

思维链提示示例。来源:https://arxiv.org/abs/2201.11903

同样地,我们可以要求LLM反思、批判自己的输出,并对其进行迭代修改。 通过迭代,我们可以显著提高LLM性能, 尤其是生成代码方面的性能。我们还可以更进一步,创建完全自主的智能体,这些智能体可以管理任务列表并迭代任务,直到达到主要目标(请参考AutoGPT和BabyAGI)。目前,这些自动化智能体的运行效果并不理想,但它们的效果会逐步提升,很难说这些自动化智能体会发展到何种程度,对LLM产生何种影响。

由于LLM可以通过这些程序(思想链、迭代批评等) 改进答案,因此,我们可以使用这些程序创建指令-答案对,然后在指令-答案对上按顺序对LLM微调以提高其性能。这种自我完善是可能的(参见https://arxiv.org/abs/2210.11610),我相信它具有很大的潜力。例如,我们可以想象模型为了变得更加自洽而与自身进行讨论,这是一种自我反思过程。可能会进一步提升LLM的表现。

LLM可能还有其他改进方向, 总的来说,我们无法确定LLM的未来,但显然它们将继续发展下去。理解和生成文本的能力使LLM成为了一项基本技术。即使在目前的发展情况下,LLM也将解锁大量应用程序,日常工作中的数字助理就是一个很好的例子,更疯狂的是,LLM甚至可能引导我们创造某种超级智能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1566585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Multi-Head Attention 代码实现

Multi-Head Attention 代码实现 flyfish MultiHead ( Q , K , V ) Concat ( head 1 , . . . , head h ) W O \text{MultiHead}(Q, K, V) \text{Concat}(\text{head}_1, ..., \text{head}_h)W^O MultiHead(Q,K,V)Concat(head1​,...,headh​)WO head i Attention ( Q W i Q…

kettle使用MD5加密增量获取接口数据

kettle使用MD5加密增量获取接口数据 场景介绍: 使用JavaScript组件进行MD5加密得到Http header,调用API接口增量获取接口数据,使用json input组件解析数据入库 案例适用范围: MD5加密可参考、增量过程可参考、调用API接口获取…

C++(set和map详解,包含常用函数的分析)

set set是关联性容器 set的底层是在极端情况下都不会退化成单只的红黑树,也就是平衡树,本质是二叉搜索树. set的性质:set的key是不允许被修改的 使用set需要包含头文件 set<int> s;s.insert(1);s.insert(1);s.insert(1);s.insert(1);s.insert(2);s.insert(56);s.inser…

面试题:RabbitMQ 消息队列中间件

1. 确保消息不丢失 生产者确认机制 确保生产者的消息能到达队列&#xff0c;如果报错可以先记录到日志中&#xff0c;再去修复数据持久化功能 确保消息未消费前在队列中不会丢失&#xff0c;其中的交换机、队列、和消息都要做持久化消费者确认机制 由spring确认消息处理成功后…

Java基础之流程控制语句(循环)

文章目录 Java基础之流程控制语句(循环)1.顺序结构2.分支结构if语句的第一种格式if语句的第二种格式if语句的第三种格式Switch语句格式Switch的其他知识点default的位置和省略case穿透Switch的新特性 3.循环结构循环的分类for 循环while 循环for循环 与 while循环 的对比 4.do.…

RAG原理、综述与论文应用全解析

1. 背景 1.1 定义 检索增强生成 (Retrieval-Augmented Generation, RAG) 是指在利用大语言模型回答问题之前&#xff0c;先从外部知识库检索相关信息。 早在2020年就已经有人提及RAG的概念&#xff08;paper&#xff1a;Retrieval-augmented generation for knowledge-inten…

IDEA 解决 java: 找不到符号 符号: 类 __ (使用了lombok的注解)

原因IDEA版本太高&#xff0c;在 ProcessingEnvironement 预编译的时候是以代理的方式来执行的&#xff0c;不再是直接 javac方式, lombok依赖的 javac方式的 annotation processors 不再生效了 解决办法&#xff1a;下面这一句&#xff0c;加在下图中 -Djps.track.ap.depen…

八口快速以太网交换机芯片方案分享/JL5110

以太网交换机(switch)是一种网络设备&#xff0c;用于在局域网中连接多个计算机和其他网络设备。它可以实现多个端口之间的同时传输&#xff0c;并根据MAC地址进行帧过滤和转发。交换机通过自学习的方式&#xff0c;将MAC地址与相应的接口关联起来&#xff0c;以便将数据帧准确…

C语言中的数组与函数指针:深入解析与应用

文章目录 一、引言二、数组的定义1、数组的定义与初始化2、char*与char[]的区别1. 存储与表示2. 修改内容3. 作为函数参数 三、字符串指针数组1. 定义与概念2. 使用示例3. 内存管理 四、从字符串指针数组到函数指针的过渡1、字符串指针数组的应用场景2、函数指针的基本概念3、如…

【RedHat9.0】Timer定时器——创建单调定时器实例

一个timer&#xff08;定时器&#xff09;的单元类型&#xff0c;用来定时触发用户定义的操作。要使用timer的定时器&#xff0c;关键是要创建一个定时器单元文件和一个配套的服务单元文件&#xff0c;然后启动这些单元文件。 定时器类型&#xff1a; 单调定时器&#xff1a;即…

解析html内容的h标签成目录树(markdown解析出来的html)

一.本人用的markdown插件是cherry-markdown&#xff0c;个人觉得比较好用&#xff0c;画图和数学公式都整合的很好 https://github.com/Tencent/cherry-markdown 二.背景 经过markdown解析的html&#xff0c;要取里面的h标签转换成目录树&#xff0c;发现这里面都要人工计算&…

EXCEL-VB编程实现自动抓取多工作簿多工作表中的单元格数据

一、VB编程基础 1、 EXCEL文件启动宏设置 文件-选项-信任中心-信任中心设置-宏设置-启用所有宏 汇总文件保存必须以宏启动工作簿格式类型进行保存 2、 VB编程界面与入门 参考收藏 https://blog.csdn.net/O_MMMM_O/article/details/107260402?spm1001.2014.3001.5506 二、…

用Vue仿了一个类似抖音的App

大家好&#xff0c;我是 Java陈序员。 今天&#xff0c;给大家介绍一个基于 Vue3 实现的高仿抖音开源项目。 关注微信公众号&#xff1a;【Java陈序员】&#xff0c;获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 douyin —— 一个基于 Vue、Vite 实…

解决uCharts图表在微信小程序层级过高问题

uniapp微信小程图表层级过高问题&#xff1f; 项目中涉及 uCharts图表&#xff0c;在 App/H5端均正常使用&#xff0c;微信小程序 存在层级问题&#xff01; 文章目录 uniapp微信小程图表层级过高问题&#xff1f;效果图遇到问题解决方案 啰嗦一下~&#xff0c;自己的粗心 在实…

Firefox 关键词高亮插件的简单实现

目录 1、配置 manifest.json 文件 2、编写侧边栏结构 3、查找关键词并高亮的方法 3-1&#xff09; 如果直接使用 innerHTML 进行替换 4、清除关键词高亮 5、页面脚本代码 6、参考 1、配置 manifest.json 文件 {"manifest_version": 2,"name": &quo…

HDLbits 刷题 --Always nolatches

学习: Your circuit has one 16-bit input, and four outputs. Build this circuit that recognizes these four scancodes and asserts the correct output. To avoid creating latches, all outputs must be assigned a value in all possible conditions (See also always…

内存管理是如何影响系统的性能的

大家好&#xff0c;今天给大家介绍内存管理是如何影响系统的性能的&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 内存管理对系统性能的影响至关重要&#xff0c;主要体现在以下…

课程设计项目3.2:基于振动信号分析的电机轴承故障检测

01.课程设计内容 02.代码效果图 获取代码请关注MATLAB科研小白的个人公众号&#xff08;即文章下方二维码&#xff09;&#xff0c;并回复&#xff1a;MATLAB课程设计本公众号致力于解决找代码难&#xff0c;写代码怵。各位有什么急需的代码&#xff0c;欢迎后台留言~不定时更新…

Js之运算符与表达式——②

运算符&#xff1a;也叫操作符&#xff0c;是一种符号。通过运算符可以对一个或多个值进行运算&#xff0c;并获取运算结果。 表达式&#xff1a;由数字、运算符、变量的组合&#xff08;组成的式子&#xff09;。 表达式最终都会有一个运算结果&#xff0c;我们将这个结果称…

【cache】卡常

来源于《国家集训队2024论文集》中的《论现代硬件上的常数优化》 个人总结&#xff1a; 不要开二的次幂作为维度的数组&#xff0c;否则常数会变大【存疑】。总是保证内存访问连续性更高。比如 st表&#xff0c;把log维放在第二维&#xff0c;会导致内存访问距离最大为N*LOG。…