OpenAI的LLMs系列是一系列基于深度学习的措辞模型,旨在天生人类措辞的自然文本。
这些模型中的每一个都是通过对大量文本进行演习而得到的,可以用于自动回答问题、天生文章、翻译文本等自然措辞处理任务。

万字带你理解ChatGLM_模子_地位 AI快讯

Evolution Tree of LLMs图中展示了这些模型的发展进程。
从最早的模型开始,每个后续模型都是在前一个模型的根本上进行改进和扩展。
这些改进可能涉及模型的规模增加、演习数据的增加、架构的改进等。
通过不断地改进和提升模型,OpenAI致力于推动措辞模型的发展,使其在各种自然措辞处理任务上表现更加出色。

Evolution Tree of LLMs图不仅展示了各个模型之间的关系,还反响了OpenAI在不同韶光点的研究重点和技能进展。
这个图可以帮助研究职员和开拓者理解LLMs系列的发展进程,从而更好地理解和运用这些措辞模型。

2.Autoregressive Blank Infilling2.1 Autoregressive、Autoencoding、Encoder-Decoder

“Autoregressive”、"Autoencoding"和"Encoder-Decoder"是三种常见的神经网络模型构造,用于处理序列数据或天生模型。

Autoregressive(自回归)模型是一种天生模型,它将序列数据的天生建模为一个逐步预测每个元素的条件概率的过程。
在每个韶光步,模型根据之前天生的元素预测当前元素的概率分布。
常见的Autoregressive模型包括措辞模型,如OpenAI GPT模型,它可以天生与输入序列相似的新文本。

Autoencoding(自编码)模型是一类无监督学习方法,用于学习输入数据的紧凑表示。
它由一个编码器和一个解码器组成。
编码器将输入数据映射到低维表示,解码器将该低维表示规复到原始数据空间。
Autoencoding模型的目标是尽可能准确地重修输入数据,同时学习到有用的特色表示。
常见的Autoencoding模型包括Variational Autoencoder (VAE)和Denoising Autoencoder。

Encoder-Decoder(编码器-解码器)模型是一种常用的序列到序列(Sequence-to-Sequence)模型,用于处理输入和输出都是序列数据的任务。
它由两个部分组成:编码器和解码器。
编码器将输入序列映射为固定大小的向量表示,解码器利用该向量表示天生输出序列。
Encoder-Decoder模型可以在不同长度的输入和输出序列之间进行转换,例如机器翻译和文本择要等任务。

GLM(自回归填空)模型是一种灵巧且多样化的措辞模型,可以根据给定的高下文天生缺失落的部分内容。
根据已知的部分文本内容天生可能的填空内容。
它可以用于自动文本补全、问答系统、语义理解和天生等多个自然措辞处理任务中。

2.1 OpenAI GPT系列模型

自然措辞处理领域的GPT(Generative Pre-trained Transformer)系列模型是由OpenAI开拓的一系列强大的自然措辞处理模型。
下面是GPT系列模型的发展进程:

GPT-1: GPT模型是于2018年发布的第一代模型。
它利用了Transformer架构,预演习了一个大规模的措辞模型,并利用无标签的文本数据进行模型演习。
这个模型的特点是天生连贯的文本,能够完成一些根本的自然措辞处理任务,如措辞模型、文本分类和文本天生等。

GPT-2: 在2019年,OpenAI发布了GPT-2模型作为GPT的后续版本。
GPT-2模型采取了更大的预演习模型,利用无标签的互联网文本进行演习。
这个模型在天生文本方面取得了打破性的进展,可以天生高质量、连贯的文本,使得天生的文本内容更具有逼真性。
由于考虑到模型被滥用可能带来的风险,OpenAI最初限定了GPT-2的访问,并未发布完全的模型。

GPT-3: GPT-3是在2020年发布的GPT系列的第三代模型。
参数量达到了1750亿个,演习了十几万小时。
GPT-3在文本天生、文本补全、问答系统等任务上表现出色,其天生的文本能够靠近人类水平的表达能力。
GPT-3还可以通过供应一些文本提示来理解并回答问题,具有较强的措辞理解和推理能力。

GPT-4:在2023年,OpenAI发布了GPT-4,这是GPT系列的第四个模型。
GPT-4比GPT-3系列大得多,具有1.8万亿个参数,而GPT-3只有1750亿个参数。
GPT4是一种多模态模型,而GPT3系列是一种自然措辞处理模型。
自然措辞模型只能听或看懂措辞,而多模态模型可以处理多种媒体数据,并且将他们整合到统一的语义空间之中。
GPT4可吸收的笔墨输入长度达到了惊人的32000字,而GPT3系列,只能输入3000字。

2.3 Autoregressive Blank Infilling

