首页 > 其他分享 >AI 大模型训练中,通常会采用哪些方法?(输入篇)

AI 大模型训练中,通常会采用哪些方法?(输入篇)

时间:2024-06-17 22:32:12浏览次数:24  
标签:训练 哪些 AI 模型 tokens token Norm 输入

某种程度来说大模型训练的核心算法就是300到400行代码,如果真正理解了并不难。下面我将带大家分析常规大模型训练有几个阶段以及在训练中一般会用到哪些方法。

图片

由上图可以看出,大模型训练主要有四个阶段:预训练、有监督微调、奖励建模、强化学习。开始的第一个阶段是预训练阶段。这个阶段在这个图中有点特殊,因为这个图没有按比例缩放。实际上预训练消耗的时间占据了整个训练pipeline的99%。

因此,这个阶段就是我们在超级计算机中使用数千个GPU以及数月的训练来处理互联网规模数据集的地方。

其他三个阶段是微调阶段,更多地遵循少量GPU和数小时或数天的路线。

那么首先让我们来看看预训练阶段用到了哪些方法。

1.数据分布

首先做预训练需要收集大量数据,那么数据分布大致需要满足什么条件呢?

图片

由上图可以看出,这是Meta发布了关于Llama基础模型训练时候的数据分布。大约1.4T的tokens,包含github、Wikeipedia等数据。

我们都知道大模型需要大量的高质量的训练数据,在目前这个Transformer为主导的背景下,算法其实差不多都固化了。市面上有关大模型的公司,投入人力物力最大的地方除了算力就是数据这一块了。如何高效获取数据、清洗数据、标注数据、质检数据以及如何平衡各类别数据占比等等问题是否解决,决定了这个大模型是否work。

数据问题解决后,接下来面对的问题是:机器只知道01二进制,如何把这些数据转化成机器能够看懂的语言?

2.标记化(tokenization)

实际训练这些数据之前,我们需要再经过一个预处理步骤,即标记化(tokenization)。

图片

如上图所示tokenization分为两个阶段,第一阶段将原始文本转化成tokens,请注意并不是说一个单词就是一个token,这与你采用的tokenization算法相关。第二阶段,将tokenization之后的tokens,去词表中查找对应的ids,输出得到一个很长的整数列表。

举个例子,下面我以GPT2为例,展示如何使用tiktoken这个python包来实现tokenization。

代码:

import tiktoken
input = "The GPT family of models process text using tokens, which are commonsequences of characters found in text. The models understand thestatistical relationships between these tokens, and excel at producingthe next token in asequence of tokens.You can use the tool below to understand how a piece of text would betokenized by the API, and the total count of tokens in that piece oftext."
enc = tiktoken.encoding_for_model("gpt2")

enc_output =  enc.encode(input)
print("输入文字:"+str(input))
print("编码后的token:"+str(enc_output))
for token in enc_output:
    print("将token:"+str(token)+" 变成文本:"+str(enc.decode_single_token_bytes(token)))

#输入文字:The GPT family of models process text using tokens, which are commonsequences of characters found in text. The models understand thestatistical relationships between these tokens, and excel at producingthe next token in asequence of tokens.You can use the tool below to understand how a piece of text would betokenized by the API, and the total count of tokens in that piece oftext.
#编码后的token:[464, 402, 11571, 1641, 286, 4981, 1429, 2420, 1262, 16326, 11, 543, 389, 2219, 3107, 3007, 286, 3435, 1043, 287, 2420, 13, 383, 4981, 1833, 262, 14269, 19929, 6958, 1022, 777, 16326, 11, 290, 27336, 379, 9194, 1169, 1306, 11241, 287, 257, 43167, 286, 16326, 13, 1639, 460, 779, 262, 2891, 2174, 284, 1833, 703, 257, 3704, 286, 2420, 561, 731, 4233, 1143, 416, 262, 7824, 11, 290, 262, 2472, 954, 286, 16326, 287, 326, 3704, 286, 5239, 13]

