BERT、T5、GPTs,Llama

devtools/2025/3/13 3:15:53/

📕参考:大模型研讨课第一期:Why LLMs?、模型结构1(共10期)_哔哩哔哩_bilibili

(本系列是课程笔记)


Encoder-only--BERT

Encoder-only 架构的代表——BERT

结构特点:只有编码器

BERT(Bidirectional Encoder Representations from Transformers):

(1)编码器结构:每个编码器layer中包含一个多头自注意力(无mask)和FFN

(2)双向:每个位置可以看到序列前后的位置(无mask)

双向:每个位置可以看到序列前后的位置(无mask) 

BERT-base 包含 12 个 Transformer 层,每层中的多 头注意力机制 包含 12 个头, 隐状态的维度为 768,总参数 量约 110M,与 GPT 的参数量相当。

BERT-large 则将 BERT-base 的规模翻倍,包含 24 个 Transformer 层,每层中的多头注意力机制包含 16 个 头,隐状态的维度为 1024, 总参数量约 340M。

BERT的预训练-微调范式

(1)预训练:使用互联网上大量的无标签的语料数据,自监督训练

(2)微调:利用下游任务的有标签数据进行微调,使模型快速应用于各种不同的下游任务,并且取得(比不预训练)更好的效果

BERT的输入

1.将文本句子使用WordPiece分词,转换为token

2.输入是句子或者句子对

       (1) 句子对:起始分类标记[CLS],第一个句子的tokens,分隔符[Sep],第二个句子的tokens,分隔符[Sep]

       (2)单个句子:起始分类标记[CLS],第一个句子的tokens,分隔符[Sep]

输入其实是Token Embeddings+Segment Embeddings+Position Embeddings

(1)Token Embeddings:划分词汇

(2)Segment Embeddings:标记句子

(3)Position Embeddings:位置信息

(1)Token Embeddings将 token映射为向量表示(token就是分词后得到的)

(2)Segment Embeddings 标记句子,前句标记为 EA,后句标记为EB,如 前句为0,后句为1(如果只有前句就只标0)

(3)Position Embeddings学习位置信息 ,未使用三角函数 直接学习获得。缺陷:序列长度固定 (BERT设定了最大序列 长度)

BERT的隐层输出

BERT的预训练

预训练任务之一:完形填空 (Masked Language Model) 

设计目的:改进token-level的NLP任务效果(命名实体识别、问答等)

预训练目标:(利用上下文)预测被“掩盖(masked)”的tokens

 具体做法:

对输入的tokens序列,随机选择一些待预测的tokens(占15%), 其中80%替换为[MASK](一种特殊的token),10%替换为字典中的 任意token, 剩余10%不变。

在这些tokens对应的隐层输出使用 softmax 估计在词典中各个词 的概率,计算预测与真值的Cross-Entropy。

利用上下文来预测被mask的东西 

预训练任务之二:下句预测(Next Sentence Prediction)

 设计目的:提高模型判断句子之间相对关系的能力

预训练目标:判断输入给定的2个句子是否为上下句关系(本质是判断是非的2分类问题)

具体做法:

输入两个句子A、B,50%概率设置B是A的下一句,50%概率A和B是随机抽取的两个句子;使用代表分类头的特殊符号[CLS]对应的隐层输出C,预测B句是否为A句的下一句。

BERT的微调

微调:利用下游任务数据更新整个网络的参数,可以快速灵活的适应下游任务

注意:根据下游任务添加输出层,添加的层从头训练

句子对分类

句子对分类:输入两个句子,输出分类类别(cls)

(1)MNLI:大规模分类任务,目标是预测第二个句子相对于第一个句子是包含、矛盾还是中立

(2)QQP:二分类任务,预测Quora在两个语义问题上是否等效

(3)STS-B:语义文本相似性基准,从新闻头条或其他来源提取句子对, 按分值标注两个句子在语义上的相似度

(4)MRPC:自动从在线新闻源中提取句子对,并带有人工标注,以说明句子对中的句子在语义上是否等效

(5)SWAG:对抗生成的情境数据集,包含113k个句子对完整示例,用于评估常识推理

单句分类:输入一个句子,输出分类类别(cls)

(1)SST-2:斯坦福情感树库,单句二分类任务,包括从电影评论中提取的句子及其情绪标注

(2)CoLA:语言可接受性语料库,单句二分类任务,目标是预测英语句子在语言上是否“可以接受

问答任务:输入问题和段落,输出回答的片段start/end

(1)SQuAD:斯坦福问答数据集,包含10万个问题/答案对,任务是预测 Wikipedia段落中的答案文本范围

要求:标出答案的span ,输出start end

命名实体识别任务:输入一个句子,输出实体的类别和begin/inside/O (共9类)

