首页 > 其他分享 >从零开始实现大语言模型(一):概述

从零开始实现大语言模型(一):概述

时间:2024-07-02 23:02:47浏览次数:25  
标签:语言 训练 模型 从零开始 概述 GPT 文本 数据

1. 前言

大家好,我是何睿智。我现在在做大语言模型相关工作,我用业余时间写一个专栏,给大家讲讲如何从零开始实现大语言模型。

从零开始实现大语言模型是了解其原理及领域大语言模型实现路径的最好方法,没有之一。已有研究证明,为特定任务定制或使用领域数据训练的大语言模型能在领域相关的评价指标上超过ChatGPT这样的通用大语言模型。

本专栏将从零开始讲解大语言模型理论原理step-by-step,提供一整套工业级文本数据处理,大语言模型构建、预训练、监督微调及指令微调,并行计算与分布式训练代码,并且从零开始解释实现代码line-by-line。

2. 大语言模型的模型结构

2017年,文章Attention is all you need提出了一种用于机器翻译的sequence-to-sequence架构模型Transformer。Transformer包含一个编码器(encoder)和一个解码器(decoder),编码器提取输入文本中的上下文信息,将其转变成多个向量,并传递给解码器。解码器接收编码器生成的向量,生成输出序列。

2018年,文章BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding使用 [MASK] 单词预测任务和句子前后顺序预测任务预训练Transformer模型的编码器,预训练后的模型被称为BERT(Bidirectional Encoder Representations from Transformers)。BERT模型的编码器架构及训练策略,使其非常擅长情感预测、文档分类等文本分类任务。

句子前后顺序预测任务,最初是预测两句话是否在原始预训练语料中相邻,后续改进为原始预训练语料中的两个相邻句子是否被交换顺序。

同年,OpenAI的文章Improving Language Understanding by Generative Pre-Training通过生成式预训练任务(根据一段话的前文预测后文)训练Transformer模型的解码器,预训练后的模型被称为GPT(Generative Pretrained Transformers)。GPT模型的解码器架构及训练策略,使其非常擅长机器翻译、文本摘要、编写计算机代码等文本生成任务。

图一

Transformer、BERT及上述GPT模型网络结构核心是自注意力机制(self-attention)。自注意力机制可以让模型判断输入文本序列中不同token之间的相关性,使模型能够捕获输入文本数据中长距离依赖关系及上下文关系,因而比传统基于RNN等结构的模型具备更强的自然语言理解能力,生成的内容更加连贯且与上下文相关性更强。

token是指对文本分割处理后得到的最小单位,也是模型处理文本时的基本单元。训练数据处理时常提到的tokenization,即把自然语言文本处理成连续的token。Token可以是一个单词,一个字符,一个词组等等,取决于对训练数据做tokenization时采用的方法。

相比较于上面OpenAI的文章介绍的GPT-1模型,GPT-3模型结构没有做任何调整。GPT-3可以视为GPT-1模型的拓展,其模型层数更多,Embedding向量维度更高,参数量更大,并且使用了更大的预训练数据集。ChatGPT是通过OpenAI的InstructGPT论文中的方法在一个大的指令数据集(instruction dataset)上微调GPT-3而产生的。Meta的LLaMA等绝大部分大语言模型结构与GPT基本相同或仅仅做了非常微小的修改。

与Transformer模型相比,大语言模型GPT的结构非常简单,本质上它只是Transformer模型的解码器。但是GPT-3比原始Transformer模型解码器要大的多,原始Transformer模型解码器仅包含6个Transformer Block,但是GPT-3包含96个Transformer Block,共1750亿参数。GPT生成文本时每次仅预测下一个token,因此它也被视为一种自回归模型(autoregressive model)。

图二

尽管GPT只相当于Transformer模型的解码器,而不是像Transformer那样明确被用于解决机器翻译任务的sequence-to-sequence模型,且训练模型的下一个token预测任务也不是专门针对机器翻译的任务,但是它也能够执行机器翻译任务,且大语言模型机器翻译效果比一般机器翻译模型都相对好。

大语言模型这种能够执行没有被明确训练的能力被称为“涌现(emerging property)”。涌现是一种没有使用相同任务明确训练,而是模型在学习了大量各种各样语言的语料之后自然而然出现的能力。大语言模型中的这种涌现现象证明了其具备非常强大的能力,部分专家学者认为其具备一定的通用人工智能雏形,截止目前大家已经发现并认可了大语言模型的广阔应用前景。

3. 大语言模型的训练方法

如下图所示,大语言模型的训练方法通常包含预训练(pretraining)和微调(finetuning)。

预训练是指使用大量无标签的、多样化的文本数据(raw text),通过下一个token预测任务(next token prediction task)训练模型,使模型能够了解自然语言文本中的语法及知识。预训练后的模型被称为基础模型(base model or foundational model),如GPT-3(ChatGPT对应的基础模型)。基础模型一般具有比较强的文本补全(text completion)及小样本学习(few-shot learning)能力。