上面说的是GPT2的tokenization,GPT-3.5和GPT-4 等较新的模型使用与以前的模型不同的tokenization,并且将为相同的输入文本生成不同的tokens。

如果你想体验GPT-3.5和GPT-4的tokenization,只需更换成如下代码即可。

enc = tiktoken.encoding_for_model("cl100k_base") 

3.嵌入化(embedding)

介绍embedding时,首先要弄明白几个名词:

  • dim:embedding后的向量长度
  • vocab_size:词表的长度

通过2.tokenization编码后得到tokens:[464, 402, 11571, …,13],共计79个数字。

通过embedding层,即权重为[vocab_size, dim]的矩阵。

所以我们的 [79x1] tokens通过embedding层,输出是 [79x4096],即79个长度为4096的向量(每个token一个)

代码实现如下:

在这里插入图片描述

4.batch思想

图片

我们将embedding后的数组输入Transformer,不可能全部一次性输入,需要用batch思想分批导入。

在此批量大小是B,T是最大上下文长度。

在上面这个图中,长度T只有10,实际工作这可能是2000、4000 等等,在llama3中,T可达到8192。

除此之外,图中也提到<|endoftext|> 这样一个特殊字符。在GPT-2中,它表示文本的结束。在llama3中,就不用<|endoftext|> ,采用<|begin_of_text|>,<|end_of_text|>等特殊字符。

5.归一化(Normalization)

输出embedding后,我们还需做归一化。做归一化的原因有很多:1、同一量纲;2、加速收敛;3、提高模型性能等等。很多解释都是实验结果导向,实验做好了,自然有很多故事来解释它。下面我们来解释大模型训练中常用到的一些归一化方法。

首先需要理解LayerNorm

Layer Normalization (LayerNorm) 是一种归一化技术,常用于深度学习模型中,特别是在 Transformer 模型中。

与 Batch Normalization 不同,Layer Normalization 是在特征维度上进行标准化的,而不是在数据批次维度上。

Layer normalization 的计算可以分为两步。

(1)计算均值和方差。

在本文章的例子中,“The”这个token可以表示成一个4096维度的向量。需计算这个向量中所有元素的均值与方差。

(2)标准化和重新缩放

利用(1)中计算得到的均值与方差,将该向量标准化。并且设置两个可学习的参数,重新缩放和偏移。

总结一句话:LayerNorm就是将每个token对应向量的数据分布通过线性变换转化成正态分布。

代码如下:

在这里插入图片描述

RMS Norm

RMS Norm是LayerNorm的一种变体,LLaMA最新开源的LLaMA3也使用到了RMS Norm。

相比普通正则化,它的计算效率更高,并且原论文的实验结果显示这种简化并没有对模型的训练速度和性能产生明显影响。

图片

具体RMS Norm计算过程如上所示,我们使用RMS Norm对embedding输出进行归一化,计算公式如下。

其中为输入,如果dim=4096,即i=0,1,2…,4095。

为输出,同理,i=0,1,2…,4095:

图片

RMS Norm代码实现如下:

def rms_norm(tensor, norm_weights):
    return (tensor * torch.rsqrt(tensor.pow(2).mean(-1, keepdim=True) + norm_eps)) * norm_weights

为什么要用Layer Norm不用Batch Norm

很多图像识别方面的任务都是采用Batch Norm,为什么在文本大模型这一块一般不使用Batch Norm而是使用Layer Norm呢?

首先,Transformer中的输入序列长度可变,不同样本的序列长度不同,具体实现的时候需要通过pad来满足序列长度的统一。在这样的情况下,Batch Norm计算每个batch的均值和方差不太合理,而LayerNorm在每个样本内部做归一化,不受batch size影响。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

标签:训练,哪些,AI,模型,tokens,token,Norm,输入
From: https://blog.csdn.net/python12345678_/article/details/139750749