Autoregressive Blank Infilling(ABI)是一种用于添补韶光序列数据中缺失落值的方法。
在韶光序列数据中,由于各类缘故原由,可能会存在一些缺失落值,这些缺失落值会影响数据的完全性和准确性。
ABI方法通过基于自回归模型,利用其他已有的数据来预测并补充缺失落值。

ABI方法的基本思想是根据韶光序列数据的自干系性,利用已有的数据点来逐个预测缺失落值。
详细来说,ABI方法利用AR模型(自回归模型)来建模韶光序列数据中的缺失落值和非缺失落值之间的关系。
然后,根据该模型,利用其他已有的数据点来预测缺失落值的数值。

ABI方法在添补缺失落值时,常日还会考虑一些其他成分,如数据的趋势、时令性和周期性等。
通过综合考虑这些成分,ABI方法能够更准确地添补缺失落值,从而提高数据的完全性和可靠性。

案例片段先容如下:

顺序分为A部分和B部分:

A部分:带掩码跨度的序列B部分:在A部分中被粉饰的原始跨度

如果多个跨度被遮罩,它们将在B部分中被打乱

B部分中的每个跨度都以[S]作为输入,以[E]作为输出。

该模型自回归天生B部分——它基于前一部分预测下一个令牌。

A部分可以自行处理,但不能处理B部分

B部分可以关注A及其在B中的经历

2.4 Multi-Task Pretraining

Multi-Task Pretraining是一种多任务预演习的方法。
在传统的预演习方法中,措辞模型通过在大规模文本数据上进行演习来学习措辞的通用模式和表示。
然而,在Multi-Task Pretraining中,模型同时在多个任务上进行演习,这些任务须要不同类型的措辞理解能力。

Multi-Task Pretraining的思想是通过在多个任务上演习措辞模型,可以学习到更加通用和鲁棒的措辞表示。
这是由于不同的任务须要不同的措辞技能,如句法剖析、语义理解或文档级连贯性。
通过让模型打仗多样化的任务,它可以学习捕捉不同任务之间的共同措辞模式,并利用这些模式更好地泛化到新任务上。

Multi-Task Pretraining已被证明可以提高措辞模型不才游任务上的性能。
例如,预演习在多个任务上的模型在各种自然措辞处理基准测试中取得了最前辈的结果,如问答、文本分类和命名实体识别。

个中一种常见的Multi-Task Pretraining方法是基于Transformer的模型,如BERT(双向编码器表示来自Transformer的方法)和RoBERTa(经由优化的鲁棒BERT方法)。
这些模型在掩码措辞建模、下一个句子预测和其他赞助任务上进行预演习。

案例片段先容如下:

通过改变遮盖内容的长度和数量,从而使模型能够基于natural language understanding, conditional generation, unconditional generation三类任务进行预演习,实现“三合一”

改变缺失落跨度的数量和长度:

2.5 Finetuning

Finetuning是指在预演习的根本上,将模型进一步调整和优化以适应特界说务或特天命据集的过程。
在机器学习中,预演习模型常日在大规模的数据上进行演习,学习到通用的模式和特色表示。
然而,这些预演习模型可能不直接适用于特定的任务或数据集。

通过Finetuning,可以利用预演习模型的通用知识和特色表示来快速适应特定的任务或数据集。
这常日涉及解冻预演习模型的一部分或全部层,并在目标任务上进行进一步的演习。
通过在目标任务上微调模型参数,可以使其更好地适应任务的特定哀求和数据特色。

Finetuning的过程常日包括以下步骤:

选择预演习模型:选择与目标任务相匹配的预演习模型,如BERT或GPT等。
初始化参数:将预演习模型加载到模型中,并冻结所有或部分层的参数。
构建任务特定层:根据目标任务的需求,构建一个或多个任务特定的层。
演习:利用目标任务的数据集,通过反向传播和梯度低落等优化算法,更新模型的参数。
调度超参数:对模型进行验证和评估,并根据结果调度超参数,如学习率、批大小等。
重复迭代:根据须要,多次迭代演习和调度模型,直到达到满意的性能。

Finetuning可以大大减少在特界说务上的演习韶光和样本需求,同时利用预演习模型的知识供应了更好的初始参数和特色表示。
它已经被广泛运用于自然措辞处理、打算机视觉和其他领域中的许多任务,如文本分类、问答、命名实体识别等。

案例片段先容如下:

GLM将NLG和NLU类下贱任务统一为完型填空的天生式任务,如对付分类任务,将输入x写成一个填空问题c(x),后将天生的答案v(y)映射至标签y

2.6 LLM Reversal Curse

LLM(Large Language Model)是指一种非常大的措辞模型,它由数十亿个参数组成,具有强大的措辞理解和天生能力。
大模型LLM可以实现诸如问答、择要、对话天生等任务,被广泛运用于自然措辞处理领域。