文本补全是指模型能够根据用户输入的上文,完成相应的下文。小样本学习是指不用大量训练数据训练或微调模型,而是提供几个具体任务的示例,模型也能够输出比较不错的结果。

可以使用针对特定任务或具体领域的小数据集微调模型参数,使基础模型具备如ChatGPT这样的对话能力。最流行的两类微调大语言模型的方法为指令微调(instruction-finetuning)和监督微调(finetuning for classification tasks)。指令微调是指使用如下所示的带标签的(指令-答案)数据集继续训练基础模型,监督微调是指使用(文本-类别标签)这样的带标签数据集继续训练基础模型。

{
    "instruction": "请把下面的中文翻译成英文:\n我爱你。",
    "answer": "I love you."
}

图三

“raw"的意思为"原始的”,是指用于预训练模型的数据不包含任何使用监督学习方法训练传统机器学习模型或深度学习模型时用到的标签信息。预训练大语言模型的方法被称为自监督学习(self-supervised learning),预训练模型的标签数据使用一定的规则从输入文本中自动生成。

使用raw text训练模型并不意味着不对用于预训练的文本数据做任何处理。如在预训练之前,通常会使用一系列文本预处理方法对文本数据进行过滤。已有研究表明,预训练大语言模型的文本质量越高,则模型能力越强。

4. 大语言模型的训练数据

预训练GPT-3的数据来自5个不同的数据集,共包含3000亿tokens。其中CommonCrawl (filtered)是采用一定规则从CommonCrawl数据集过滤得到的一个质量相对高的子集,WebText2是Reddit网站上获得3个及以上点赞的帖子中的外部链接所包含的网页文本(外部链接指向其他网页,WebText2收集了这些链接指向网页的文本内容),Books1可能来自古腾堡计划(Project Gutenberg,古腾堡计划是一个数字化图书馆,致力于向公众提供免费的电子书),Books2可能来自Libgen(Libgen是一个知名的免费图书共享平台,用户可以通过该平台获取各种电子书、学术论文和期刊等资源),Wikipedia数据集由英文维基百科组成。

数据集名称描述token数量在训练数据集中的比例
CommonCrawl (filtered)Web crawl data410 billion60%
WebText2Web crawl data19 billion22%
Books1Internet-based book corpus12 billion8%
Books2Internet-based book corpus55 billion8%
WikipediaHigh-quality text3 billion3%

GPT-3之后的大语言模型进一步拓展了训练模型的数据集,如Meta的LLaMA还使用了Arxiv网站中的论文数据集(92GB)及StackExchange网站中与代码相关的问答数据集(78GB)。国内的大语言模型也针对性地增加了训练集中的中文训练数据占比。

GPT-3论文作者没有公开他们用到的训练数据集,但是有个类似的开源数据集The Pile,该数据集的信息可以点击链接查看详情:https://pile.eleuther.ai/

训练GPT-3时并没有使用上表提到的5个数据集中的全部数据,而是从每个数据集中抽取了一部分数据,共同组成了训练模型的包含3000亿tokens的训练数据集。抽取数据的原则是:质量越高的数据集采样比例越高,质量越低的数据集采样比例越低。如CommonCrawl数据集共包含4100亿tokens,但是只从中抽取了1800亿tokens,WebText2虽然只包含190亿tokens,但是从中共抽取了660亿tokens,相当于将WebText2数据集重复了3.47遍。

5. 大语言模型的实现流程

从零开始实现大语言的流程共三阶段:构建大语言模型、预训练大语言模型、微调大语言模型。

图四

大语言模型构建部分将详细介绍文本数据处理方法,构建训练大语言模型的DatasetDataLoader;从零开始一步步解释并实现简单自注意力机制(simplified self-attention)、缩放点积注意力机制(scaled dot-product attention)、因果注意力机制(causal attention)、多头注意力机制(multi-head attention);并最终构建出OpenAI的GPT系列大语言模型GPTModel

预训练部分将介绍并行计算与分布式机器学习方法原理,实现使用无标签文本数据训练大语言模型的方法,以及介绍大语言模型效果评估的基本方法。使用GPT-3同量级数据集预训练大语言模型的计算代价非常大,如果换算成相应云计算资源价值,预训练GPT-3大约需耗费460万美元。因此,该部分同时会介绍使用构建好的大语言模型加载开源大语言模型(如GPT-2)权重的方法。

虽然训练GPT-3的计算资源换算成相应云计算资源价值约460万美元,但如果已经具备一个足够大的GPU计算集群,训练GPT-3消耗的电费远远不需要460万美元。

第三阶段分别使用监督微调及指令微调方法,微调基础模型参数,使大语言模型具备文本分类及回答问题能力。

6. 结束语