相关文章

  • 一分钱不花!本地部署Google最强开源AI大模型Gemma教程
    谷歌发布了轻量级开源系列模型Gemma,其性能强大,可与主流开源模型竞争。通过Ollama可轻松部署Gemma模型,并使用JANAI美化UI界面。显卡在AIGC应用中至关重要,推荐选择性能强、显存大的NVIDIA系列显卡。半个月前,谷歌搞了一波突然袭击,毫无预兆地发布了新一代AI模型Gemma,并宣称这是......
  • 探索 Perplexity:产品经理的新式 AI 工具
    这是一篇国外博客的翻译文章,文中重点介绍了产品经理如何使用AI工具Perplexity来解决日常工作中的实际问题。通过深入调查和数百次电话访谈,收集了产品经理使用Perplexity的具体方法,并列举了一些非常实用的例子。这些方法包括理解和制定增长策略、寻找基准、进行市场调......
  • (26-4-02)基于OpenAI和LangChain的上市公司估值系统:OpenAI API和Langchain探索(2)Langch
    10.5.2 Langchain和OpenAI处理编写文件summarizer.py,定义了使用Langchain和OpenAI处理文本和文档的功能处。其中,类UnstructuredStringLoader用于加载未结构化的字符串内容,将其分割成适当大小的块。方法split_text_in_chunks和方法split_doc_in_chunks分别用于将文本......
  • [AIGC] Python内置函数:刷题必备
    在Python编程和刷题过程中,我们经常会使用到一些内置函数来提升我们的效率。这些内置函数功能强大,使用恰当会大大简化我们的代码。接下来,让我们来看看其中的一些特别常用的函数:max(),sum(),min()和sorted()。max()max()函数用于返回给定参数的最大值,参数可以是序列。numb......
  • [AIGC] 详细了解Python中的sorted()函数
    Python语言为我们提供了许多内置函数,以方便和增强我们在编程过程中的效率和便捷性。其中,sorted()是非常重要且常用的一个函数,它用于对序列进行排序,并返回一个排序后的列表。一、函数简介sorted()函数主要用于对序列进行排序,创建一个这个序列的已排序列表。这个函数的基本......
  • javab每日一题:在spring里有哪些常用注解?
     Spring框架提供了许多注解,用于简化配置、管理Bean、处理事务、处理AOP等。以下是一些在Spring中常用的注解以及它们的作用:@ComponentScan:作用:用于启用组件扫描,指定要扫描的基础包。Spring会自动扫描并注册带有@Component及其派生注解(@Service、@Repository、@Controller......
  • AI大模型探索之路-实战篇:智能化IT领域搜索引擎之github网站在线搜索
    系列篇章......
  • UE4 C++ AI实现跳跃(上下平台)
    NavLinkProxyPointLink:点对点,不提供可处理的事件SmartLink:提供可处理的事件,当AI到达Link位置时,可以接受函数通过ReceiveSmartLinkReached事件进行绑定函数操作实现简单的跳跃通过接口,定义函数,在AI基类中进行实现。主要通过两个函数实现UGameplayStatics::SuggestPro......
  • AI写代码,CS还有前途吗?加州大学伯克利分校:CDSS申请人数激增48%!
    目录01 CS入学人数暴涨02 人类Coder可堪大任03AI还没有学会创新04编程与农耕不同AI写了这么多代码,你还应该学习计算机科学吗?新的数据显示,学生们仍然热衷于选修计算机科学:加州大学伯克利分校(UCB)计算机科学专业的一年级申请人数猛增48%!没体验过OpenAI最新版GPT-4o......
  • 从11个视角看全球Rust程序员2/4:深度解读JetBrains最新报告
    讲动人的故事,写懂人的代码5Rust代码最常使用什么协议与其他代码交互?RESTAPI:2022年:51%2023年:51%看上去RESTAPI的使用比例挺稳定的,没啥变化。语言互操作性(LanguageInterop):2022年:53%2023年:43%语言互操作性的比例在2023年下来了一些,掉了10个百分点。远......