LLM Reversal Curse(逆转谩骂)是指在利用大模型LLM进行任务天生时,其天生结果涌现明显的逆转或反转征象。
详细而言,当模型用于天生某个任务的结果时,比较原始输入,天生的结果可能会涌现与原始意图相反的内容或表达。

例如,在问答任务中,当用户提出一个问题时,大模型LLM该当天生一个准确且与问题符合的答案。
然而,由于模型的繁芜性和演习数据的特点,有时候模型会涌现天生与问题相反乃至荒谬的答案的情形。

这种逆转谩骂可能是由于模型在演习过程中打仗到了大量的噪声数据、缺点标注的数据或具有偏见的数据,导致模型在天生过程中涌现了一些猜想之外的结果。

为理解决大模型LLM的逆转谩骂问题,须要进一步优化模型的演习数据、标注过程和天生算法,以提高模型的天生质量和准确性。

案例片段先容如下:

3. 2D Positional Encoding

2D positional encoding是一种将2D网格或图像中元素的位置信息进行编码的技能。
位置编码常日在自然措辞处理任务中利用,例如机器翻译或措辞建模,来表示句子中单词的顺序或位置。
然而,它也可以运用于2D网格或图像。

对付2D网格或图像,位置编码可以用于编码每个元素的空间位置。
这样,模型可以有一种对元素之间的相对位置的感知,并捕捉它们之间的空间关系。

一个常见的2D位置编码的方法是利用不同频率的正弦和余弦函数。
其思想是创建一个根据网格或图像内位置而变革的正弦旗子暗记。
然后将这个位置编码作为每个元素在网格或图像中的额外输入或特色。

位置编码可以利用以下公式定义:

PE(x,2i) = sin(x / (10000^(2i / d_model)))PE(x,2i+1) = cos(x / (10000^(2i / d_model)))

个中,PE(x, i)表示位置i处元素x的位置编码,d_model是模型的维度。

通过利用正弦和余弦函数的不同频率,位置编码可以捕捉位置信息中的不同模式或关系。

案例片段先容如下:

模型输入的position ids分为两种,从而使得模型可以学习到片段天生的长度

Position 1: Part A中token的绝对位置

Part A:从1开始排列Part B:每一个span对应Part A中[MASK]的位置

Position 2:intra-span position,masked span内部的相对位置

Part A:0Part B:每个span的token从1开始排列

3.1 大模型演习最大寻衅:演习稳定性权衡利弊:演习稳定性(高精度低效)还是演习效率(低精度高效)目前已开源演习过程大模型的办理方案FB OPT-175B:演习崩溃时反复调度学习率/跳过数据(权宜之计,丢失性能)HF BLOOM 176B:embedding norm和BF16(丢失性能,有限适配平台)

3.2 GLM-130B:稳定演习方法

GLM-130B是一个稳定演习方法,它是机器学习中的一种算法。
GLM代表广义线性模型,130B表示这个算法的特定版本。

稳定演习方法是指通过一定的技巧和策略来增强模型的稳定性和鲁棒性,使其能够更好地处理噪声和非常数据。
在演习过程中,稳定演习方法会对输入样本或特色进行一些改变或调度,以减少模型对付噪声的敏感性。

GLM-130B的稳定演习方法可能包括以下几个方面:

数据预处理:对输入数据进行去噪、归一化、特色选择等预处理操作,以减少噪声对模型演习的影响。
正则化:通过添加正则化项来限定模型的繁芜度,防止过拟合,提高模型的泛化能力。
非常值处理:通过识别和处理非常值,减少它们对模型演习的影响。
随机化:引入随机化成分,如随机选择样本、随机初始化参数等,以增加模型的稳定性和抗噪能力。
交叉验证:利用交叉验证来评估模型的性能,并选择最佳的参数配置,避免对特天命据集过拟合。
集成学习:通过集成多个模型的预测结果,综合考虑它们的见地,提高整体模型的性能和稳定性。

案例片段先容如下:

Attention score 层:Softmax in 32 避免高下溢出

调小 Embedding 层梯度,缓解前期梯度爆炸问题

word_embedding = word_embedding alpha + word_embedding .detach() (1 ‒ alpha)

3.2 GLM-130B:大量实验确定最优架构

有时候须要进行多次实验来确定最佳的架构设计。
这些实验可能包括调度不同的参数、添加或移除不同的组件,以及测试不同的配置选项。
GLM-130B是根据这些实验的结果和剖析,确定出的最佳架构。

案例片段先容如下:

DeepNorm:稳定演习 1000 层 Post-LN 的方法

旋转位置编码(RoPE):适用于 GLM 的相对位置编码

门控把稳单元(GLU):FFN 层的更换,稳定提升模型性能

3.3 Post LayerNorm

Post LayerNorm(后层归一化)是一种神经网络层归一化的方法,用于办理深层神经网络中梯度消逝和梯度爆炸问题。
传统的 LayerNorm(层归一化)是在每个神经网络层的输入上进行归一化操作,而 Post LayerNorm 是在每个神经网络层的输出上进行归一化操作。

