大语言模型研究进展综述

news2024/11/26 12:51:29

1、历史

       自20世纪50年代图灵测试被提出以来,研究人员一直在探索和开发能够理解并掌握语言的人工智能技术。

      作为重要的研究方向之一,语言模型得到了学术界的广泛研究,从早期的统计语言模型和神经语言模型开始,发展到基于Transformer的预训练语言模型。

2、现状

       近年来,研究者们发现通过扩大预训练语言模型的参数量和数据量,大语言模型(Large Language Model)能够在效果显著提升的同时,展示出许多小模型不具备的特殊能力(如上下文学习能力、逐步推理能力等)。

       最近,作为代表性的大语言模型应用ChatGPT展现出了超强的人机对话能力任务求解能力,对于整个AI研究社区带来了重大影响。

3、鸟瞰

       3.1 大语言模型的定义

       通常来说,大语言模型指的是那些在大规模文本语料上训练、包含百亿级别(或更多)参数的语言模型,例如GPT-3,PaLM,LLaMA等。

       3.2  大语言模型与小模型的区别

       目前的大语言模型采用与小模型类似的Transformer架构和预训练目标(如 Language Modeling),与小模型的主要区别在于增加模型大小、训练数据和计算资源。

        3.3 大语言模型具备“涌现能力

       大语言模型的表现往往遵循扩展法则,但是对于某些能力,只有当语言模型规模达到某一程度才会显现,这些能力被称为“涌现能力”,代表性的涌现能力包括上下文学习、指令遵循、逐步推理等。

         3.4 大语言模型取得成功的原因

        目前,大语言模型取得如此巨大的成就,我们总结了五方面原因:

               1)模型、数据和计算资源的扩展;

               2)高效稳定的训练手段;

               3)语言模型能力诱导;

               4)对齐训练,将大语言模型与人类偏好对齐;

               5)工具使用(潜在发展方向)。

4、相关资源

图1 大语言模型发展时间线

       4.1 开发大语言模型的公开可用资源

        为了帮助大家速览大规模语言模型的发展进程,概要了解模型的训练需求以及总结有助于训练的可用资源。我们简要总结了可以用于开发大语言模型的公开可用资源,包括模型检查点(model checkpoint)或公开接口(API),训练语料库以及代码库。

        4.2  检查点的模型(model checkpoint)

       对于公开检查点的模型,我们根据模型参数量分成两大类,分别是百亿(10B)参数到千亿(100B)参数模型和大于千亿(100B)参数模型。在每一部分介绍时,我们根据模型的预训练语料、任务,或者评测给出研究不同能力时的推荐模型,并且根据模型原论文罗列了预训练硬件配置。

        4.3  公开接口(API)

        对于公开接口,我们重点介绍了OpenAI的GPT系列接口,包括GPT-3系列到当前的GPT-4系列,并简要介绍了部分接口之间的关系。

        4.4  训练语料库

        对于训练语料库,我们简要总结了一列常用于训练大语言模型的公开数据集。我们按照内容将这些数据集分成了六类:书籍类、CommonCrawl类、Reddit link类、维基百科类、代码类和其他。每一类我们都介绍了数据集的内容、大小以及被用于训练的模型。

        4.5  代码库

        对于代码库,我们搜集了一些用于训练的代码库,包括常用模型库和并行算法库。

        项目访问地址:https://github.com/RUCAIBox/LLMSurvey

5、预训练技术

        预训练是大语言模型能力的基础。当语言模型的参数量扩展到超千亿级别时,从头预训练一个大语言模型就成为一件十分困难且有挑战的事情。

(1)在数据层面,如何收集尽可能多的高质量语料对预训练模型的效果十分关键。本章从预训练语料的收集出发,主要探讨了数据的多种来源(如对话、代码等)和预处理(清洗与编码),并分析了预训练数据数量、质量、多样性等方面对模型效果的影响。

(2)在模型层面,最引人关注的问题之一即是,为什么大语言模型往往采用 Decoder-Only 架构?本文从 Transformer 做语言模型的主干架构、具体模块和预训练任务三方面向读者们介绍如今大模型的常用方案,并在最后结合文献讨论大家选用 Decoder-Only 架构的原因。

(3)在训练层面,大参数量的模型非常难以优化。研究人员付出众多努力,提出了若干增加训练稳定性,及提升训练效率的方案。本章对 3D 并行、ZeRO 等被集成于 DeepSpeed 等代码库的相关训练技术进行归纳整理,并在最后对如何稳定、高效地预训练一个大语言模型给出建议。

6、微调技术

       预训练之后,“适配微调”(adaptation tuning)可以进一步增强大语言模型能力并满足人类偏好。本章主要介绍了两种适配微调技术:指令微调与对齐微调。

