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

news2025/2/23 10:30:02

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分钟流畅且连贯的高清视频。看来,大模型要一统天下了!

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

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

相关文章

服务器BMC基础知识总结

前言 因为对硬件方面不太理解,所以打算先从服务器开始学习,也想和大家一起分享一下,有什么不对的地方可以纠正一下哦!谢谢啦!互相学习共同成长~ 1.BMC是什么? 官方解释:BMC全名Baseboard Mana…

java面试课程-SpringIOC部分源码解析

1.SpringIOC的refresh源码解析 核心: 核心使用的是: 需要完成配置类的解析,各种BeanFactoryProcessor的注册。还有写国际化配置的初始化。Web容器的内部构造。 上面几个方法是refresh方法的内容。注意可以与applicationContext里的内容一起…

【Linux从入门到放弃】探究进程如何退出以进程等待的前因后果

🧑‍💻作者: 情话0.0 📝专栏:《Linux从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! 进…

编写动态库

1.创建库.c .h文件 2.编写Makefile文件 3.make之后形成.so文件 4.make output,形成mylib 5.把mylib拷贝到test里面 mv mylib /test 6.编译 gcc main.c -I mylib/include -L mylib/lib -lmymethod形成a.out 但是直接执行会出现以下问题 很显然没有找到动态库 7.解决加载找不…

FIO压测磁盘性能以及需要注意的问题

一、压测类型 1、顺序读(IO):read,bs1M,job数从1开始往上加:2、3、4... 2、顺序写(IO):write,bs1M,job数从1开始往上加:2、3、4... …

基于索尼基于索尼Spresense的眼睛跟随平台中两个模型的对比

1.模型一(现在使用的) 这个模型是一个简单的神经网络,由三个主要组件组成:输入层、一个全连接层(Affine层)、一个Sigmoid激活函数层和一个Binary Cross Entropy损失层。 以下是每个组件的说明: Input 层:这…

2024 COMMUNITY DAY User Group 社区嘉年华 云计算与 AI 技术交融盛会共筑多元智慧未来

亚马逊云科技User Group,深圳 Community Day 活动流程抢先知道! ⏰ 7月7日 🏠 深圳南山区香港中文大学 📣主论坛国际大咖云集,共襄科技盛宴! 🎉三大主题论坛:人工智能、大数据、动…

heic格式转化jpg,手把手教你将heic转换成jpg【办公必备】

一、什么是heic heic格式是一种高效的图片格式,它可以在较小的文件大小下提供高质量的图片。 二、如何打开heic 然而,这种图片因其格式的特殊性,在实际应用中仍存在一些问题:压缩效果可能不够理想,一些老旧的软件和设…

无线领夹麦克风品牌排名更新,手机直播麦克风前十排名!

在自媒体时代,音频设备尤其是麦克风的重要性日益凸显。技术的革新带来了麦克风品类的多样化,满足了从传统录制到现代自媒体创作的广泛需求。音频质量是决定视频作品能否吸引并留住观众的关键因素。在众多麦克风品牌中,挑选一款性能卓越的产品…

一切为了安全丨2024中国应急(消防)品牌巡展武汉站成功召开!

消防品牌巡展武汉站 6月28日,由中国安全产业协会指导,中国安全产业协会应急创新分会、应急救援产业网联合主办,湖北消防协会协办的“一切为了安全”2024年中国应急(消防)品牌巡展-武汉站成功举办。该巡展旨在展示中国应急(消防&am…

【软件测试】单元测试、系统测试、集成测试详解

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、单元测试的概念 单元测试是对软件基本组成单元进行的测试,如函数或一个类的方法…

cesium 聚合

cesium 聚合(下面附有源码) 示例代码 <html lang="en"><head><!-- Use correct character set. -->

AI工具哪里找?这个ai导航网站绝对是你不可错过的宝藏

这两年来&#xff0c;人工智能技术飞速发展并且已经渗透到我们生活的方方面面&#xff0c;从简单的日常任务到复杂的专业领域&#xff0c;AI工具的应用越来越广泛。 无论是办公一族还是设计师&#xff0c;教师等&#xff0c;都开始利用AI&#xff0c;提高自己的工作效率。 如…

QChartView显示实时更新的温度曲线图(动态曲线图)

文章目录 参考图1. 项目结构2. CMakeLists.txt3. main.cpp4. TemperatureSeries.qml5. main.qml6. 说明参考博客参考图 要在Qt QML中使用QChartView显示实时更新的温度曲线图,我们需要使用Qt Charts模块和一些QML组件。下面是一个完整的示例代码,以及详细说明每个部分的作用。…

代码生成器使用指南,JeecgBoot低代码平台

JeecgBoot 提供强大的代码生成器&#xff0c;让前后端代码一键生成&#xff0c;实现低代码开发。支持单表、树列表、一对多、一对一等数据模型&#xff0c;增删改查功能一键生成&#xff0c;菜单配置直接使用。 同时提供强大模板机制&#xff0c;支持自定义模板&#xff0c;目…

基于Canvas的Html5多时区动态时钟实战

目录 前言 一、关于Canvas技术 1、Canvas是什么 2、Canvas的属性及渲染特性 二、Canvas动态多时区展示 1、新建html页面 2、创建Canvas对象 3、绘制所有的时钟 总结 前言 出差旅行相信大家一定会住酒店&#xff0c;大家在酒店的前台进行预订的时候&#xff0c;是不是都…

简单实现Anaconda/Miniforge虚拟环境的克隆和迁移

简单实现Anaconda/Miniforge虚拟环境的克隆和迁移 一、问题描述一、方式一&#xff1a;使用命令克隆二、方式二&#xff1a;直接复制粘贴 欢迎学习交流&#xff01; 邮箱&#xff1a; z…1…6.com 网站&#xff1a; https://zephyrhours.github.io/ 一、问题描述 使用Anaconda…

【Node-RED 4.0.2】4.0版本新增特性(官方版)

二、重要功能 *1.时间戳格式改进 过去&#xff0c;node-red 只提供了 最原始的 timestamp 的格式&#xff08;1970-01-01 ~ now&#xff09; 但是现在&#xff0c;额外增加了 2 种格式&#xff1a; ISO 8601 -A COMMON FORMAT&#xff08;YYYY-MM-DDTHH:mm:ss:sssZ&#xff…

Cocos制作抖音小游戏接入侧边栏复访接口实例

本篇文章主要讲解&#xff0c;使用cocos接入抖音小游戏侧边栏接口的实例教程。 日期&#xff1a;2024年7月1日 作者&#xff1a;任聪聪 教程实例&#xff1a;https://download.csdn.net/download/hj960511/89509196 下载后可直接导入运行 上传游戏后抖音预审不通过 注意&#x…

如何找BMS算法、BMS软件的实习

之前一直忙&#xff0c;好久没有更新了&#xff0c;今天就来写一篇文章来介绍如何找BMS方向的实习&#xff0c;以及需要具备哪些条件&#xff0c;我的实习经历都是在读研阶段找的&#xff0c;读研期间两段的实习经历再加上最高影响因子9.4分的论文&#xff0c;我的秋招可以说是…