详细来说,在每个神经网络层的输入和激活函数之间,前辈行 LayerNorm 的归一化操作,然后再进行激活函数的打算。
这样可以使得每个神经网络层的输出都在相似的尺度上,避免了梯度消逝和梯度爆炸的问题。

与之比较,传统的 LayerNorm 在每个神经网络层的输入上进行归一化操作,但在深层网络中,由于每层的输入分布不稳定,因此归一化操作的效果可能会低落。
而 Post LayerNorm 能够在每个神经网络层的输出上进行归一化操作,担保了归一化的效果,提高了网络的稳定性和演习效果。

Post LayerNorm 是在 Transformer 网络中被提出的,并在各个任务上取得了显著的性能提升。
它被认为是一种更加有效和稳定的归一化方法,在大规模深层网络的演习中具有主要的浸染。

案例片段先容如下:

重新排列层规范化和剩余连接的顺序

3.4 GLU

GLU(Gated Linear Unit)是一种门控线性单元,用于增强神经网络的表示能力。
通过将GLU运用于MindSpore框架中的大型模型,可以进一步提升模型的性能和效果。

GLU的核心思想是将输入进行分割成两部分,然后通过门控机制掌握两部分的信息通报。
这种门控机制可以帮助模型更好地理解输入数据中的干系性,从而提高模型的表达能力和泛化能力。

在MindSpore框架中,GLU可以被用于各种任务,包括自然措辞处理、打算机视觉和语音识别等。
通过利用MindSpore大模型GLU,研究职员和开拓职员可以更轻松地构建和演习繁芜的模型,并得到更好的结果。

案例片段先容如下:

用GeLU更换ReLU激活

3.5 并行策略:高效演习千亿模型

存下 GPT-3 模型须要 2.8T 显存存放演习状态 + 中间激活函数值

寻衅:远超单卡显存(40GB),采纳何种并行办法高效演习?

采取 ZeRO 优化器在数据并行组内分摊优化器状态 → ~25%

远超单卡显存,如何高效演习?

模型并行:将模型参数分布到多个 GPU 上

张量并行:切分参数矩阵,每 GPU 打算一部分 → 额外通信,降落打算粒度流水线并行:将网络分成多段并行 → 引入流水线气泡ZeRO-3:将参数分布到数据并行组中,算之前先取回参数 → 额外通信韶光

剖析:流水线的气泡占比: ⁄ $ 1 ,n / t << 4m 的时候可以忽略不计

并行策略:张量并行随着模型规模增大缓慢扩展,但不超过单机规模(<=8),别的全部利用流水线并行,通过调度微批处理大小减少气泡占比

其他优化

算子领悟:领悟多个 element-wise 算子 → 提升 ~10% 打算速率流水线平衡:流水线首尾阶段各少放置一个层平衡占用 → 节省 ~10% 显存

跨平台兼容:swDeepSpeed 演习库  与 DeepSpeed API 兼容

支持申威架构,一行代码无缝更换兼容实现并行通信策略,稠浊精度策略,ZeRO 优化器同一套演习框架可在三个集群上对齐演习曲线

import swDeepSpeed as deepspeedmodel, optimizer, _, _ = deepspeed.initialize( model=model, model_parameters=param_groups, args=args,mpu=mpu,dist_init_required=False, config_params=config_params)

测试集群配置:

A100 集群(A100): 96 台 DGX-A100,每台 2 张 200GB IB 网卡 硬件差异性大海光GPU(Hygon):3000 台机器,每台 4 张 DCU 加速卡、4 张 50G IB 网卡申威处理器(Sunway):8192 个节点,每节点一块 SW26010-PRO 处理器

演习 GPT-3 175B 规模的模型,按照相同的 300B 单词量估计演习韶光:

4.Rotary Positional Embedding4.1 Introduction of Positional Embedding

Positional Embedding(位置编码)是一种用于处理序列数据的技能,紧张运用于自然措辞处理(NLP)任务中。
在序列数据中,单词的顺序和位置对付语义的理解非常主要。
位置编码的目的是为了将单词的位置信息融入到模型的表示中,使得模型能够更好地理解单词的顺序和高下文关系。

传统的词向量表示只考虑了单词的语义信息,而没有考虑单词的位置。
位置编码通过为每个单词分配一个唯一的位置向量来办理这个问题。
常用的位置编码方法包括相对位置编码、绝对位置编码、正弦位置编码等。

在相对位置编码中,每个单词的位置编码是相对付其他单词的位置差异而得到的。
绝对位置编码则是将每个单词的位置映射为一个唯一的位置向量。
正弦位置编码是一种常用的绝对位置编码方法,通过利用正弦和余弦函数来天生位置向量,从而捕捉到不同位置之间的相对关系。

