
1.1 LLM背景知识介绍学习目标了解LLM背景的知识.掌握什么是语言模型大语言模型 (LLM) 背景大语言模型 (英文Large Language Model缩写LLM) 是一种人工智能模型, 旨在理解和生成人类语言. 大语言模型可以处理多种自然语言任务如文本分类、问答、翻译、对话等等.通常, 大语言模型 (LLM) 是指包含数千亿 (或更多) 参数的语言模型(目前定义参数量超过10B的模型为大语言模型)这些参数是在大量文本数据上训练的例如模型 GPT-3、ChatGPT、PaLM、BLOOM和 LLaMA等.截止23年3月底语言模型发展走过了三个阶段第一阶段设计一系列的自监督训练目标MLM、NSP等设计新颖的模型架构Transformer遵循Pre-training和Fine-tuning范式。典型代表是BERT、GPT、XLNet等第二阶段逐步扩大模型参数和训练语料规模探索不同类型的架构。典型代表是BART、T5、GPT-3等第三阶段走向AIGCArtificial Intelligent Generated Content时代模型参数规模步入千万亿模型架构为自回归架构大模型走向对话式、生成式、多模态时代更加注重与人类交互进行对齐实现可靠、安全、无毒的模型。典型代表是InstructionGPT、ChatGPT、Bard、GPT-4等。语言模型 (Language Model, LM)语言模型Language Model旨在建模词汇序列的生成概率提升机器的语言智能水平使机器能够模拟人类说话、写作的模式进行自动文本输出。通俗理解: 用来计算一个句子的概率的模型也就是判断一句话是否是人话的概率.标准定义对于某个句子序列, 如S {W1, W2, W3, …, Wn}, 语言模型就是计算该序列发生的概率, 即P(S). 如果给定的词序列符合语用习惯, 则给出高概率, 否则给出低概率.语言模型技术的发展可以总结为四个阶段基于规则和统计的语言模型神经语言模型预训练语言模型大语言模型预测一句话最可能出现的下一个词汇比如我想去打【mask】? 思考mask 篮球 或者 mask 晚饭可以看出P(我想去打篮球)P(我想去打晚饭)P(我想去打篮球)P(我想去打晚饭)因此mask 篮球对比真实语境下也符合人类习惯。N-gram语言模型的特点优点采用极大似然估计, 参数易训练; 完全包含了前n-1个词的全部信息; 可解释性强, 直观易理解。缺点缺乏长期以来只能建模到前n-1个词; 随着n的增大参数空间呈指数增长3.数据稀疏难免会出现OOV问题; 单纯的基于统计频次泛化能力差.神经网络语言模型基于N-gram语言模型以上的问题以及随着神经网络技术的发展人们开始尝试使用神经网络来建立语言模型。神经网络特点优点利用神经网络去建模当前词出现的概率与其前 n-1 个词之间的约束关系很显然这种方式相比 n-gram 具有更好的泛化能力只要词表征足够好。从而很大程度地降低了数据稀疏带来的问题。缺点对长序列的建模能力有限可能会出现长距离遗忘以及训练时的梯度消失等问题构建的模型难以进行稳定的长文本输出。基于Transformer的预训练语言模型Transformer模型由一些编码器和解码器层组成见图学习复杂语义信息的能力强很多主流预训练模型在提取特征时都会选择Transformer结构并产生了一系列的基于Transformer的预训练模型包括GPT、BERT、T5等.这些模型能够从大量的通用文本数据中学习大量的语言表示并将这些知识运用到下游任务中获得了较好的效果.预训练语言模型的使用方式1.预训练预训练指建立基本的模型先在一些比较基础的数据集、语料库上进行训练然后按照具体任务训练学习数据的普遍特征。2.微调微调指在具体的下游任务中使用预训练好的模型进行迁移学习以获取更好的泛化效果。预训练语言模型的特点优点更强大的泛化能力丰富的语义表示可以有效防止过拟合。缺点计算资源需求大可解释性差等大语言模型随着对预训练语言模型研究的开展人们逐渐发现可能存在一种标度定律Scaling Law即随着预训练模型参数的指数级提升其语言模型性能也会线性上升。2020年OpenAI发布了参数量高达1750亿的GPT-3首次展示了大语言模型的性能。相较于此前的参数量较小的预训练语言模型例如3.3亿参数的Bert-large和17亿参数的GPT-2GPT-3展现了在Few-shot语言任务能力上的飞跃并具备了预训练语言模型不具备的一些能力。后续将这种现象称为能力涌现。例如GPT-3能进行上下文学习在不调整权重的情况下仅依据用户给出的任务示例完成后续任务。这种能力方面的飞跃引发研究界在大语言模型上的研究热潮各大科技巨头纷纷推出参数量巨大的语言模型例如Meta公司1300亿参数量的LLaMA模型以及谷歌公司5400亿参数量的PaLM。国内如百度推出的文心一言ERNIE系列、清华大学团队推出的GLM系列等等。大语言模型的特点优点像“人类”一样智能具备了能与人类沟通聊天的能力甚至具备了使用插件进行自动信息检索的能力缺点参数量大算力要求高、生成部分有害的、有偏见的内容等等语言模型的评估指标BLEUBLEUBLEU 双语评估替补分数是评估一种语言翻译成另一种语言的文本质量的指标。它将“质量”的好坏定义为与人类翻译结果的一致性程度。BLEU算法实际上就是在判断两个句子的相似程度. BLEU 的分数取值范围是 01分数越接近1说明翻译的质量越高。BLEU有许多变种根据n-gram可以划分成多种评价指标常见的评价指标有BLEU-1、BLEU-2、BLEU-3、BLEU-4四种其中n-gram指的是连续的单词个数为nBLEU-1衡量的是单词级别的准确性更高阶的BLEU可以衡量句子的流畅性.实践中通常是取N1~4然后对进行加权平均下面举例说计算过程基本步骤分别计算candidate句和reference句的N-grams模型然后统计其匹配的个数计算匹配度:公式candidate和reference中匹配的 n−gram 的个数 /candidate中n−gram 的个数假设机器翻译的译文candidate和一个参考翻译reference如下candidate: it is a nice day today reference: today is a nice day使用1-gram进行匹配candidate: {it, is, a, nice, day, today} reference: {today, is, a, nice, day} 结果: 其中{today, is, a, nice, day}匹配所以匹配度为5/6- 使用2-gram进行匹配candidate: {it is, is a, a nice, nice day, day today} reference: {today is, is a, a nice, nice day} 结果: 其中{is a, a nice, nice day}匹配所以匹配度为3/5使用3-gram进行匹配candidate: {it is a, is a nice, a nice day, nice day today} reference: {today is a, is a nice, a nice day} 结果: 其中{is a nice, a nice day}匹配所以匹配度为2/4使用4-gram进行匹配candidate: {it is a nice, is a nice day, a nice day today} reference: {today is a nice, is a nice day} 结果: 其中{is a nice day}匹配所以匹配度为1/3通过上面的例子分析可以发现匹配的个数越多BLEU值越大则说明候选句子更好. 但是也会出现下面的极端情况举例说明candidate: the the the the reference: The cat is standing on the ground 如果按照1-gram的方法进行匹配则匹配度为1显然是不合理的所以计算某个词的出现次数进行改进将计算某个词的出现次数的方法改为计算**某个词在译文中出现的最小次数**,如下所示的公式countkmin(ck,sk)countkmin(ck,sk)其中kk表示在机器译文candidate中出现的第kk个词语, ckck则代表在机器译文中这个词语出现的次数而sksk则代表在人工译文reference中这个词语出现的次数。python代码实现# 第一步安装nltk的包--pip install nltk from nltk.translate.bleu_score import sentence_bleu def cumulative_bleu(reference, candidate): bleu_1_gram sentence_bleu(reference, candidate, weights(1, 0, 0, 0)) bleu_2_gram sentence_bleu(reference, candidate, weights(0.5, 0.5, 0, 0)) bleu_3_gram sentence_bleu(reference, candidate, weights(0.33, 0.33, 0.33, 0)) bleu_4_gram sentence_bleu(reference, candidate, weights(0.25, 0.25, 0.25, 0.25)) # print(bleu 1-gram: %f % bleu_1_gram) # print(bleu 2-gram: %f % bleu_2_gram) # print(bleu 3-gram: %f % bleu_3_gram) # print(bleu 4-gram: %f % bleu_4_gram) return bleu_1_gram, bleu_2_gram, bleu_3_gram, bleu_4_gram # 生成文本 generated_text it is a nice day today.split( ) # 参考文本列表 reference_texts [today is a nice day.split( )] # 计算 Bleu 指标 c_bleu cumulative_bleu(reference_texts, generated_text) # 打印结果 print(The Bleu score is:, c_bleu) # The Bleu score is: (0.8333333333333334, 0.7071067811865476, 0.63287829698514, 0.537284965911771)ROUGEROUGE指标是在机器翻译、自动摘要、问答生成等领域常见的评估指标。ROUGE通过将模型生成的摘要或者回答与参考答案一般是人工生成的进行比较计算得到对应的得分。ROUGE指标与BLEU指标非常类似均可用来衡量生成结果和标准结果的匹配程度不同的是ROUGE基于召回率BLEU更看重准确率。ROUGE分为四种方法ROUGE-N, ROUGE-L, ROUGE-W, ROUGE-S.下面举例说计算过程这里只介绍ROUGE_N基本步骤Rouge-N实际上是将模型生成的结果和标准结果按N-gram拆分后计算召回率假设模型生成的文本candidate和一个参考文本reference如下candidate: it is a nice day today reference: today is a nice day使用ROUGE-1进行匹配candidate: {it, is, a, nice, day, today} reference: {today, is, a, nice, day} 结果: :其中{today, is, a, nice, day}匹配所以匹配度为5/51,这说明生成的内容完全覆盖了参考文本中的所有单词质量较高。通过类似的方法可以计算出其他ROUGE指标如ROUGE-2、ROUGE-L、ROUGE-S的评分从而综合评估系统生成的文本质量。python代码实现# 第一步安装rouge--pip install rouge import Rouge # 生成文本 generated_text This is some generated text. # 参考文本列表 reference_texts [This is a reference text., This is another generated reference text.] # 计算 ROUGE 指标 rouge Rouge() scores rouge.get_scores(generated_text, reference_texts[1]) # 打印结果 print(ROUGE-1 precision:, scores[0][rouge-1][p]) print(ROUGE-1 recall:, scores[0][rouge-1][r]) print(ROUGE-1 F1 score:, scores[0][rouge-1][f]) # ROUGE-1 precision: 0.8 # ROUGE-1 recall: 0.6666666666666666 # ROUGE-1 F1 score: 0.7272727223140496python代码实现import math # 定义语料库 sentences [ [I, have, a, pen], [He, has, a, book], [She, has, a, cat] ] # 定义语言模型 unigram { I: 1 / 11, have: 1 / 11, a: 3 / 11, pen: 1 / 11, He: 1 / 11, has: 2 / 11, book: 1 / 11, She: 1 / 11, cat: 1 / 11 } # 计算 PPL log_p 0 # 计算对数化概率 total_words 0 # 统计token 数 for sent in sentences: for word in sent: log_p math.log(unigram[word]) total_words 1 ppl math.exp(-1 / total_words * log_p) print(最终计算的 PPL 为, ppl) # 最终计算的 PPL 为 7.446303021787182小结总结本小节主要介绍LLM的背景知识了解目前LLM发展基本历程对语言模型的类别分别进行了介绍如基于统计的N-gram模型以及深度学习的神经网络模型1.2 LLM主要类别架构介绍学习目标了解LLM主要类别架构.掌握BERT、GPT、T5等模型原理LLM主要类别LLM本身基于transformer架构。自2017年attention is all you need诞生起原始的transformer模型为不同领域的模型提供了灵感和启发。基于原始的Transformer框架衍生出了一系列模型一些模型仅仅使用encoder或decoder有些模型同时使用encoderdecoder。LLM分类一般分为三种自编码模型encoder、自回归模型(decoder)和序列到序列模型(encoder-decoder)。自编码模型 (AutoEncoder modelAE)AE模型代表作BERT其特点为Encoder-Only, 基本原理是在输入中随机MASK掉一部分单词根据上下文预测这个词。AE模型通常用于内容理解任务比如自然语言理解NLU中的分类任务情感分析、提取式问答。1. 代表模型 BERTBERT是2018年10月由Google AI研究院提出的一种预训练模型.BERT的全称是Bidirectional Encoder Representation from Transformers.BERT在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩: 全部两个衡量指标上全面超越人类, 并且在11种不同NLP测试中创出SOTA表现. 包括将GLUE基准推高至80.4% (绝对改进7.6%), MultiNLI准确度达到86.7% (绝对改进5.6%). 成为NLP发展史上的里程碑式的模型成就.1.1 BERT的架构总体架构: 如下图所示, 最左边的就是BERT的架构图, 可以很清楚的看到BERT采用了Transformer Encoder block进行连接, 因为是一个典型的双向编码模型.从上面的架构图中可以看到, 宏观上BERT分三个主要模块:最底层黄色标记的Embedding模块.中间层蓝色标记的Transformer模块.最上层绿色标记的预微调模块.1.2 Embedding模块BERT中的该模块是由三种Embedding共同组成而成, 如下图Token Embeddings 是词嵌入张量, 第一个单词是CLS标志, 可以用于之后的分类任务.Segment Embeddings 是句子分段嵌入张量, 是为了服务后续的两个句子为输入的预训练任务.Position Embeddings 是位置编码张量, 此处注意和传统的Transformer不同, 不是三角函数计算的固定位置编码, 而是通过学习得出来的.整个Embedding模块的输出张量就是这3个张量的直接加和结果.1.3 双向Transformer模块BERT中只使用了经典Transformer架构中的Encoder部分, 完全舍弃了Decoder部分. 而两大预训练任务也集中体现在训练Transformer模块中.1.4 预微调模块经过中间层Transformer的处理后, BERT的最后一层根据任务的不同需求而做不同的调整即可.比如对于sequence-level的分类任务, BERT直接取第一个[CLS] token 的final hidden state, 再加一层全连接层后进行softmax来预测最终的标签.对于不同的任务, 微调都集中在预微调模块, 几种重要的NLP微调任务架构图展示如下从上图中可以发现, 在面对特定任务时, 只需要对预微调层进行微调, 就可以利用Transformer强大的注意力机制来模拟很多下游任务, 并得到SOTA的结果. (句子对关系判断, 单文本主题分类, 问答任务(QA), 单句贴标签(NER))若干可选的超参数建议如下:Batch size: 16, 32 Learning rate (Adam): 5e-5, 3e-5, 2e-5 Epochs: 3, 41.5 BERT的预训练任务BERT包含两个预训练任务:任务一: Masked LM (带mask的语言模型训练)任务二: Next Sentence Prediction (下一句话预测任务)1.5.1 任务一: Masked LM带mask的语言模型训练关于传统的语言模型训练, 都是采用left-to-right, 或者left-to-right right-to-left结合的方式, 但这种单向方式或者拼接的方式提取特征的能力有限. 为此BERT提出一个深度双向表达模型(deep bidirectional representation). 即采用MASK任务来训练模型.1: 在原始训练文本中, 随机的抽取15%的token作为参与MASK任务的对象.2: 在这些被选中的token中, 数据生成器并不是把它们全部变成[MASK], 而是有下列3种情况.2.1: 在80%的概率下, 用[MASK]标记替换该token, 比如my dog is hairy - my dog is [MASK]2.2: 在10%的概率下, 用一个随机的单词替换token, 比如my dog is hairy - my dog is apple2.3: 在10%的概率下, 保持该token不变, 比如my dog is hairy - my dog is hairy3: 模型在训练的过程中, 并不知道它将要预测哪些单词? 哪些单词是原始的样子? 哪些单词被遮掩成了[MASK]? 哪些单词被替换成了其他单词? 正是在这样一种高度不确定的情况下, 反倒逼着模型快速学习该token的分布式上下文的语义, 尽最大努力学习原始语言说话的样子. 同时因为原始文本中只有15%的token参与了MASK操作, 并不会破坏原语言的表达能力和语言规则.1.5.2 任务二: Next Sentence Prediction下一句话预测任务在NLP中有一类重要的问题比如QA(Quention-Answer), NLI(Natural Language Inference), 需要模型能够很好的理解两个句子之间的关系, 从而需要在模型的训练中引入对应的任务. 在BERT中引入的就是Next Sentence Prediction任务. 采用的方式是输入句子对(A, B), 模型来预测句子B是不是句子A的真实的下一句话.1: 所有参与任务训练的语句都被选中作为句子A.1.1: 其中50%的B是原始文本中真实跟随A的下一句话. (标记为IsNext, 代表正样本)1.2: 其中50%的B是原始文本中随机抽取的一句话. (标记为NotNext, 代表负样本)2: 在任务二中, BERT模型可以在测试集上取得97%-98%的准确率.1.6 数据集BooksCorpus (800M words) English Wikipedia (2,500M words)1.7 BERT模型的特点模型的一些关键参数为参数取值transformer 层数12特征维度768transformer head 数12总参数量1.15 亿2. AE模型总结优点BERT使用双向transformer在语言理解相关的任务中表现很好。缺点输入噪声BERT在预训练过程中使用【mask】符号对输入进行处理这些符号在下游的finetune任务中永远不会出现这会导致**预训练-微调差异**。而AR模型不会依赖于任何被mask的输入因此不会遇到这类问题。更适合用于语言嵌入表达, 语言理解方面的任务, 不适合用于生成式的任务自回归模型 (Autoregressive modelAR)AR模型代表作GPT其特点为Decoder-Only基本原理从左往右学习的模型只能利用上文或者下文的信息比如AR模型从一系列time steps中学习并将上一步的结果作为回归模型的输入以预测下一个time step的值。AR模型通常用于生成式任务在长文本的生成能力很强比如自然语言生成NLG领域的任务摘要、翻译或抽象问答。1. 代表模型 GPT2018年6月, OpenAI公司发表了论文“Improving Language Understanding by Generative Pre-training”《用生成式预训练提高模型的语言理解力》, 推出了具有1.17亿个参数的GPTGenerative Pre-training , 生成式预训练模型.与BERT最大的区别在于GPT采用了传统的语言模型方法进行预训练, 即使用单词的上文来预测单词, 而BERT是采用了双向上下文的信息共同来预测单词.正是因为训练方法上的区别, 使得GPT更擅长处理自然语言生成任务(NLG), 而BERT更擅长处理自然语言理解任务(NLU).1.1 GPT模型架构看三个语言模型的对比架构图, 中间的就是GPT:从上图可以很清楚的看到GPT采用的是单向Transformer模型, 例如给定一个句子[u1, u2, ..., un], GPT在预测单词ui的时候只会利用[u1, u2, ..., u(i-1)]的信息, 而BERT会同时利用上下文的信息[u1, u2, ..., u(i-1), u(i1), ..., un].作为两大模型的直接对比, BERT采用了Transformer的Encoder模块, 而GPT采用了Transformer的Decoder模块. 并且GPT的Decoder Block和经典Transformer Decoder Block还有所不同, 如下图所示:如上图所示, 经典的Transformer Decoder Block包含3个子层, 分别是Masked Multi-Head Attention层, encoder-decoder attention层, 以及Feed Forward层. 但是在GPT中取消了第二个encoder-decoder attention子层, 只保留Masked Multi-Head Attention层, 和Feed Forward层.注意: 对比于经典的Transformer架构, 解码器模块采用了6个Decoder Block; GPT的架构中采用了12个Decoder Block.1.2 GPT训练过程GPT的训练包括两阶段过程:预训练 微调第一阶段: 无监督的预训练语言模型.第二阶段: 有监督的下游任务fine-tunning.1.2.1 无监督的预训练语言模型给定句子U [u1, u2, ..., un], GPT训练语言模型时的目标是最大化下面的似然函数:上述公式具体来说是要预测每个词ui的概率这个概率是基于它前面 ui-k 到 ui−1 个词以及模型 Θ。这里的 k 表示上文的窗口大小理论上来讲 k 取的越大模型所能获取的上文信息越充足模型的能力越强。GPT是一个单向语言模型,模型对输入U 进行特征嵌入得到 transformer 第一层的输h0再经过多层 transformer 特征编码使用最后一层的输出即可得到当前预测的概率分布计算过程如下其中Wp是单词的位置编码, We是单词本身的word embedding. Wp的形状是[max_seq_len, embedding_dim], We的形状是[vocab_size, embedding_dim].得到输入张量h0后, 要将h0传入GPT的Decoder Block中, 依次得到ht:最后通过得到的ht来预测下一个单词:1.2.2 有监督的下游任务fine-tunningGPT经过预训练后, 会针对具体的下游任务对模型进行微调. 微调采用的是有监督学习, 训练样本包括单词序列[x1, x2, ..., xn]和label y. GPT微调的目标任务是根据单词序列[x1, x2, ..., xn]预测标签y.其中WyWy表示预测输出的矩阵参数, 微调任务的目标是最大化下面的函数:综合两个阶段的目标任务函数, 可知GPT的最终优化函数为:1.2.3 整体训练过程架构图根据下游任务适配的过程分两步: 1、根据任务定义不同输入, 2、对不同任务增加不同的分类层.具体定义可以参见下图:分类任务Classification: 将起始和终止token加入到原始序列两端, 输入transformer中得到特征向量, 最后经过一个全连接得到预测的概率分布文本蕴涵Entailment: 将前提premise和假设hypothesis通过分隔符Delimiter隔开, 两端加上起始和终止token. 再依次通过transformer和全连接得到预测结果文本相似度Similarity: 输入的两个句子, 正向和反向各拼接一次, 然后分别输入给transformer, 得到的特征向量拼接后再送给全连接得到预测结果问答和常识推理Multiple-Choice: 将 N个选项的问题抽象化为N个二分类问题, 即每个选项分别和内容进行拼接, 然后各送入transformer和全连接中, 最后选择置信度最高的作为预测结果总的来说都是通过在序列前后添加 Start 和 Extract 特殊标识符来表示开始和结束序列之间添加必要的 Delim 标识符来表示分隔当然实际使用时不会直接用 “Start/Extract/Delim” 这几个词而是使用某些特殊符号。基于不同下游任务构造的输入序列使用预训练的 GPT 模型进行特征编码然后使用序列最后一个 token 的特征向量进行预测。可以看到不论下游任务的输入序列怎么变最后的预测层怎么变中间的特征抽取模块都是不变的具有很好的迁移能力。1.3 GPT数据集GPT使用了BooksCorpus数据集, 文本大小约 5 GB包含 7400w 的句子。这个数据集由 7000 本独立的、不同风格类型的书籍组成, 选择该部分数据集的原因:书籍文本包含大量高质量长句保证模型学习长距离信息依赖。这些书籍因为没有发布, 所以很难在下游数据集上见到, 更能验证模型的泛化能力.1.4 GPT模型的特点模型的一些关键参数为参数取值transformer 层数12特征维度768transformer head 数12总参数量1.17 亿优点在有监督学习的12个任务中, GPT在9个任务上的表现超过了state-of-the-art的模型利用Transformer做特征抽取, 能够捕捉到更长的记忆信息, 且较传统的 RNN 更易于并行化缺点GPT 最大的问题就是传统的语言模型是单向的.针对不同的任务, 需要不同的数据集进行模型微调, 相对比较麻烦2. AR模型总结优点AR模型擅长生成式NLP任务。AR模型使用注意力机制预测下一个token因此自然适用于文本生成。此外AR模型可以简单地将训练目标设置为预测语料库中的下一个token因此生成数据相对容易。缺点AR模型只能用于前向或者后向建模不能同时使用双向的上下文信息不能完全捕捉token的内在联系。序列到序列Sequence to Sequence Modelencoder-decoder模型同时使用编码器和解码器。它将每个task视作序列到序列的转换/生成比如文本到文本文本到图像或者图像到文本的多模态任务。对于文本分类任务来说编码器将文本作为输入解码器生成文本标签。Encoder-decoder模型通常用于需要内容理解和生成的任务比如机器翻译。1. 代表模型T5T5 由谷歌的 Raffel 等人于 2020年7月提出相关论文为“Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer”. 该模型的目的为构建任务统一框架将所有NLP任务都视为文本转换任务。比如英德翻译只需将训练数据集的输入部分前加上“translate English to German给我从英语翻译成德语” 就行。假设需要翻译That is good那么先转换成 translate English to GermanThat is good. 输入模型之后就可以直接输出德语翻译 “Das ist gut.”。 对于需要输出连续值的 STS-B文本语义相似度任务 也是直接输出文本。通过这样的方式就能将 NLP 任务都转换成 Text-to-Text 形式也就可以**用同样的模型同样的损失函数同样的训练过程同样的解码过程来完成所有 NLP 任务。**1.1 T5模型架构T5模型结构与原始的Transformer基本一致,除了做了以下几点改动作者采用了一种简化版的Layer Normalization去除了Layer Norm 的bias将Layer Norm放在残差连接外面。位置编码T5使用了一种简化版的相对位置编码即每个位置编码都是一个标量被加到 logits 上用于计算注意力权重。各层共享位置编码但是在同一层内不同的注意力头的位置编码都是独立学习的。一定数量的位置Embedding每一个对应一个可能的 key-query 位置差。作者学习了32个Embedding至多适用于长度为128的位置差超过位置差的位置编码都使用相同的Embedding。1.2 T5 训练过程自监督预训练采用类似于BERT模型的MLM预训练任务。多任务预训练除了使用大规模数据进行无监督预训练T5模型还可以利用不同任务的标注数据进行有监督的多任务预训练例如SQuAD问答和机器翻译等任务。1.3 T5数据集作者对公开爬取的网页数据集Common Crawl进行了过滤去掉一些重复的、低质量的看着像代码的文本等并且最后只保留英文文本得到数据集**C4: the Colossal Clean Crawled Corpus**。1.4 T5模型的特点模型的一些关键参数为参数取值transformer 层数24特征维度768transformer head 数12总参数量2.2 亿2. encoder-decoder模型总结优点T5模型可以处理多种NLP任务并且可以通过微调来适应不同的应用场景具有良好的可扩展性相比其他语言生成模型如GPT-2、GPT3等T5模型的参数数量相对较少训练速度更快且可以在相对较小的数据集上进行训练。缺点由于T5模型使用了大量的Transformer结构在训练时需要大量的计算资源和时间; 模型的可解释性不足。目前大模型主流模型架构-Decoder-onlyLLM之所以主要都用Decoder-only架构除了训练效率和工程实现上的优势外在理论上是因为Encoder的双向注意力会存在低秩问题这可能会削弱模型表达能力就生成任务而言引入双向注意力并无实质好处。而Encoder-Decoder架构之所以能够在某些场景下表现更好大概只是因为它多了一倍参数。所以在同等参数量、同等推理成本下Decoder-only架构就是最优选择了。小结总结本小节主要介绍LLM的主要类别架构自回归模型、自编码模型和序列到序列模型。分别对不同类型架构的代表模型如BERT、GPT、T5等相关模型进行介绍