admin 发布的文章
A Survey of Large Language Models
摘要
由于研究人员发现模型缩放可以提高性能,他们通过将模型大小增加到更大的大小来进一步研究缩放效应。有趣的是,当参数尺度超过一定水平时,这些放大的语言模型不仅实现了显著的性能改进,而且还显示出一些小规模语言模型(如BERT)中不存在的特殊能力(如上下文学习)。为了区分参数尺度的差异,研究界为显著大小的PLM(例如,包含数百亿或数千亿个参数)创造了“大型语言模型”(LLM)一词。
在本次调查中,我们通过介绍背景、关键发现和主流技术来回顾LLM的最新进展。特别是,我们关注LLM的四个主要方面,即预训练、适应调整、利用和能力评估(pre-training, adaptation tuning, utilization, and capacity evaluation. )
1、INTRODUCTION
1.Technically, language modeling (LM)
2.Neural language models (NLM). word2vec,rnn,cnn
3.Pre-trained language models (PLM). ELMo,LSTM
4. Large language models (LLM).
研究人员发现,扩展PLM(例如,扩展模型大小或数据大小)通常会提高下游任务的模型能力。许多研究已经通过训练越来越大的PLM(例如,175B参数GPT-3和540B参数PaLM)来探索性能极限。尽管缩放主要在模型大小(具有类似的架构和预训练任务)下进行,但这些大型PLM表现出与较小PLM不同的行为(例如,330M参数BERT和1.5B参数GPT-2),并在解决一系列复杂任务时表现出令人惊讶的能力(称为涌现能力[31],called emergent abilities)。
强调LLM和PLM之间的三个主要区别:
(1)首先,LLM显示出一些令人惊讶的涌现能力,这在以前的较小PLM中可能没有观察到。
(2)其次,LLM彻底改变了人类开发和使用人工智能算法的方式。与小型PLM不同,访问LLM的主要方法是通过提示接口(例如GPT-4API)。人类必须了解LLM是如何工作的,并以LLM可以遵循的方式格式化他们的任务。
(3)第三,LLM的发展不再明确区分研究和工程。LLM的训练需要在大规模数据处理和分布式并行训练方面有丰富的实践经验。为了开发有能力的LLM,研究人员必须解决复杂的工程问题,与工程师合作或成为工程师。
挑战
但LLM的基本原则仍然没有得到很好的探索。
(1)首先,为什么新兴能力出现在LLM中,而不是较小的PLM中,这仍然是个谜。
(2)其次,很难为研究界训练有能力的LLM。由于模型预训练的巨大成本,很难对研究界进行重复、消融的研究。
(3)第三,使LLM与人类价值观或偏好保持一致是非常具有挑战性的。尽管有这种能力,LLM也可能产生有毒、虚构或有害的内容。它需要有效和高效的控制方法来消除LLM使用的潜在风险[46]。
2.OVERVIEW(概述)
在本节中,我们将介绍LLM的背景以及关键术语、能力和技术。
Background
通常,大型语言模型(LLM)指的是包含数千亿(或更多)参数的语言模型5
,它们是在海量文本数据[32]上训练的,如GPT-3[55]、PaLM[56]、Galactica[35]和LLaMA[57]。具体而言,LLM建立在Transformer架构[22]的基础上,其中多头注意力层堆叠在非常深入的神经网络中。
Emergent Abilities of LLMs
在文献[31]中,LLM的涌现能力被正式定义为“不存在于小模型中但出现于大模型中的能力”,这是LLM与以前的PLM区别开来的最显著特征之一。当涌现能力出现时,它还引入了一个显著的特征:当规模达到一定水平时,表现显著高于随机。
在这里,我们简要介绍LLM的三种具有代表性的涌现能力,描述如下。
• In-context learning:
GPT-3[55]正式引入了上下文学习能力:假设语言模型已经提供了一个自然语言指令和/或几个任务演示,它可以通过完成输入文本的单词序列来生成测试实例的预期输出,而不需要额外的训练或梯度更新。
• Instruction following.
通过对通过自然语言描述(即指令)格式化的多任务数据集的混合进行微调,LLM在同样以指令形式描述的看不见的任务上表现良好[28,61,62]。有了这种能力,指令调优使LLM能够通过理解任务指令来执行新任务,而无需使用明确的示例,这可以在很大程度上提高泛化能力。
• Step-by-step reasoning.
对于小型语言模型,通常很难解决涉及多个推理步骤的复杂任务,例如数学单词问题。而通过思维链推理策略[33],LLM可以通过利用提示机制来解决这些任务,该机制涉及推导最终答案的中间推理步骤。据推测,这种能力可能是通过对代码进行训练获得的[33,47]。
Key Techniques for LLMs.
• Scaling
• Training
需要分布式训练算法来学习LLM的网络参数,其中经常联合使用各种并行策略。为了支持分布式训练,已经发布了几个优化框架来促进并行算法的实现和部署,如DeepSpeed[64]和Megatron LM[65]。
• Ability eliciting(启发)
思维链提示已被证明通过包括中间推理步骤来解决复杂的推理任务是有用的。此外,我们可以通过自然语言的任务描述进一步对LLM进行指令调整,以提高LLM在看不见的任务上的可推广性。
• Alignment tuning
由于LLM是为了捕捉预训练语料库的数据特征而训练的(包括高质量和低质量的数据),因此它们很可能会对人类产生有毒、有偏见甚至有害的内容。有必要使LLM与人类价值观保持一致,例如有益、诚实和无害。为此,InstructGPT[61]设计了一种有效的调整方法,使LLM能够遵循预期的指令,该方法利用了人类反馈的强化学习技术[61,67]。
它通过精心设计的标签策略将人融入训练循环。ChatGPT确实是在与InstructGPT类似的技术上开发的,它在产生高质量、无害的回答方面表现出强大的协调能力,例如拒绝回答侮辱性问题。
• Tools manipulation(操作)
本质上,LLM被训练为大规模纯文本语料库上的文本生成器,因此在文本中没有最好地形成或表达的任务(例如,数值计算)上执行得不太好。此外,他们的能力也局限于训练前的数据,最近提出的一种技术是使用外部工具来弥补LLM的不足[68,69]。
例如,LLM可以利用计算器进行精确计算[69],并使用搜索引擎检索未知信息[70]。最近,ChatGPT启用了使用外部插件(现有或新创建的应用程序)的机制,这与LLM的“眼睛和耳朵”类似。
3. RESOURCES OF LLMS
在本节中,我们将主要总结开源模型检查点或API、可用的语料库和用于LLM的有用库。
3.1Publicly Available Model Checkpoints or APIs
• Models with Tens of Billions of Parameters
• Models with Hundreds of Billions of Parameters
• Public API of LLMs.
3.2 Commonly Used Corpora
在本节中,我们将简要总结几种广泛用于培训LLM的语料库。根据它们的内容类型,我们将这些语料库分为六组:图书、CommonCrawl、Reddit链接、维基百科、代码和其他。
3.3 Library Resource
在这一部分中,我们简要介绍了一系列可用于开发LLM的库。
Transformers、DeepSpeed、Colossal-AI
大模型调研
公司 | AI大模型 | 模型参数 | 训练数据 | 发布时间 | 应用场景 | AIGC应用场景 |
---|---|---|---|---|---|---|
百度 | 文心·NLP大模型 文心·CV大模型 跨模态大模 | - | - | 发布时间 | 智能搜索 智能云 自动驾驶 智能地图 汽车智能化 解决方案 智能家居 | AI作画 AI写作 AI编剧 AI语音 AI视频创作 数字人 |
阿里 | M6 | 10万亿 | - | 发布时间 | 阿里云 钉钉 | AI海报设计 |
openAI | GPT-1 GPT-2 GPT-3 ChatGPT | 1.17亿 15亿 1750亿 1750亿 | 5G 40G 45T | 2018年6月 2019-2 2020-5 2022-11 | 对话 | 对话 |
元语智能 | ChatYuan | 百亿 | - | 2022-11 | - | 对话 |
华为 | 盘古 | - | - | - | - | 对话 |
华为+中科院自动化所 | 紫极太初 | 千亿 | - | - | - | 对话 |
北京智源人工智能研究院 | 悟道 | 1.75万亿 | 悟道1.0 悟道2.0 | - | - | 对话 |
一、元语AI-ChatYuan
1.官网:
https://github.com/clue-ai/ChatYuan
2.简介:
hatYuan: 元语功能型对话大模型
这个模型可以用于问答、结合上下文做对话、做各种生成任务,包括创意性写作,也能回答一些像法律、新冠等领域问题。它基于PromptCLUE-large结合数亿条功能对话多轮对话数据进一步训练得到。
PromptCLUE-large:在1000亿token中文语料上预训练,累计学习1.5万亿中文token,并且在数百种任务上进行Prompt任务式训练。针对理解类任务,如分类、情感分析、抽取等,可以自定义标签体系;针对多种生成任务,可以进行采样自由生成。
3.预训练代码:
https://github.com/google-research/text-to-text-transfer-transformer
4.训练数据集合:
https://github.com/CLUEbenchmark/pCLUE
pCLUE: Large-scale Prompt-based Dataset for Multi-task and Zero-shot Learning in Chinese
pCLUE:基于提示的大规模预训练数据集,用于多任务学习和零样本学习
数据量: 120万训练数据,73个Prompt
- 训练集 train.json: 1,200,705
- 验证集 dev.json: 100,000
- 公开测试集 test_public.json: 129,556
- 测试集 test.json: 250,461
5.目前已经有包含9个数据集:
1.单分类tnews
2.单分类iflytek
3.自然语言推理ocnli
4.语义匹配afqmc
5.指代消解-cluewsc2020
6.关键词识别-csl
7.阅读理解-自由式c3
8.阅读理解-抽取式cmrc2018
9.阅读理解-成语填空chid
二、百度文心
1.官网:
https://github.com/PaddlePaddle/ERNIE
2.简介:
文心大模型ERNIE是百度发布的产业级知识增强大模型,涵盖了NLP大模型和跨模态大模型。2019年3月,开源了国内首个开源预训练模型文心ERNIE 1.0,此后在语言与跨模态的理解和生成等领域取得一系列技术突破,并对外开源与开放了系列模型。
3.底层模型:
ERNIE 1.0
ERNIE 2.0
ERNIE 3.0
4.对话大模型:
文心一言,暂未发布,3月份发布
三、GPT系列
1.官网:
GPT-1:
GPT-2:https://github.com/openai/gpt-2
GPT-3:https://github.com/openai/gpt-3
ChatGPT: https://chat.openai.com/
2.介绍:
GPT-1、GPT-2:模型均是开源的,GPT-3模型没有开源
3.论文:
GPT-1:https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf
GPT-2:https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
GPT-3:https://arxiv.org/pdf/2005.14165.pdf
instructGPT:https://arxiv.org/pdf/2203.02155.pdf
作者:机器之心
链接:https://zhuanlan.zhihu.com/p/597100830
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在机器学习中,模型的能力是指模型执行特定任务或一组任务的能力。模型的能力通常通过它能够优化其目标函数的程度来评估。例如,用来预测股票市场价格的模型可能有一个衡量模型预测准确性的目标函数。如果该模型能够准确预测股票价格随时间的变化,则认为该模型具有很高的执行能力。一致性关注的是实际希望模型做什么,而不是它被训练做什么。它提出的问题是「目标函数是否符合预期」,根据的是模型目标和行为在多大程度上符合人类的期望。假设要训练一个鸟类分类器,将鸟分类为「麻雀」或「知更鸟」,使用对数损失作为训练目标,而最终目标是很高的分类精度。该模型可能具有较低的对数损失,即该模型的能力较强,但在测试集上的精度较差,这就是一个不一致的例子,模型能够优化训练目标,但与最终目标不一致。原始的 GPT-3 就是非一致模型。类似 GPT-3 的大型语言模型都是基于来自互联网的大量文本数据进行训练,能够生成类似人类的文本,但它们可能并不总是产生符合人类期望的输出。事实上,它们的目标函数是词序列上的概率分布,用来预测序列中的下一个单词是什么。但在实际应用中,这些模型的目的是执行某种形式的有价值的认知工作,并且这些模型的训练方式与期望使用它们的方式之间存在明显的差异。尽管从数学上讲,机器计算词序列的统计分布可能是建模语言的高效选择,但人类其实是通过选择最适合给定情境的文本序列来生成语言,并使用已知的背景知识和常识来辅助这一过程。当语言模型用于需要高度信任或可靠性的应用程序(如对话系统或智能个人助理)时,这可能是一个问题。
chatgpt前世今生
json.load() json.loads() json.dump() json.dumps()的区别
json.load()
、json.loads()
、json.dump()
和 json.dumps()
是 Python 中 json
模块提供的方法,用于处理 JSON 数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。下面是这些方法的具体区别:
json.load()
:- 这个方法用于从文件对象中读取 JSON 数据。
- 它接受一个文件对象作为参数,并将其内容解析为 Python 对象(通常是字典或列表)。
- 使用
json.load()
时,你需要先打开一个文件,并将其文件对象传递给这个方法。
示例:
json.loads()
:- 这个方法用于从字符串中解析 JSON 数据。
- 它接受一个 JSON 格式的字符串作为参数,并将其解析为 Python 对象。
- 与
json.load()
不同,json.loads()
处理的是字符串而不是文件对象。
示例:
json.dump()
:- 这个方法用于将 Python 对象写入文件对象,并将其转换为 JSON 格式的字符串。
- 它接受两个参数:要序列化的 Python 对象和文件对象。
- 使用
json.dump()
时,你需要先打开一个文件,并将其文件对象传递给这个方法。
示例:
json.dumps()
:- 这个方法用于将 Python 对象转换为 JSON 格式的字符串。
- 它接受一个要序列化的 Python 对象作为参数,并返回一个 JSON 格式的字符串。
- 与
json.dump()
不同,json.dumps()
返回的是字符串而不是写入文件。
示例:
总结来说,load
和 loads
是用来解析 JSON 数据的,区别在于 load
从文件对象读取,而 loads
从字符串读取。dump
和 dumps
是用来序列化 Python 对象为 JSON 数据的,区别在于 dump
将数据写入文件对象,而 dumps
返回 JSON 格式的字符串。