图2 指令格式实例示意图

      指令微调通过收集指令格式的实例(图2)来微调大模型,大大增强了模型遵循人类指令的能力,能够让模型更好地泛化到未知任务。我们展示了两种收集指令格式实例的方法,并讨论了任务数量、实例数量、实例设计等因素对指令微调效果的影响;同时,我们也总结了指令微调过程中常见的数据集合和训练细节,方便研究者训练自己的模型。

图3 基于人类反馈的强化学习工作流程

       对齐微调通过收集人类反馈数据,利用强化学习进一步微调大模型,使模型与人类对齐,更加符合人类的偏好。我们首先讨论了三种常见的对齐标准:有用性、诚实性和无害性,接着展示了三种人类反馈收集方式,最后介绍了基于人类反馈的强化学习流程(图3)。

7、使用技术

图4 两种使用技术上下文学习(ICL)和思维链提示(CoT)的对比

       本章介绍了大模型完成训练之后的使用方法。其中的代表性技术是上下文学习,它以自然语言文本的形式给大模型提供任务描述和/或任务示例。我们重点总结了如何设计有效的任务示例来增强大模型通过上下文学习完成下游任务的效果,包括示例的选择、格式以及顺序。我们还从预训练和推理两个阶段讨论了大模型上下文学习能力的来源。

        此外,思维链提示也受到广泛关注,它的做法是在提示中添加中间推理步骤来增强大模型在推理任务上的性能。根据提示中是否存在样例,思维链提示的使用场景可以分为少样本和零样本两种情况。我们还讨论了思维链提示的适用场景以及大模型思维链推理能力的来源。

8、评估

为了评估大语言模型的有效性和优越性,研究者在大量任务和评测基准上进行了评测与分析。我们从三个角度总结梳理了大语言模型的相关能力评估。

对于大模型的基础评测,我们主要关注了三类任务,包括语言生成任务知识利用任务复杂推理任务。总体来看,大语言模型在各类基础任务中取得了令人瞩目的效果。但与此同时,大语言模型在一些方面也存在亟待解决的问题,包括可控性、幻觉、知识实时性、一致性等等。

除了上述基础任务外,大模型还表现出了很多高级能力。我们着重讨论了人类对齐、外界环境交互、工具操作三大类高级能力及其对应的评估方法。这三种能力极大地丰富了语言模型的应用场景,使得语言模型能做出符合人类价值观和偏好的行为,对现实世界产生作用,以及利用工具扩展能力边界。

接下来,我们介绍了面向大语言模型的现有综合评测基准以及相关实证分析。研究者提出了许多综合评测基准,用于全面的评测和比较大语言模型。同时,另一大类工作着重于对大语言模型通用能力以及专业领域应用能力的分析。

9、总结

该综述文章系统回顾了大语言模型的最新进展,介绍了重要概念与相关技术,最后总结了大语言模型的若干挑战与未来研究方向:

(1)大模型相关的理论和本质

(2)更优的模型架构;

(3)更有效的训练方法;

(4)更高效的使用策略;

(5)安全性与一致性;

(6)应用与生态。

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

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

相关文章

EasyHttp框架的使用

项目的集成 // JitPack 远程仓库:https://jitpack.io maven { url https://jitpack.io } // 网络请求框架:https://github.com/getActivity/EasyHttp implementation com.github.getActivity:EasyHttp:12.5 // OkHttp 框架:https://github.c…

ssm+vue的疫情高校师生外出请假管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的疫情高校师生外出请假管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三…

2023版Pycharm关闭一直显示closing project,正在关闭项目

点击 帮助 下的 查找操作 英文版为 Help 下的 Find Action 输入 Registry 禁用 ide.await.scope.completion 即可 PS:按 Ctrl F 输入可以快速检索

快速实现一个企业级域名 SSL 证书有效期监控巡检系统

Why 现在对于企业来说,HTTPS 已经不是可选项,已经成为一个必选项。HTTPS 协议采用 SSL 协议,采用公开密钥的技术,提供了一套 TCP/IP 传输层数据加密的机制。SSL 证书是一种遵守 SSL 协议的服务器数字证书,一般是由权威…

《golang设计模式》第三部分·行为型模式-04-迭代器模式(Iterator)

文章目录 1. 概念1.1 角色1.2 类图 2. 代码示例2.1 需求2.2 代码2.3 类图 1. 概念 迭代器(Iterator)能够在不暴露聚合体内部表示的情况下,向客户端提供遍历聚合元素的方法。 1.1 角色 InterfaceAggregate(抽象聚合)…

图像切分:将一张长图片切分为指定长宽的多张图片

1.需求 比如有一张很长的图片其大小为宽度779,高度为122552,那我想把图片切分为779乘以1280的格式。 步骤如下: 使用图像处理库(如PIL或OpenCV)加载原始图片。确定子图片的宽度和高度。计算原始图片的宽度和高度&am…

6、Python控制流:if语句、for循环、while循环、循环控制语句