(1)NER:识别文本中具有特定意义的实体,如人名、地名、机构名等,常见的NER数据集有CoNLL-2003

(2)实体有4类(人名、地名、专有名词、机构名)

        begin表示类别开始,inside表示类别中间或结尾,O表示非实体,排列组合共9类

优势:

  1. 可以在大量的无标签文本语料库上进行无监督预训练

  2. 挖掘了预训练阶段的潜力,通过MLM任务获取到上下文相关的双向特征表示

  3. 可以通过微调,将预训练好的模型迅速迁移到各种下游任务

  4. 适合各种自然语言理解(NLU)任务

不足:

  1. 由于只使用了Transformer的编码器部分,没有进行自回归预训练,且架构上缺少解码器结构, 因此不适合直接处理自然语言生成(NLG)任务,如生成对话、文章摘要、机器翻译

  2. 只适合处理句子和段落级别的任务,不适合处理文档级别的任务

encoder-only 只有编码器没有解码器,(没有mask的自注意力),没有进行自回归预训练,不适合进行生成式的任务。偏向于做理解性任务,比如实体抽取。

自回归预训练:用前边的词预测后边的词 

 Encoder-Decoder

Encoder-Decoder的起源:Seq2Seq

         T5(Text-to-text Transfer Transformer)

         GLM (General Language Model)

Encoder-Decoder架构的起源

 T5(Text-to-Text Transfer Transformer)

T5的设计:

(1) 将所有NLP问题都转化为Text-to-text问题

(2)用一个统一的模型、损失函数、超参等等解决所有NLP问题

(3)构建数据集时,要在数据前加上任务的描述。

T5本身没有算法上的亮点, 也没有模型结构上的巨大创新,它最重要的作用是为NLP预训练模型提供了一个通用的框架,用seq2seq解决所有NLP问题.  

第三个:结合了单向的和双向的  前一半双向,后一半单向 

输入文本会保留一部分原始文本,同时用特定的遮蔽符号(例如,<X>、<Y>、<Z>)替换掉要预测的部分。

目标文本则包含被遮蔽的内容。

T5的微调是把所有的任务合到一起微调,Bert的微调是一个下游任务一个微调。  

优点:Encoder-Decoder架构适合做需要理解输入后(即有条件)的输出相关任务,

如机器翻译,问答系统

训练:由于需要训两个模块且涉及两个模块之间的交互,Encoder-Decoder架构模型复杂度往往更高,在参数效率上低于Decoder-Only架构,在同样的计算资源下更加难以训练(kv cache等也对decoder-only更加友好)

能力:双向attention的注意力矩阵容易退化为低秩矩阵,限制表达能力,在同等参数量条件下,Encoder-Decoder架构的泛化性能并没有比Decoder-only更好(在T5等论文中结果更好可能是因为参数量翻倍)

Decoder-only 架构

只有解码器(有mask的)  

GPT

⭐由于去掉了编码器, 所以也去掉了交叉注意力

decoder中的第一个masked多头自注意力模块输入序列为了不能看到当前token之后的信息,需要对当前toekn之后的tokens进行mask;  

预训练方式:自回归,无监督学习

(其实,给定前N-1个词,预测第N个词,自带了标签,即 遇到前N-1个词对应的标签是第N个词)

输出: token 经过 经过词嵌入矩阵We(内积)+Wp(位置编码,直接相加),经过n个解码层,最后得到输出词的概率,然后选概率最大的那个。  

训练方式:有监督学习,使用下游任务的数据集和标签。

参数更新:新添加的层从头训练,其他参数微调。

目标函数:下游任务的目标函数+预训练的语言模型。

4种下游任务

 输入:对输入进行特定的转换,添加一些特殊词元

 结构:对结构进行微小调整(添加线性层),即可适用于各种不同的下游任务

分类任务:判断序列的类别

        结构调整:添加线性层输出类别

        输入转换:添加开始词元start和抽取词元extract

蕴含任务:判断输入的两段序列(前提文本和假设文本)是否为包含关系

        结构调整:添加线性层输出预测是否为蕴含关系

        输入转换:开头添加开始词元 start,用delim连接两段文本, 最后添加抽取词元extract

相似任务:判断输入的两段序列是否相似

       结构调整:添加线性层输出预测 是否为相似关系

        输入转换:分别使用两种顺序连接两段文本,开头添加开始词元 start,用delim连接两段文本,最后添加抽取词元extract

多选任务:给定一个问题,从多个答案中判断最佳答案

结构调整:将n个结果分别输入到 新添加的线性层,用softmax判断 概率最大的做完最终结果

输入转换:分别对n个回答构造n 段序列,开头添加开始词元start, 用delim连接问题和答案,最后添加抽取词元extract

GPT和BERT对比

BERT:编码器、双向、MLM和NSP,微调任务特定的层

