chatgp怎么学
关于chatgp怎么学如下:
学习Chat GPT需要一些基础知识,包括自然语言处理、机器学习和深度学习等方面的知识。以下是一些从零开始学习Chat GPT的步骤:
1、学习自然语言处理基础知识:
自然语言处理是Chat GPT的基础,需要掌握自然语言处理中的基本概念、算法和工具等。
2、学习机器学习和深度学习基础知识:
Chat GPT是一种基于深度学习技术的模型,需要掌握机器学习和深度学习的基本原理和算法。
3、学习PyTorch框架:
PyTorch是训练和运行Chat GPT模型的主要框架之一,需要学习PyTorch的基本语法和使用方法。
4、下载和运行预训练的Chat GPT模型:
可以下载已经预训练好的Chat GPT模型,运行并测试其效果,以便更好地理解Chat GPT的工作原理。
5、自行训练Chat GPT模型:
可以使用PyTorch框架和相应的数据集,自行训练Chat GPT模型,以便更深入地了解模型的训练过程和调参方法。
6、探索Chat GPT的应用场景:
了解Chat GPT在对话生成、文本生成、问答系统等方面的应用,尝试使用Chat GPT实现相关的应用。
7、参考相关资料和社区:
可以参考相关书籍、论文、博客和社区,了解Chat GPT的最新进展和应用,以及Chat GPT的优化方法和技巧等。
总之,从零开始学习Chat GPT需要掌握自然语言处理、机器学习和深度学习等基础知识,同时需要熟练使用PyTorch框架和相关工具,了解Chat GPT的应用场景和最新进展,并参考相关资料和社区,不断深入学习和实践。
清华大学通用预训练模型:GLM
OpenAI借助ChatGPT所点燃的大语言模型(LLM)之火已在全球范围内燃烧了半年有余,而在此期间,OpenAI与微软所推出的一系列基于GPT3.5或GPT4模型的AI产品也纷纷在不同领域取得了亮眼的表现。
然而令人略感失望的是,作为如今LLM圈内绝对的领头羊,OpenAI并没有遵从其创立初衷,无论是ChatGPT早期所使用的GPT3、GPT3.5还是此后推出的GPT4模型,OpenAI都因“暂无法保证其不被滥用”为由拒绝了对模型开源,开启了订阅付费模式。
对于大型科技企业而言,不管是出于秀肌肉还是出于商业竞争目的,自研LLM都是一条几乎无可避免的道路。但对于缺少算力和资金的中小企业以及希望基于LLM开发衍生产品的开发者来说,选择开源显然是更理想的一条路线。
好在还是有一些选择了开源,那么就目前来看,在LLM领域,都有哪些优质的开源模型可供选择?
表1:开源大模型
在这些开源大模型中,GLM由于效果出众而受到大众关注,而且清华大学开源了基于GLM架构研发的基座模型:ChatGLM-6B、GLM-130B。
截止到5月26号,ChatGLM-6B全球下载达到200万,数百垂直领域模型和国内外应用基于该模型开发。联想、中国民航信息网络公司、360、美团都选择了GLM-130B作为基座模型。
[2023.05.28]科技部在中关村论坛上发布的《中国人工智能大模型地图研究报告》显示ChatGLM-6B位列大模型开源影响力第一名。
GLM模型到底和GPT有什么区别,有哪些创新?这篇文章将详细介绍GLM的技术细节。
1、大模型
NLP任务通常分为三类:
NLU(文本分类、分词、句法分析、信息抽取等)。
有条件生成任务(seq-seq,如翻译任务、QA)。
无条件生成任务(用预训练模型直接生成内容)。
预训练模型也分为三类,分别是:自编码、自回归、编码解码。三种训练模型分别在前面三种任务中表现良好。
自回归(比如GPT):从左往右学习的模型,根据句子中前面的单词,预测下一个单词。例如,通过“LM is a typical task in natural language____”预测单词“processing”。在长文本的生成能力很强,缺点就是单向的注意力机制在NLU任务中,不能完全捕捉token的内在联系。
自编码(比如BERT):通过覆盖句中的单词,或者对句子做结构调整,让模型复原单词和词序,从而调节网络参数。例如,可以把BERT看成一种自编码器,它通过Mask改变了部分Token,然后试图通过其上下文的其它Token来恢复这些被Mask的 Token。自编码在语言理解相关的文本表示效果很好。缺点是不能直接用于文本生成。
编码解码(比如T5):编码器使用双向注意力,解码器使用单向注意力,并且有交叉注意力连接两者,在有条件生成任务(seq-seq)中表现良好(文本摘要,回答生成)。
这些训练框架都不足以在所有NLP中具有竞争力任务。以往的工作(T5)试图通过多任务学习统一不同的框架。然而,由于自编码和自回归的目标性质不同,一个简单的统一的优点不能完全继承这两个框架。
2、GLM介绍
相比其它大语言模型,GLM具有以下3个特点:
自编码,随机MASK输入中连续跨度的token。
自回归,基于自回归空白填充的方法重新构建跨度中的内容。
2维的编码技术,来表示跨间和跨内信息。
通常预训练语言模型是指利用大量无标注的文本数据,学习语言的通用知识和表示,然后在特定的下游任务上进行微调或者零样本学习。预训练语言模型在自然语言理解(NLU)和文本生成等多个任务上都取得了显著的效果提升。随着预训练语言模型的发展,模型的参数规模也不断增大,以提高模型的性能和泛化能力。
目前预训练语言模型主要有三种类型:自回归模型、自编码模型和编码器-解码器模型。
自回归模型从左到右学习语言模型,适合于长文本生成和少样本学习,但不能捕捉上下文词之间的双向依赖关系。
自编码模型通过去噪目标学习双向上下文编码器,适合于自然语言理解任务,但不能直接用于文本生成。
编码器-解码器模型结合了双向注意力和单向注意力,适合于有条件的生成任务,如文本摘要和回复生成。
这三类语言模型各有优缺点,但没有一种框架能够在所有的自然语言处理任务中都表现出色。一些先前的工作尝试通过多任务学习的方式,将不同框架的目标结合起来,但由于自编码和自回归目标本质上的不同,简单的结合不能充分继承两者的优势。
因此,清华大学提出了一种基于自回归空白填充的通用语言模型(GLM),来解决这个挑战。GLM通过添加二维位置编码和允许任意顺序预测空白区域,改进了空白填充预训练,在自然语言理解任务上超越了BERT和 T5。
3、GLM预训练架构
清华大学提出了一种基于自回归空白填充目标的通用预训练框架GLM。GLM将 NLU任务转化为包含任务描述的完形填空问题,可以通过自回归生成的方式来回答。
自回归空白填充目标是指在输入文本中随机挖去一些连续的文本片段,然后训练模型按照任意顺序重建这些片段。完形填空问题是指在输入文本中用一个特殊的符号(如[MASK])替换掉一个或多个词,然后训练模型预测被替换掉的词。
3.1预训练目标
3.1.1自回归空白填充
每个片段都用一个单独的[MASK]符号替换,形成一个损坏的文本\bm{x}_{\text{corrupt}}\bm{x}_{\text{corrupt}}。模型以自回归的方式从损坏的文本中预测缺失的词,这意味着在预测一个片段中的缺失词时,模型可以访问损坏的文本和之前预测的片段。为了充分捕捉不同片段之间的相互依赖关系,我们随机打乱片段的顺序,类似于排列语言模型。令Z_mZ_m为长度为mm的索引序列。
同样,我们可以得到x_1x_1的二维位置编码是[1,0],x_2x_2的位置编码是[2,0],x_4x_4的位置编码是[4,0]。
明白了二维位置编码和自注意力掩码,就算是明白了GLM的核心部分。
3.1.2多任务预训练
在前一节中,GLM遮盖了短的文本区域,适合于NLU任务。我们更感兴趣的是预训练一个能够同时处理NLU和文本生成的单一模型。因此,清华大学研究了一种多任务预训练设置,其中一个生成更长文本的目标与空白填充目标共同优化。GLM考虑了以下两种目标:
文档级别。采样一个单一的区域,其长度从原始长度的50%到100%之间的均匀分布中采样。该目标旨在进行长文本生成。
句子级别。限制遮盖的区域必须是完整的句子。多个区域(句子)被采样,覆盖原始文本的15%的词数。该目标旨在进行seq2seq任务,其预测结果通常是完整的句子或段落。
这两种新的目标都是按照原始目标的相同方式定义的,即公式1。唯一的区别是区域的数量和区域的长度。
3.2模型架构
GLM使用了一个单一的Transformer,并对架构做了一些修改:
(1)重新排列了层归一化和残差连接的顺序,这对于大规模的语言模型来避免数值错误是非常关键。
(2)使用了一个单一的线性层来进行输出词的预测。
(3)用GeLUs替换了ReLU激活函数。
3.2.1二维位置编码
在3.1.1节已经介绍过二维位置编码。自回归空白填充任务的一个挑战就是如何对位置信息进行编码。具体来说,每个词都用两个位置id进行编码。第一个位置id表示词在被损坏的文本\bm{x}_{\text{corrupt}}\bm{x}_{\text{corrupt}}中的位置。
对于被遮盖的区域,它是相应的[MASK]词的位置。第二个位置id表示区域内的位置。对于Part A的词,它们的第二个位置id都是0。对于Part B的词,它们的范围是从1到区域的长度。
GLM的编码方法确保了模型在重建被遮盖的跨度时不知道它们的长度。这与其他模型相比是一个重要的区别。例如,XLNet编码了原始位置,以便它可以感知缺失的token的数量,而SpanBERT用多个[MASK]标记替换了跨度,并保持了长度不变。GLM的设计适合下游任务,因为通常生成的文本的长度是事先未知的。
3.3Finetuning GLM
通常,对于下游的自然语言理解任务,一个线性分类器将预训练模型产生的序列或token的 embedding作为输入,并预测正确的标签。这些做法与生成式预训练任务不同,导致了预训练和微调之间的不一致。
GLM将 NLU分类任务重新制定为填空生成任务,遵循PET。具体来说,给定一个标记的示例\left(\bm{x},y\right)\left(\bm{x},y\right),将输入文本\bm{x}\bm{x}转换为单个mask token的填空问题c\left(\bm{x}\right)c\left(\bm{x}\right)。
例如,情感分类任务可以表述为“{SENTENCE}。这真的是[MASK]”。候选标签yy也映射到填空的答案,称为verbalizer v\left(y\right)v\left(y\right)。在情感分类中,标签“positive”和“negative”分别映射到单词“good”和“bad”。
因此,句子是正面或负面的概率与在空白处预测“好”或“坏”成正比。然后我们用交叉熵损失来微调GLM(见图3)。
如图中的示例,标签“positive”和“negative”映射到单词“good”和“bad”。在这种情况下,GLM使用交叉熵损失进行微调。
对于文本生成任务,给定的上下文构成了输入的Part A,末尾附加了一个mask符号。模型自回归地生成Part B的文本。可以直接应用预训练的GLM进行无条件的生成,或者在下游的条件生成任务上对其进行微调。
对于图4的生成任务,Part B部分直接换成mask即可。
3.4讨论分析
在本节中,讨论了GLM和其他预训练模型之间的区别。主要关注的是它们如何适应下游的空白填充任务。
与Bert对比:BERT是一种基于自编码的模型,它通过mask输入文本中的一些单词,然后训练模型去预测mask的单词,这种目标叫做掩码语言模型(MLM)。
但是BERT有两个缺点:一是它不能捕捉mask token之间的依赖关系,因为它假设mask token是相互独立的;二是它不能处理多个连续的mask token,因为它需要根据答案的长度来调整mask token的数量,而答案的长度往往是未知的。这些缺点限制了BERT在下游的空白填充任务上的表现。
与XLNet对比:XLNet也是一种基于自回归的模型,它通过随机排列输入文本中的单词,然后训练模型按照排列的顺序去预测每个单词,这种目标叫做排列语言模型(PLM)。XLNet两个不同之处:XLNet需要知道预测token的长度;使用双流注意力机制解决了信息泄漏的问题,改变了transformer的结构,增加了耗时。
与T5对比:T5也是一种基于空白填充的模型,它使用了编码器-解码器的Transformer结构来预训练一个文本到文本的模型。T5为编码器和解码器使用了独立的位置编码,而且依赖于多个token符号来区分不同的mask区域。
在下游任务中,只有一个token符号被使用,导致模型容量的浪费以及预训练和微调之间的不一致。而且,T5总是按照固定的从左到右的顺序来预测mask区域。
与UniLM对比:UniLM是通过在自编码框架下改变在双向、单向互相之间的attention mask来统一预训练目标;由于自编码模型的独立假设,自回归模型不能完全捕捉当前token对于前面token的依赖。对于微调下游任务来说,自编码会比自回归更加低效。
4、实验
4.1pretrain设置
GLM使用了与BERT相同的数据集和词汇表,以便与BERT进行公平的比较。作者还训练了多种规模的GLM模型,包括基于BERTBase和 BERTLarge的 GLMBase和 GLMLarge,以及更大的GLM410M和 GLM515M。作者还训练了一个与RoBERTa相同的数据集和词汇表的GLMRoBERTa模型,以便与最新的模型进行比较。
4.2SuperGLUE
SuperGLUE是一个包含8个难度较高的自然语言理解任务的基准。作者将这些任务转化为填空式的问题,然后用预训练的GLM模型来生成答案。作者选择了T5、BART和 RoBERTa作为其他的对比模型。表1显示了各个模型在SuperGLUE上的结果。结果表明,GLM在大多数任务上都优于BERT,无论是base还是large的架构。GLM在平均得分上也优于其他的模型,但是优势较小。作者认为BART的表现不佳可能是由于其编码器-解码器架构和去噪序列到序列目标的低参数效率所导致的。
4.3多任务pretrain
作者在一个训练批次中同时采样不同长度的文本跨度,来训练GLM适应不同类型的任务。作者训练了两个多任务模型,分别是GLMDoc和 GLMSent,它们与GLMLarge的区别在于采样的文本跨度的长度。
GLMDoc采样的是文档级的跨度,而GLMSent采样的是句子级的跨度。作者发现,多任务预训练会导致模型在NLU任务上略有下降,但仍然优于BERTLarge和 UniLMLarge。在多任务模型中,GLMSent的表现优于GLMDoc,平均提升了1.1%。
作者还发现,增加GLMDoc的参数量到410M(相当于BERTLarge的1.25倍)可以使其表现优于GLMLarge。GLM的参数量增加到515M(相当于BERTLarge的1.5倍)时,可以取得更好的效果。
Sequence-to-Sequence:序列到序列任务是指给定一个输入序列,生成一个输出序列,例如摘要生成和问题生成。作者使用了Gigaword和 SQuAD1.1这两个数据集来评估在BookCorpus和 Wikipedia上预训练的模型,以及使用了CNN/DailyMail和 XSum这两个数据集来评估在更大的语料库上预训练的模型。
作者发现,GLMLarge可以达到与其他预训练模型相当的性能。GLMSent比 GLMLarge表现更好,而GLMDoc比 GLMLarge稍差。这表明,文档级的目标对于条件生成任务并不有利,因为条件生成任务的目的是从上下文中提取有用的信息,而不是扩展上下文。增加GLMDoc的参数量到410M可以使其在两个任务上都取得最好的性能。
在更大的语料库上预训练的模型中,GLMRoBERTa可以与BART这个序列到序列模型相媲美,并且超过了T5和UniLMv2。
Text Infilling(文本填充):文本填充任务是指预测文本中缺失的部分,并使其与前后文相一致。GLM是用自回归空白填充目标来训练的,因此可以直接解决这个任务。作者在Yahoo Answers数据集上评估了GLM,并将其与专门为文本填充设计的BLM(Blank Language Model)进行了比较。
结果表明,GLM在 BLEU评分上显著优于之前的方法,并在这个数据集上达到了最先进的水平。作者还注意到,GLMDoc在文本填充任务上略逊于GLMLarge,这与他们在序列到序列任务上的观察一致。
Language Modeling:语言建模任务是指训练一个模型来预测文本中的下一个词。作者使用了WikiText103和LAMBADA两个数据集来评估GLM的性能。WikiText103是一个基于维基百科文档构建的数据集,LAMBADA是一个测试模型对长距离依赖的能力的数据集,要求模型预测一段文本的最后一个词。
作者使用了GPTLarge作为基准模型,它是一个单向自回归模型。作者发现,GLM在语言建模任务上优于GPTLarge,尤其是在使用双向注意力编码上下文时。作者还发现,2D位置编码对于生成长文本有重要作用,去掉它会降低准确率。
总的来说,GLM是一个通用的预训练语言模型,它可以同时处理自然语言理解和生成任务,而不需要切换不同的模型架构或目标。GLM通过自回归空白填充目标来统一不同的任务,并使用混合注意力机制和2D位置编码来提高模型的泛化能力。作者通过在多个数据集上的实验,证明了GLM比单独的BERT、T5或GPT模型有更好的性能。
4.4消融实验
消融实验是一种评估模型组件对性能影响的方法,通过逐个移除或替换模型的某些部分,来观察模型在下游任务上的表现变化。作者使用了SuperGLUE作为评估数据集,它包含了八个自然语言理解任务。
作者与BERT进行了对比实验,发现GLM在预训练和微调阶段都有优势。作者还分析了GLM的不同设计选择,如空白填充目标、空白顺序、空白表示、2D位置编码等,对模型性能的影响。作者指出,GLM与T5有三个主要区别:(1)GLM只有一个编码器,(2)GLM打乱了空白的顺序,(3)GLM只用一个[MASK]标记来表示不同的空白。
5、相关工作
预训练语言模型是指在大规模的无标注文本上训练的模型,它们可以显著提高下游任务的性能。预训练模型有三种类型:
第一种是自编码模型,它们通过去噪目标来学习一个双向的上下文编码器,用于自然语言理解任务;
第二种是自回归模型,它们通过从左到右的语言建模目标来训练一个生成器,用于文本生成任务;
第三种是编码器-解码器模型,它们通过序列到序列的目标来预训练一个文本到文本的模型,用于多种语言任务。
作者还介绍了几种编码器-解码器模型的不同之处,比如BART和 T5的不同输入方式和不同参数规模,以及UniLM的不同注意力掩码。
传统的预训练语言模型通常使用线性分类器来处理NLU任务,例如情感分析、自然语言推理等。但是,一些生成式的语言模型,如GPT-2和GPT-3,可以直接生成正确的答案来完成NLU任务,无需微调模型,只需要给定任务说明或少量的标注样本。
然而,这种方法需要非常大的模型参数和计算资源,而且受到单向注意力机制的限制。最近,一些工作提出了将输入样本转化为填空式问题的方法,以利用预训练语料中的模式。例如,PET(Pattern-Exploiting Training)可以在少样本设置下,通过梯度优化微调模型。
在NLU任务上超越GPT-3,而只需要千分之一的参数。另外,一些工作将结构化预测任务,如序列标注和关系抽取,转化为序列生成任务。
填空语言模型:空白语言建模。Donahue等人(2020)和Shen等人(2020)也研究了空白填充模型。与他们的工作不同,GLM使用空白填充目标来预训练语言模型,并评估它们在下游的自然语言理解和生成任务上的性能。
6、总结
GLM是一种通用的预训练框架,可以用于自然语言理解和生成。GLM将不同任务的预训练目标统一为自回归的空白填充,同时使用了混合的注意力掩码和新颖的二维位置编码。实验表明,GLM在 NLU任务上超越了以前的方法,并且可以有效地在不同任务之间共享参数。
如何从零开始训练Stable Diffusion大模型?
Stable Diffusion是近期提出的一种生成式模型,由于其参数量巨大、计算量极大,训练难度较大。如果您想从零开始训练Stable Diffusion大模型,可以按照以下步骤进行。 1.确定实验环境 Stable Diffusion需要高性能的显卡进行训练,因此需要确保您有足够的GPU资源。此外,需要安装Python环境和必要的依赖包,例如TensorFlow、PyTorch等深度学习框架。 2.下载数据集 为了训练Stable Diffusion模型,需要准备一个足够大的训练数据集。可以选择ImageNet、COCO等常用的图像数据集,或者其他领域的数据集。同时,需要将数据集进行预处理小爱同学升级大模型怎么升级
小爱同学升级大模型升级的步骤是:
1、收集和整理更大规模的数据集,以提供小爱同学更多的训练样本。
2、扩大计算资源,使用更多的GPU或TPU进行训练,以加速小爱同学升级大模型的训练过程。
3、调整模型的架构和参数,以适应更大规模的数据和计算资源,提高小爱同学升级大模型的性能和表现能力。