从零开始实现大语言模型系列专栏旨在详细解释大语言模型的理论原理,并提供一套工业级实践代码。本文从一个高的视角概述了大语言模型的模型结构、训练方法及训练数据,并且介绍了从零开始实现大语言模型的流程。

大语言模型具备强大的自然语言理解及生成能力,短短一年时间,自然语言处理领域已经翻天覆地。实践证明,在大量无标签的自然语言文本上使用简单的生成式预训练任务能够产生强大到不可思议的模型,在大量无标签视频数据上使用生成式预训练任务是否也能够产生非常惊艳的模型呢?

2024年2月16日,OpenAI发布了首个视频生成模型Sora,能生成长达1分钟流畅且连贯的高清视频。看来,大模型要一统天下了!

标签:语言,训练,模型,从零开始,概述,GPT,文本,数据
From: https://blog.csdn.net/qq_24178985/article/details/140137875

相关文章

  • 大模型技术方向:基于星火大模型的群聊对话分角色要素提取挑战赛笔记
    AI夏令营#Datawhale#夏令营基于星火大模型的群聊对话分角色要素提取挑战赛举办方:科大讯飞股份有限公司一、赛事背景在当今数字化时代,企业积累了丰富的对话数据,这些数据不仅是客户与企业之间交流的记录,更是隐藏着宝贵信息的宝库。在这个背景下,群聊对话分角色要素提取成为了企......
  • 相比GPT-4o更懂你的情绪,blsp-emo模型最新落地经验分享
    BLSP-Emo是一个中英双语共情语音对话模型,由通义实验室与中国科学院自动化研究所联合开源,旨在赋予大语言模型理解语音输入中的语义与情感,并生成共情回复的能力。BLSP-Emo的模型架构通过一个模态适配器将语音编码器Whisper和大语言模型Qwen-7B-Chat连接起来,实现了更好的语义和情......
  • 从零开始学习Java的第五天
    掌握数组的定义数组:用来存储一批同种类型数据的容器遇到批量数据的存储和操作时,用数组比用变量更适合了解静态初始化数组数据类型[] 数组名=new数据类型[]{元素1,元素2,元素3,......}简化写法:数据类型[] 数组名={元素1,元素2,元素3,......}数据类型[] ......
  • 从零开始学习Java的第三天
    掌握switch语句的用法switch语句具有穿透性,所以语句间要加上break循环语句的组成:初始化语句:循环开始时候什么样条件判断语句:循环是否能一直执行下去循环体语句:循环反复执行的事情条件控制语句:控制循环是否能执行下去循环结构对应的语法:初始化语句:这里可以是一条或多条......
  • ros - slam - microros - 两轮差速模型运动学 - 运动学正解
    上一节了解了两轮差速运动学,本节我们线进一步的了解两轮差速正运动学的推导过程,并利用两轮差速运动学正解,来完成对小车的实时速度计算。 一、正运动学解推导两轮差速机器人是一种常见的移动机器人类型,由两个轮子和一个中心点组成。我们可以通过控制每个轮子的转速来实现移动,并......
  • 开源语音转文本 Speech-to-Text 大模型实战之Whisper篇
    前言随着深度学习技术的不断发展,语音转文本(Speech-to-Text,STT)技术取得了显著的进步。开源社区涌现了许多高效的STT大模型,为开发者提供了强大的工具。本文将以OpenAI推出的Whisper模型为例,详细介绍如何使用该模型进行语音转文本的实战应用,从模型简介、环境搭建、数据准备到模型......
  • ros - slam - microros - 两轮差速模型运动学介绍
    本节我们来了解下两轮差速运动学。一、两轮差速运动学模型两轮差速模型指机器人底盘由两个驱动轮和若干支撑轮构成的底盘模型,像turtlebot和开源机器人fishbot都是两轮差速模型。 两轮差速模型通过两个驱动轮可以通过不同转速和转向,使得机器人的达到某个特定的角速度和线速度......
  • Transformer模型学习
    Transformer模型是深度学习领域的一种创新架构,尤其在自然语言处理(NLP)任务中表现出色。它是由Vaswani等人在2017年的论文《AttentionisAllYouNeed》中首次提出的。以下是对Transformer模型的详细介绍:Transformer的起源和重要性Transformer模型的提出是为了解决传统循环......
  • Transformer模型
    Transformer模型是深度学习领域的一种创新架构,尤其在自然语言处理(NLP)任务中表现出色。它是由Vaswani等人在2017年的论文《AttentionisAllYouNeed》中首次提出的。以下是对Transformer模型的详细介绍:Transformer的起源和重要性Transformer模型的提出是为了解决传统循环......
  • 【基于星火大模型的群聊对话分角色要素提取BaseLine学习笔记】
    @目录项目背景项目任务我的思路Baseline详解数据抽取完整代码星火认知大模型Spark3.5Max的URL值,其他版本大模型URL值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看星火认知大模型调用秘钥信息,请前往讯飞开放平台控制台(https://console.xfyun.cn/services/bm35)查看星火......