位置编码的浸染是为模型供应位置信息,帮助模型在处理序列数据时更好地理解单词的高下文和关系。
它常日与把稳力机制和Transformer等模型构造一起利用,为模型供应更丰富的高下文信息。

案例片段先容如下:

自把稳力机制紧张关注词语之间的相互关系,在打算中,根据词语之间的语义关系来打算把稳力分数,并不会考虑词语之间的位置关系。

纵然打乱序列中词语的顺序,依旧会得到相同的语义表达因此须要额外增加位置信息。

The dog chased the pig. = The pig chased the dog. = chased pig The the dog.

位置信息的表示有很多种,如

absolute positional embeddings:

事理:对付第k个位置的向量xk,添加位置向量pk(仅依赖于位置编号k),得到xk+pk举例/运用模型:sinusoidal positional embedding(Transformer)、learned absolute positional embedding(BERT/RoBERTa/GPT)

relative positional embeddings:

事理:对付第m个和第n个位置的向量xm、xn,将相对位置m-n的信息添加到self-attention matrix中举例/运用模型:T5

rotary positional embeddings

事理:利用旋转矩阵对绝对位置进行编码,并同时在自把稳力公式中引入了显式的相对位置依赖。
举例/运用模型:PaLM/GPT-Neo/GPT-J/LLaMa1&2/ChatGLM1&24.2 Sinusoidal Positional Embedding

Sinusoidal Positional Embedding(正弦位置编码)是一种用于编码序列数据中单词位置信息的方法,最初在Transformer模型中被引入。
它是一种绝对位置编码方法,通过正弦和余弦函数来天生位置向量,从而捕捉到不同位置之间的相对关系。

在正弦位置编码中,每个单词的位置编码由两个维度的正弦和余弦函数打算得到。
详细打算公式如下:

PE(pos,2i) = sin(pos / 10000^(2i/d_model))PE(pos,2i+1) = cos(pos / 10000^(2i/d_model))

个中,pos表示单词在序列中的位置,i表示位置向量的维度索引,d_model表示模型的维度。
这样,每个单词的位置编码可以由位置索引pos和维度索引i打算得到。

正弦位置编码的特点是,不同位置之间的位置向量是正弦和余弦函数的周期函数。
这使得不同位置之间的位置向量能够保持一定的相似性,从而帮助模型更好地理解位置信息并捕捉到序列中的顺序关系。

正弦位置编码常日与把稳力机制和Transformer模型一起利用,用于为模型供应序列数据的位置信息。
它的优点是大略且可阐明,能够有效地表达不同位置之间的相对关系。

案例片段先容如下:

通过sine和cosine函数打算每个位置的positional embedding

优点:1. 可以反应相对位置信息;2. 模型可以接管不同长度的输入缺陷:数值为固定值,无法参与学习

PE(pos, 2i)=sin(pos/10000^2i/d_model)PE(pos, 2i+1)=cos⁡(pos/10000^2i/d_model)

4.3 Learned Positional Embedding

Learned Positional Embedding是一种在自然措辞处理任务中用于编码位置信息的技能。
在传统的Transformer模型中,位置编码是通过固定的数学公式(如正弦函数或余弦函数)来打算得到的。
而Learned Positional Embedding则是通过在模型的嵌入层中引入可学习的参数来学习位置信息的表示。

传统的位置编码方法只能对句子的位置进行大致的编码,而Learned Positional Embedding可以更准确地表示不同位置的信息。
当模型学习到不同位置的嵌入表示时,它可以更好地区分不同位置的词语,并捕捉到位置信息对任务的影响。

Learned Positional Embedding的一个优点是可以根据任务的须要进行调度。
传统的位置编码是固定的,不会随着演习进行调度。
而Learned Positional Embedding可以通过反向传播算法来优化参数,以更好地适应不同任务的需求。

案例片段先容如下:

将表示位置的position ids放入nn.Embedding,获取大小为hidden size的positional embedding

优点:可以随模型演习进行参数更新缺陷:可扩展性差,只能表征在max_seq_length以内的位置

4.4 Relative Positional Embedding

相对位置嵌入(Relative Positional Embedding)是一种用于编码序列中元素之间相对位置关系的技能,常用于自然措辞处理和序列建模任务中。

在传统的位置嵌入方法中,如正弦/余弦位置嵌入(Sinusoidal Positional Embedding)或学习位置嵌入(Learned Positional Embedding),每个位置的嵌入向量是固定的,不考虑其与其他位置的关系。
但在很多任务中,序列中的元素之间的相对位置关系对付理解序列的语义和构造非常主要。

相对位置嵌入通过将每个元素的位置嵌入向量与其他位置的偏移向量进行组合,来编码元素之间的相对间隔。
这样,每个元素的位置嵌入向量会随着其与其他元素的位置关系而变革,从而更好地捕捉序列中的局部构造信息。