GPT:解码器、单向(从左到右)、预测下一个词

下句预测(Next Sentence Prediction)  完形填空 (Masked Language Model)

背景:自监督预训练+监督式微调仍然需要数据集,如何去掉监督微调阶段?

GPT2核心思想:无需微调,在预训练阶段使用语言模型建模多种下游任务,实现通用的NLP模型

layer norm的位置:

Transformer和GPT中layer norm在子层后面的位置(post-LN)

GPT-2中将layer norm放在了子层前面的位置(pre-LN)

pre-LN可以使各子层的梯度范数保持不变,更利于稳定的优化

尺度定律(Scaling law):当增加模型计算量、训练数据量、模型参数规模,大模型 的Loss都会单调降低,模型效果越来越好

涌现能力(Emergent ability):当模型规模大到一定程度 (60B),模型能力出现飞跃

无需微调,使用任务提示(prompt)和少量示例处理下游任务(few-shot)

没有参数更新!!!

 

Llama系列介绍--开源

LLAMA系列作为开源大模型,特别是Llama 3.1

405B登场后,在多项测试中一举超越GPT-4o

(1) Llama 3.1 405B的性能,与最好的闭源模型性能相当 (多项指标超过GPT-4o)

(2)开源/免费使用权重和代码,允许进行微调、蒸馏到其他模型中,以及在任何地方部署

(3)128k的上下文,多语言,良好的代码生成能力,复杂推理能力,以及工具使用能力

(4)Llama Stack API可以轻松集成

Decoder-only 架构成为主流的原因探讨

一些原因分析

(1) decoder-only的架构相比encoder-decoder在in-context learning上会更有优势,因为prompt可以更加直接地作用于decoder每一层的参数,无需经过编码器的转换, 微调的信号更强,使得decoder-only能够更准确地捕捉和利用输入序列的信息

(2)注意力的秩:双向attention的注意力矩阵容易退化为低秩状态,而causal attention 的注意力矩阵是下三角矩阵,必然是满秩的,建模能力更强

(3)causal attention (就是decoder-only的单向attention)具有隐式的位置编码功能

模型复杂度与训练效率

(1) decoder-only支持一直复用KV-Cache,计算效率更高

(2) Megatron和flash attention等重要工具对causal attention的支持更好

实验表明:

(1) decoder-only架构的zero-shot泛化性能更好

(2)decoder-only架构的in context learning能力更强,使得few-shot能力更强


FFN  (Feed-Forward Network Sublayer)前馈神经网络

FFN是Transformer模型中的一个关键组件,通常出现在编码器和解码器的每一层中。它由两个线性变换和一个激活函数组成,

低维→高维→低维(512→2048→512) 

主要作用

  1. 特征变换:增强模型的表达能力。

  2. 非线性引入通过激活函数增加非线性,提升模型拟合能力

  3. 维度调整:通过线性变换调整特征维度,便于后续处理。


 激活函数

理想激活函数是阶跃函数, 0表示抑制神经元而1表示激活神经元

但是阶跃函数具有不连续、不光滑等不好的性质, 常用的是 Sigmoid 函数 。

HAdamard积:按元素相乘

Multi-head:每个head有自己单独的KV .

GQA:将Q分成N个组, 每个组共享KV【相当于两种方式的融合】

在多头注意力机制(Multi-Head Attention)中,Q(Query)、K(Key)、V(Value) 通常是从同一个输入通过不同的线性变换得到的。

Q K V 在自注意力机制中是从同一个输入序列X 计算得到的(所以称之为同源)。

但Q K V实际的值并不同,因为它们乘的线性变换矩阵 W_() 不一样。 

 


 Layer Normalization(层归一化) 

 Layer Normalization(层归一化,简称 Layer Norm)是一种用于神经网络中的归一化技术,旨在提高模型的训练稳定性和收敛速度。它通过对每一层的输入进行归一化,使得输入数据的分布更加稳定,从而缓解梯度消失或梯度爆炸问题。

Layer Norm 对每一层的输入进行归一化,使其均值为 0,方差为 1。具体来说,它对每个样本的所有特征维度进行归一化,而不是像 Batch Normalization(批归一化)那样对每个特征维度跨样本进行归一化。

Layer Norm 的作用

  1. 稳定训练过程

    • 通过对每一层的输入进行归一化,Layer Norm 可以减少内部协变量偏移(Internal Covariate Shift),使得每一层的输入分布更加稳定。

    • 这有助于缓解梯度消失或梯度爆炸问题,从而加速模型收敛。

  2. 适用于小批量数据

    • Layer Norm 对每个样本独立进行归一化,不依赖于批量大小,因此在批量较小时也能稳定工作。

    • 相比之下,Batch Normalization 在批量较小时效果较差。

  3. 适用于序列数据

    • Layer Norm 在序列数据(如文本、时间序列)中表现优异,因为它对每个时间步的特征进行归一化。

    • 在 Transformer 等模型中,Layer Norm 被广泛应用于自注意力机制和前馈神经网络中。

  4. 增强模型表达能力

    • 通过可学习的参数 γ 和 β,Layer Norm 可以在归一化的基础上保留模型的表达能力。

 