文章目录 Python控制流:if语句、for循环、while循环、循环控制语句if语句示例:for循环示例:while循环示例:循环控制语句示例:最佳实践Python控制流:if语句、for循环、while循环、循环控制语句 控制流是编程中的基础概念,它允许我们根据不同的条件执行不同的代码块,或者…

day3作业

自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #include <io…

哈尔滨招聘网站哪个好

哈尔滨招聘网站 吉鹿力招聘网 比较好&#xff0c;我们都知道在现代社会中&#xff0c;互联网已经成为了人们获取信息的主要渠道之一。在寻找工作方面也不例外。吉鹿力招聘网是哈尔滨找工作的求职招聘网站。 登录 吉鹿力招聘网 “注册账号”&#xff0c;然后输入个人基本信息&a…

Android-JobService

JobService 这里写目录标题 JobService一、API详解1 onStartJob2 onStopJob 二、onStartJob | onStopJob 返回值case 1case 2case 3 ref: 深入理解JobScheduler与JobService的使用 - 掘金 (juejin.cn) (28条消息) JobService的使用介绍_TechMerger的博客-CSDN博客 (28条消息) J…

使用 Threejs 从基础开始构建 3D 地球

需求 threejs学习-3D 地球 实现&#xff1a; 1、使用粒子效果模拟宇宙星空 2、贴图、模型等资源的加载 3、加载资源的监听 4、效果合成器 EffectComposer 的初级使用 5、在地球上设置坐标以及坐标涟漪动画 6、标点间建立飞线 7、简单动画建议先浏览一遍git地址上代码&#xff…

Java2 - 数据结构

5 数据类型 5.1 整数类型 在Java中&#xff0c;数据类型用于定义变量或表达式可以存储的数据的类型。Java的数据类型可分为两大类&#xff1a;基本数据类型和引用数据类型。 byte&#xff0c;字节 【1字节】表示范围&#xff1a;-128 ~ 127 即&#xff1a;-2^7 ~ 2^7 -1 sho…

LeetCode | 面试题 02.02. 返回倒数第 k 个节点

LeetCode | 面试题 02.02. 返回倒数第 k 个节点 OJ链接 思路&#xff1a;定义两个快慢指针&#xff0c;让快指针先提前走k个节点&#xff0c;然后再让慢结点和快结点一起走&#xff0c;当快指针 NULL时&#xff0c;慢指针就是倒数第k个节点 代码如下&#xff1a; int kthT…

ARMday02(汇编语法、汇编指令)

汇编语法 汇编文件中的内容 1.伪操作&#xff1a;在汇编程序中不占用存储空间&#xff0c;但是可以在程序编译时起到引导和标识作用 .text .global .glbal .if .else .endif .data .word.... 2.汇编指令&#xff1a;每一条汇编指令都用来标识一个机器码&#xff0c;让计算机做…

windows 下 QT Android 环境搭建(QGC 4.2.x + Qt 5.15.2)

文章目录 1. QT Creator 环境搭建2. JDK1&#xff09;官网途径&#xff1a;2) 360 安装&#xff1a;配置 3. SDK1) 通过 Android Studio2&#xff09;QT 配置中安装 姊妹篇&#xff1a; win10下新版QGC地面站环境搭建全面攻略&#xff08;v4.x.x QGroundControl地面站搭建&…

c-CoSe2-CoN助力Zn-空气电池

硒化钴&#xff08;CoSe2&#xff09;的相变可有效调节其固有的电催化活性&#xff0c;但提高CoSe2的电导率和催化活性/稳定性还是一个挑战。异质结构工程可优化界面性能&#xff0c;促进CoSe2基催化剂上氧电催化的动力学。 基于此&#xff0c;黑龙江大学邹金龙教授等人报道了…

蓝桥云课--1014 第 1 场算法双周赛

2-数树数【算法赛】&#xff08;找规律&#xff09; 一、题目要求 二、思路 由此可以推导出来&#xff0c;当s[i]L时&#xff0c;下一个编号当前编号*2-1&#xff1b;当s[i]R时&#xff0c;下一个编号当前编号*2&#xff1b; 三、代码 #include<bits/stdc.h> #define…

Matlab论文插图绘制模板第124期—三维气泡图

在之前的文章中&#xff0c;分享了很多Matlab气泡图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下三维气泡图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需要的朋友可以关注同…

C语言之认识柔性数组(flexible array)

在学习之前&#xff0c;我们首先要了解柔性数组是放在结构体当中的&#xff0c;知道这一点&#xff0c;我们就开始今天的学习吧&#xff01; 1.柔性数组的声明 在C99中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员 这里的结构是结构…

【C语言初学者周冲刺计划】4.3根据输入的行数输出一下图案

目录 1题目&#xff1a; 2解题思路&#xff1a; 3代码&#xff1a; 4运行代码&#xff1a; 5总结&#xff1a; 1题目&#xff1a; 2解题思路&#xff1a; 首先分析题干要求&#xff0c;然后找规律&#xff0c;发现前面空格与行数的规律和A,B递推的规律&#xff0c;然后写代…