相对位置嵌入常用于Transformer模型中,在自把稳力机制(Self-Attention)中利用。
通过引入相对位置嵌入,Transformer可以更好地处理序列中元素之间的相对位置关系,从而提高序列建模的性能。
在相对位置嵌入中,常见的方法是利用间隔编码矩阵(Distance Encoding Matrix)来打算偏移向量,然后与位置嵌入向量相加。

案例片段先容如下:

在打算自把稳力分数时,在query和key的dot product,以及终极把稳力权重和value矩阵乘时,分别额外添加一个表示位置m和位置n相对位置信息的bias,仅依赖于m-n

优点:

可以直不雅观记录词语的相对位置信息模型可接管不同长度的输入

缺陷:

演习和推理速率慢(尤其是长序列的时候)

4.5 Rotary Positional Embedding

干系代码如下:

4.5.1 2D case

Rotary Positional Embedding - 2D case是一种用于编码二维序列中位置信息的方法,特殊适用于Transformer等模型中的把稳力机制。

在传统的位置嵌入方法中,如正弦/余弦位置嵌入(Sinusoidal Positional Embedding)或学习位置嵌入(Learned Positional Embedding),每个位置的嵌入向量是固定的,不考虑其与其他位置的关系。
但对付二维序列,仅利用位置索引的编码方法无法很好地捕捉到元素在二维空间中的相对位置关系。

Rotary Positional Embedding - 2D case通过引入角度信息,能够更好地编码二维序列中元素的位置关系。
详细来说,它利用了旋转操作来编码位置信息,这可以看作是将位置嵌入向量绕原点旋转一定的角度。
通过在嵌入向量中引入角度信息,可以更好地表示元素在二维空间中的相对位置。

在2D案例中,Rotary Positional Embedding常日与自把稳力机制(Self-Attention)一起利用。
在把稳力机制中,通过将位置嵌入向量与把稳力权重相乘,并进行相应的运算,将位置信息引入把稳力打算中。
这样,模型可以更好地理解元素之间的相对位置关系,从而提高序列建模的性能。

案例片段先容如下:

以2D word vector为例,第m个位置的词语可以用一个二维的向量xm表示,我们将它的query和key向量在2D平面上进行逆时针旋转,旋转角度取决于位置索引m

dog:单词dog在第0位,不进行旋转The dog:单词dog在第1位,旋转角度θThe pig chased the dog:单词dog在第4位,旋转角度4

这样在打算xm和xnquery,key的点积时,结果仅和(m-n)θ有关,而非m或n

优点:

打算self-attention q,k点积时,保留了词语的相对位置信息(不会因词语的绝对位置发生改变)前面位置的positional embedding不受后续新增token的影响(easier to cache)token之间的依赖会随着相对间隔的增长而逐步衰减(符合认知,间隔越远的词普遍关联不大)

4.5.2 general form

Rotary Positional Embedding - general form是一种用于编码位置信息的方法,通用形式适用于各种序列数据,包括一维、二维或其他维度的序列。

在传统的位置嵌入方法中,如正弦/余弦位置嵌入(Sinusoidal Positional Embedding)或学习位置嵌入(Learned Positional Embedding),每个位置的嵌入向量是固定的,不考虑其与其他位置的关系。
但是,这种方法无法很好地捕捉到元素在序列中的相对位置关系。

Rotary Positional Embedding - general form通过引入旋转操作,能够更好地编码序列中元素的位置关系。
详细来说,它利用了旋转矩阵来对位置嵌入进行变换,这可以看作是将位置嵌入向量绕一个固定的轴旋转一定的角度。
通过在嵌入向量中引入旋转信息,可以更好地表示元素在序列中的相对位置。

在一样平常形式中,Rotary Positional Embedding可以与把稳力机制(Attention Mechanism)一起利用。
在把稳力机制中,通过将位置嵌入向量与把稳力权重相乘,并进行相应的运算,将位置信息引入把稳力打算中。
这样,模型可以更好地理解元素之间的相对位置关系,从而提高序列建模的性能。

案例片段先容如下:

将单词的词向量大小设定为2的倍数第m个位置的词向量在第i组2D sub-space(即向量中的2i,2i+1元素)的旋转角度为mθ_i,θ_i与i以及词向量的hidden size有关

二、From GLM to ChatGLM1.传统NLP的寻衅1.1 寻衅1:传统NLP vs 繁芜问题

传统NLP(自然措辞处理)方法常日用于处理大略的文本任务,例如文本分类、命名实体识别和情绪剖析等。
这些方法紧张依赖于规则和模式,以及统计和机器学习算法。

对付繁芜问题,传统NLP方法可能面临一些寻衅。
繁芜问题常日具有多义性、歧义性和高下文依赖性。
例如,理解一个句子的意思可能须要考虑高下文信息和背景知识。
此外,繁芜问题还可能涉及多种措辞和跨措辞的处理。