LayNorm:纵向的,同一个样本内计算方差

BatchNorm:横向的,样本对齐,然后对同一通道的不同样本间计算均值方差

Layer Norm 的应用场景

  1. Transformer 模型

    • Layer Norm 被广泛应用于 Transformer 的每个子层(如自注意力层和前馈神经网络层)之后。

    • 例如,在 BERT、GPT 等模型中,Layer Norm 用于稳定训练过程。

  2. 循环神经网络(RNN)

    • Layer Norm 可以用于 RNN 的每个时间步,缓解梯度消失问题。

  3. 生成对抗网络(GAN)

    • Layer Norm 可以用于 GAN 的生成器和判别器中,提高训练稳定性。

  4. 强化学习

    • Layer Norm 可以用于策略网络和值函数网络中,加速收敛。

总结:

Layer Norm 是一种重要的归一化技术,通过对每一层的输入进行归一化,稳定训练过程并加速收敛。它在序列数据和小批量数据中表现优异,被广泛应用于 Transformer、RNN、GAN 等模型中。与 Batch Norm 相比,Layer Norm 不依赖批量大小,训练和推理时行为一致,具有更强的通用性。


Layer Norm 的核心思想

Layer Norm 对每一层的输入进行归一化,使其均值为 0,方差为 1。具体来说,它对每个样本的所有特征维度进行归一化,而不是像 Batch Normalization(批归一化)那样对每个特征维度跨样本进行归一化。

去除平移,效果相当。


http://www.ppmy.cn/devtools/166666.html

相关文章

自己的网页加一个搜索框,调用deepseek的API

一切源于一个学习黑马程序员视频的突发奇想 在网页悬浮一个搜索按钮&#xff0c;点击可以实现调用deepseek文本模型回答你的问题 前端实现 前端使用vue实现的 首先是整体页面&#xff1a;AIWidget.vue <template><div><!-- 悬浮 AI 按钮 --><el-button c…

小程序事件系统 —— 33 事件传参 - data-*自定义数据

事件传参&#xff1a;在触发事件时&#xff0c;将一些数据作为参数传递给事件处理函数的过程&#xff0c;就是事件传参&#xff1b; 在微信小程序中&#xff0c;我们经常会在组件上添加一些自定义数据&#xff0c;然后在事件处理函数中获取这些自定义数据&#xff0c;从而完成…

C++面试题:recv和read的区别

recv 和 read 都是用于从文件描述符读取数据的系统调用&#xff0c;但它们的设计目的和使用场景有所不同。以下是两者的主要区别&#xff1a; 1. 设计目的 recvread专为套接字&#xff08;socket&#xff09;通信设计&#xff0c;属于 Berkeley 套接字 API 的一部分。通用的文…

贪心算法精解:用C++征服最优解问题

贪心算法精解&#xff1a;用C征服最优解问题 一、贪心算法的本质&#xff1a;当下最优即全局最优 贪心算法如同下棋高手&#xff0c;每一步都选择当前最优的走法。它的核心思想是&#xff1a;通过局部最优选择的叠加&#xff0c;最终得到全局最优解。这种算法在时间复杂度上往…

【漫话机器学习系列】132.概率质量函数(Probability Mass Function, PMF)

概率质量函数&#xff08;Probability Mass Function, PMF&#xff09;详解 1. 概述 概率质量函数&#xff08;PMF, Probability Mass Function&#xff09;用于描述离散随机变量的概率分布。简单来说&#xff0c;它给出了随机变量取某个具体值的概率。PMF 适用于那些只能取有…

【含文档+PPT+源码】基于微信小程序的乡村振兴民宿管理系统

项目介绍 本课程演示的是一款基于微信小程序的乡村振兴民宿管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该…

CentOS7离线部署安装docker和docker-compose

CentOS7离线部署安装docker和docker-compose 安装包准备 docker下载地址、docker-compose下载地址 docker和docker-compose版本对应关系 注&#xff1a;本次安装部署选择的版本是 docker&#xff1a;docker-28.0.1.tgzdocker-compose&#xff1a;docker-compose-linux-x86_6…

JAVA编程【JVM编程】

1. JVM 体系结构 JVM 主要包括以下几个核心部分&#xff1a; 类加载器&#xff08;ClassLoader&#xff09; 运行时数据区&#xff08;Runtime Data Area&#xff09; 执行引擎&#xff08;Execution Engine&#xff09; 本地方法接口&#xff08;Native Interface&#xff0…