为了应对繁芜问题,研究者们开始利用深度学习方法,如循环神经网络(RNN)和把稳力机制等。
这些方法能够更好地处理语义理解和天生,以及更好地捕捉文本的高下文信息。

繁芜问题还可能须要结合其他领域的知识,例如知识图谱、打算机视觉和知识推理等。
这样可以供应更全面的语义理解和推理能力。

1.2 寻衅2:传统NLP vs 动态知识

传统NLP(自然措辞处理)是一种基于规则和模式的方法,它紧张依赖于人工编码的措辞规则和语法构造来理解和处理文本。
这些规则和构造须要事先定义,并且常日须要大量的人工事情。

动态知识(Dynamic Knowledge)则是一种基于知识图谱和自动学习的方法,它能够根据实时的数据来自动更新和扩展知识库。
动态知识利用机器学习和图谱技能,可以从大量的文本和语料库中自动提取和建立知识模型。

传统NLP的一个紧张上风是其可阐明性,由于所有的规则和模式都是人工定义的,以是可以清楚地理解其事情事理。
然而,它也存在一些缺陷,例如须要大量的人工事情来编写和掩护规则,而且对付繁芜的措辞征象和变革的措辞规则每每无法适应。

比较之下,动态知识能够通过机器学习和自动学习的办法,自动地从大量的文本中提取和建立知识模型。
它可以自动学习措辞征象和规则的变革,并且可以根据实时的数据来更新和扩展知识库。
动态知识的优点是其能够处理繁芜的措辞征象和变革的措辞规则,并且具有较强的适应性和灵巧性。

但动态知识也存在一些寻衅,例如其可阐明性相对较差,由于知识模型是通过机器学习自动学习的,以是很难直不雅观地理解其事情事理。
此外,动态知识的构建和掩护也须要大量的打算资源和数据支持。

案例片段先容如下:

千亿模型的动态知识欠缺、知识迂腐、缺少可阐明性

知识欠缺:长尾知识例如: 天下第二高的山峰(答案: K2格里峰)知识陈日:GPT-3的演习数据截止2020年前不可阐明:缺少答案的参考源

1.3 寻衅3:传统NLP vs 人类对齐

传统NLP是基于机器学习和统计的方法,利用大量已标注的语料库来演习模型。
这些模型可以识别和理解文本的语法构造、词义和语义关系等。
传统NLP方法包括语法剖析、词性标注、命名实体识别、情绪剖析等技能。
这些技能可以自动处理大规模的文本数据,并供应一些高等的措辞处理功能。

人类对齐是指通过人工的办法对文本进行处理和理解。
人类对齐可以是通过人工标注和标记的办法,也可以是通过人工阅读和理解的办法。
人类对齐可以更准确地理解文本的含义和语境,尤其在处理一些繁芜的措辞构造和语义问题时更具上风。
人类对齐可以包括人工智能助手和人工翻译等运用。

传统NLP和人类对齐两种方法各有优缺陷。
传统NLP方法可以在处理大规模数据时供应高效的处理能力,但在面对繁芜语义问题时可能存在理解不准确或无法捕捉语境的问题。
而人类对齐可以更准确地理解文本的含义和语境,但在大规模处理和实时处理方面可能存在效率和本钱的问题。

案例片段先容如下:

例如:请用几句话给一个6岁小孩阐明登月

短缺高效"Prompt工程",GPT-3和GLM-130B都很难尽人意

2.从千亿模型到ChatGLM的技能路线

千亿模型GLM-130B是一个大规模措辞模型,具有130亿个参数,用于自然措辞处理任务。
它采取了Transformer架构和大规模预演习技能,可以天生高质量的文本。

GLM-130B+是在GLM-130B的根本上进行了改进和优化。
它针对措辞模型的演习过程进行了一些调度,提升了模型的性能和效果。
GLM-130B+在更多的自然措辞处理任务上具有更好的表现。

GLM-130B++是在GLM-130B+的根本上进一步改进的版本。
它引入了更多的新技能和优化策略,使得模型在处理长文本、多语种和多任务上表现更出色。
GLM-130B++具有更强大的表达能力和更好的泛化能力。

ChatGLM模型是基于GLM系列模型的一种变种,专门用于天生对话文本。
它在GLM-130B++的根本上进行了一些改进,使得模型在对话天生任务上更加适用和有效。
ChatGLM模型在天生对话内容时可以更好地理解高下文和语境,并天生更具连贯性和合理性的对话文本。

3.ChatGLM的运用处景3.1 撰写博客提要

3.2 写邮件

3.3 先容自己的优点缺陷

3.4 写剧本梗概

3.5 写代码

3.6 查询常见知识/教程

3.7 多轮问答

3.8 笔墨冒险游戏

三、ChatGLM Demo

完全的课程学习地址:完全的课程学习地址

1.利用NPU+MindSpore Transformers试用ChatGLM推理1.1 OpenI启智运行ChatGLM模型

1、到OpenI启智申请账号,开启云脑任务(NPU)/自己用GPU创建环境

OpenI启智申请账号地址:https://openi.pcl.ac.cn/user/sign_up

2、创建项目

3、打开新创建的项目,点击云脑,新建调试任务

4、点击调试

5、进入终端

其他操作如下面1.2小结,这边只是用OpenI启智NPU+MindSpore进行在线支配调试,支配结果如下图:

1.2 MindSpore运行ChatGLM模型

安装MindSpore和MindSpore Transformers

a) MindSpore安装:参考:MindSpore官网(如果用OpenI启智NPU+MindSpore,可以忽略这一步,这步属于本地支配)

b) MindSpore Transformers安装:

1、git clone -b dev https://gitee.com/mindspore/mindformers.git2、cd mindformers3、bash build.sh4、如果利用MindSpore1.10版本,请安装MindFormers 0.6版本(git clone -b r0.6 …)

c) 克隆昇思MindSpore技能公开课代码仓:

git clone https://github.com/mindspore-courses/step_into_llm.git

d) cd step_into_llm/Season2.step_into_llm/01.ChatGLM/

e) 下载ckpt和tokenizer文件

1、ckpt:wget https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/XFormer_for_mindspore/glm/glm_6b.ckpt2、tokenizer:wget https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/XFormer_for_mindspore/glm/ice_text.model

f) 运行推理支配文件:python cli_demo.py

import osimport platformimport signalimport numpy as npimport mindspore as msfrom mindformers.models.glm import GLMConfig, GLMChatModelfrom mindformers.models.glm.chatglm_6b_tokenizer import ChatGLMTokenizerfrom mindformers.models.glm.glm_processor import process_responseconfig = GLMConfig( position_encoding_2d=True, use_past=True, is_sample_acceleration=True)ms.set_context(mode=ms.GRAPH_MODE, device_target="GPU", device_id=0)model = GLMChatModel(config)# https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/XFormer_for_mindspore/glm/glm_6b.ckptms.load_checkpoint("./glm_6b.ckpt", model)# https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/XFormer_for_mindspore/glm/ice_text.modeltokenizer = ChatGLMTokenizer('./ice_text.model')os_name = platform.system()clear_command = 'cls' if os_name == 'Windows' else 'clear'stop_stream = Falsedef build_prompt(history): prompt = "欢迎利用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序" for query, response in history: prompt += f"\n\n用户:{query}" prompt += f"\n\nChatGLM-6B:{response}" return promptdef signal_handler(): global stop_stream stop_stream = Truedef main(): history = [] global stop_stream print("欢迎利用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序") while True: query = input("\n用户:") if query.strip() == "stop": break if query.strip() == "clear": history = [] os.system(clear_command) print("欢迎利用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序") continue count = 0 inputs = tokenizer(query) outputs = model.generate(np.expand_dims(np.array(inputs['input_ids']).astype(np.int32), 0), max_length=config.max_decode_length, do_sample=False, top_p=0.7, top_k=1) response = tokenizer.decode(outputs) response = process_response(response[0]) history = history + [(query, response)] if stop_stream: stop_stream = False break else: count += 1 if count % 8 == 0: os.system(clear_command) print(build_prompt(history), flush=True) signal.signal(signal.SIGINT, signal_handler) os.system(clear_command) print(build_prompt(history), flush=True)if __name__ == "__main__": main()总结

MindSpore作为一种强大的深度学习框架,供应了丰富的工具和功能,使得模型的开拓和演习更加高效和灵巧。
其支持端到真个深度学习办理方案,可以运用于各种任务和场景。
而ChatGLM作为一种天生式措辞模型,通过对话的办法天生自然流畅的文本,可以用于智能对话和智能客服等运用。

结合利用MindSpore和ChatGLM,我们可以实现更加智能和交互性的运用。
首先,MindSpore可以用来演习ChatGLM模型,通过大量的对话数据进行学习,使得天生的文本更加贴近真实的对话。
MindSpore供应了分布式演习的功能,可以在多个设备和打算节点上进行模型的并行演习,加速演习过程。
其自动微分功能也可以帮助优化ChatGLM模型的演习效果。

通过MindSpore的强大功能和ChatGLM的天生式措辞模型,我们可以构建出高效、准确和自然流畅的智能对话系统,提升用户体验并开拓更多的运用领域。
这种结合利用不仅有助于推动机器学习和人工智能的发展,还为带来更多的创新和可能性。

关注#华为云开拓者同盟# 点击下方,第一韶光理解华为云新鲜技能~

华为云博客_大数据博客_AI博客_云打算博客_开拓者中央-华为云