详细内容见:
1 注意力机制:
- 简单通俗描述计算过程:Q,K,V(query,key,value); 我们首先需要计算一下 Q 和 K的距离(相似度),可以使用向量点积,余弦相似性,或者 MLP,计算结果进行softmax处理,一是归一化处理,二是突出高权重K,然后根据最新处理的K 值与对应 V 值,加权求和即是 attention 值
- 举例:
- 1 我喜欢吃苹果,也喜欢吃香蕉,不喜欢吃榴莲”(3 个短语,对应 3 个信息单元)
- 2 我最喜欢吃什么水果?” 这个问题(Q):
- 3 生成 K 和 V:K1=“苹果”,V1=“喜欢吃”;K2=“香蕉”,V2=“喜欢吃”;K3=“榴莲”,V3=“不喜欢吃”;
- 4 Q=“最喜欢的水果”,和 K 匹配:Q vs K1(苹果):相关(喜欢),权重 3;Q vs K2(香蕉):相关(喜欢),权重 3;Q vs K3(榴莲):无关(不喜欢),权重 0;
- 5 加权合并 V:重点提取 “喜欢吃苹果” 和 “喜欢吃香蕉”,最终输出 “你最喜欢吃苹果和香蕉”。
2 自注意力机制:
- 没有外来的 Q,自己这段信息分成多个部分,不同部分和其他部分充当 Q,K,V
- 举例:
- 1 “小明去超市买了牛奶,他喝完后觉得很好喝”(输入文本分词后:小明、去、超市、买了、牛奶、他、喝完、觉得、很好喝)。
- 2 写 “他” 这个词时,你得知道 “他” 指的是谁 —— 这就是自注意力机制在工作
- 3 每个词都当 “提问者(Q)”:“他” 这个词会生成一个 Q(查询):“他指的是谁?”同时,每个词也都当 “被查者(K/V)”:所有词都会生成自己的 K(标签)和 V(内容):
- 小明:K=“人名 - 小明”,V=“句子主语,去超市的人”;
- 去:K=“动作 - 去”,V=“前往某地”;
- 超市:K=“地点 - 超市”,V=“购物的地方”;
- 他:K=“代词 - 他”,V=“指代前文的人”;
- 4 Q "他"去匹配所有词的 K:Q(“我指的是谁?”) vs K(小明);Q vs K(去 / 超市 / 牛奶);Q vs K(他自己);
- 5 加权提取 V 的信息:重点提取 “小明” 的 V,其他词的 V 几乎忽略;最终 “他” 就明确了:这就是自注意力通过 “内部查询” 找到的关联。
- 自注意力&多头
- 举例:
3 多头注意力机制:
- 把自注意力机制复制多份(“多个头”),每个头专注于找文本中不同维度的关联(比如一个头找指代关系、一个头找动作和对象、一个头找因果关系),最后把所有头的结果合并,让理解更全面。
- 举例:
- 1 “小明在超市买了牛奶,他喝完后觉得很甜,于是又买了一箱”(核心关联有 3 个:“他” 指代 “小明”、“喝” 的对象是 “牛奶”、“又买” 的原因是 “很甜”)。
- 2 所有头共享输入文本的 Q、K、V(但会各自做微小的 “参数调整”,让每个头的关注点不同)—— 相当于 3 个小组都拿到同一份报告, 但是各自的分析侧重点预设不同。
- 3 具体如下:
- 头 1(负责 “指代关系”):重点找 “谁指谁”:以 “他” 为 Q(“我指谁?”),匹配所有 K,最终锁定 “小明” 的 V,得出结论:“他 = 小明”;
- 头 2(负责 “动作 - 对象关系”):重点找 “动作对应什么东西”以 “喝” 为 Q(“我针对的对象是什么?”),匹配所有 K,锁定 “牛奶” 的 V,得出结论:“喝的是牛奶”;
- 头 3(负责 “因果关系”):重点找 “为什么做这个动作”以 “又买” 为 Q(“我发生的原因是什么?”),匹配所有 K,锁定 “很甜” 的 V,得出结论:“又买是因为牛奶甜”。
- 4 把 3 个小组的结论合并:“小明在超市买了牛奶,小明喝完牛奶后觉得很甜,因为牛奶甜所以小明又买了一箱”—— 比单个头只找一种关联,理解更完整、更精准。
- 5 注意:头的数量要能被维度整除
- 6 分头是对每一个 Q,K,V 的向量化结果进行分头,也就是一段话分成几段儿
- 举例:
4 transform:
-
左侧 Encode:理解输入内容(能看到全文),只执行一次,可以看成是专属"词典"
- 1 输入数据(编码:见基础知识)+位置信息(PE编码用的正弦余弦距离),Sin| Cos(pos / 10000 * (2 i * d))
- 奇数用Cos,偶数用 Sin,pos 是分词位置顺序,i 是分词向量的向量值顺序,d 是向量长度
- 好处就是:可以应对未出现过更长的句子; 每个分词都有独一无二的位置信息
- 2 多头注意力机制(多头就是自注意力并行):输入信息和位置信息输入后,通过 attention 机制进一步提取更多的信息
- 3 Add 和 Norm:
- Add:此时的 Add 是一个残差连接,即 输出 = 原始输入 + 多头(原始输入)
- 1 防止过度加工,保留初始信息,防止多头处理效果差导致预训练越差;
- 2 训练随着层数增加,调整参数的信息会越传递越弱,残差连接可以保持"信号"强度
- Norm: 标准化处理(归一化属于标准化的一种),防止数值过大或者过小导致的梯度爆炸/消失; 标准化后数值小,可以加速收敛
- 爆炸就是"信号"越来越大,防止消息就是越来越弱
- Add:此时的 Add 是一个残差连接,即 输出 = 原始输入 + 多头(原始输入)
- 4 Feed Forword: 两层全连接层,一层有激活函数,一层没有,公式max(0,XW1+b1)W2+b2
- 第一层:使用全连接层提高维度放大输入数据中的有效部分,然后使用Relu 函数 max() 进一步扩大有效和无效数据的差异
- 第二层:再通过全连接层把维度降低,留下有效部分
- 1 输入数据(编码:见基础知识)+位置信息(PE编码用的正弦余弦距离),Sin| Cos(pos / 10000 * (2 i * d))
-
右侧 Dncode:生成输出(不能看到全文),以翻译任务为例
- 1 输入数据的形式: 翻译的正确"答案"和同等大小的"答案贴纸"(Mask 矩阵)乘积作为输入,这是为了确保不能提前看到答案,一开始预测的时候只能看到初始信息,其他的都被掩盖了,然后预测出第一个信息后,预测第二个信息时候,就已经能获取到初始信息+预测信息 1 了,来预测信息 2,以此类推预测得到全部结果,注意,这个过程是在一个矩阵内一次生成的!
- 2 谁来预测?不是预训练模型,预训练模型属于成品模型,此处是搭建好 Decode 框架(比如前馈,Add 和归一化等层)后,随机或者自定义参数,输入数据直接预测,根据不断训练得到最优参数
- 3 第一个多头输入数据: 翻译答案的 Embedding 结果+位置信息Embedding 结果生成Q,K,V 矩阵
- 4 第一个多头: QK 矩阵乘以"答案贴纸"(Mask 矩阵),再乘以 V,加权求和,再进行 software,多头结果拼接到一起就是最终的多头结果, 此时多头的作用,仅仅是获取了初步翻译结果词语之间的顺序,和中文答案没有任何对应关系,因为还没查"词典"
- 5 第一个 Add 和 Norm: 与 encoder 那个一毛一样
- 6 第二个多头输入数据:此时上面5 中的输入作为 Q(类似于"我要查字典"),encode输出作为 K,V(字典内索性和详细信息)
- 7 第二个多头:同样的方法计算多头结果,此时已经获取到了词典信息,正确率会提升不少
- 8 第二个Add 和 Norm: 与第一个处理方法一样
- 9 Feed Forword处理是一致的
- 10 第三个Add 和 Norm:同上
- 线性函数:把docode生成的矩阵转化成每个词表中对应的"分数",搭建 “语义特征” 到 “具体词汇” 的桥梁 —— 把抽象的语义,映射到每个具体词的 “匹配度打分"
- softmax: 做一个 “归一化转换”,让所有分数变成 0~1 之间的概率,且所有词的概率加起来等于 1;
-
补充:
- Transformer 结构提出是用于机器翻译任务,机器翻译是一个序列到序列的任务,因此 Transformer 设计了Encoder 用于提取源端语言的语义特征,而用 Decoder 提取目标端语言的语义特征,并生成相对应的译文,也就是说本身 transform 就是一个生成模型
- 核心能力:序列转换、长依赖捕捉
- 典型适用场景:机器翻译、文本摘要、语音识别(转文本)、图文生成(转文本)、推荐系统
- 推荐:用自注意力捕捉用户 - 物品交互的长周期依赖,提升推荐精准度
- 参数信息(原始版本)
| 核心架构 | 预训练任务 | 训练数据 | 序列长度 | 优化器 | 学习率 |
|---|---|---|---|---|---|
| 编码器/解码器 6 层 | 翻译任务(WMT 英德 / 英法) | WMT 翻译语料~4.5GB | 512 | Adam(β1=0.9,β2=0.98,ε=1e - 9) | 峰值 2e - 4,线性衰减 |
| 总参数量 | 隐藏层维度d_model | 注意力头 | Feed Forward 维度(d_ff) | Dropout | 训练轮数/批量大小 |
| ~1.0 亿 | 512 | 8 | 2048 | 所有层 0.1 | 10/256(单卡) |
5 bert:双向编码的预训练语言模型
-
BERT 聚焦自然语言理解任务,比如文本分类、问答、语义相似度判断等,这类任务需要充分捕捉文本的双向上下文语义,Transformer 的 Encoder 具备多头自注意力机制,能让模型在处理每个 token 时,同时关注到其左右所有 token 的信息,刚好契合 BERT 的训练目标(如掩码语言模型 MLM,需要依据上下文预测被掩码的 token)。
- 例如处理句子 “我爱吃甜的苹果” 时,BERT 在理解 “苹果” 这个词时,能同时结合 “爱吃甜的” 这一前文和可能存在的后文信息,精准把握其语义。
-
核心能力:上下文语义理解
-
典型使用场景:文本分类、情感分析、命名实体识别(NER)、抽取式问答、语义相似度匹配
- 命名实体识别:抽取实体词
- 抽取式问答、语义相似度匹配:理解上下文,从文中回答和匹配
-
参数信息:
核心架构(base/large) 预训练任务 训练数据 序列长度 优化器 学习率 12 /24层编码器 MLM(掩码语言模型)+ NSP(下一句预测) ~16GB(BooksCorpus + Wikipedia) 512 AdamW(权重衰减) 1e-4 总参数量 隐藏层维度d_model 注意力头 Feed Forward 维度(d_ff) Dropout 训练轮数/批量大小 1.1/3.4 亿 768/1024 12/16 3072/4096 0.1(注意力 + 隐藏层) 40/ 128(单卡)/ 2560(分布式) -
1 预训练阶段:用大量的无监督文本通过自监督(无需人工标注)训练的方式( MLP 和 NSP)训练
- 输入:与 transform 类似,也是词Embedding+位置 Embedding 向量对应相加作为输入A,如果是句子对的情况还需要加上归属标记向量
- 但是句子开头有标识符Embeding [CLS]和句子末尾的[SEP]作为输入 B,A 和 B 构成了输入,注意,是拼接不是对应相加, 其中位置向量不是正余弦位置了,和 CLS 和 SEP 一样,都是从初始随机变量随机训练"可学习"的
- transform 因为是单向的所以在输入的时候使用了 mask 矩阵,而bert 是不需要的,但是两个模型都是有"答案"对比的,不然无法反向传播进行训练
-
MLM:先从输入中随机抽取 15%,准备进行处理,在这 15% 中,80% 概率直接 mask,10% 替换其他单词,10% 不动
- 10% 概率直接替换成其他单词,这有助于模型学习理解上下文的重要性,而不仅仅是依赖于[MASK]标记
- 10% 概率原封不动; 这有助于模型在微调阶段更好地处理未遮蔽的单词
-
NSP:语料库中随机抽取两个句子,判断是不是上下文;
- 在BERT的后续版本中,Next Sentence Prediction(NSP)任务被废弃了。因为研究人员发现这个任务对下游任务的性能提升有限
- 举例:
每个token的输入 = 自身向量(可学习) + 位置向量(可学习) + 句子归属向量(固定0/1) [CLS] → 自身向量(初始随机:[0.2, -0.1, 0.3]) + 位置向量(第1位:[0.5, 0.02, -0.1]) + 句子归属向量(句1:[0, 0, 0]) = 最终输入向量:[0.7, -0.08, 0.2] 👉 不是固定值,训练中会变 "我" → 自身向量(初始随机:[0.8, 0.4, -0.2]) + 位置向量(第2位:[0.4, 0.05, -0.05]) + 句子归属向量(句1:[0, 0, 0]) = 最终输入向量:[1.2, 0.45, -0.25] ...(中间"爱""吃""苹果"同理,都是各自向量相加,归属向量全为0)... [SEP] → 自身向量(初始随机:[-0.3, 0.6, 0.2]) + 位置向量(第6位:[0.1, 0.01, -0.15]) + 句子归属向量(句1:[0, 0, 0]) = 最终输入向量:[-0.2, 0.61, 0.05] "它" → 自身向量(初始随机:[0.1, -0.3, 0.7]) + 位置向量(第7位:[0.08, 0.005, -0.18]) + 句子归属向量(句2:[1, 1, 1]) 👉 句2专属标记,和句1区分 = 最终输入向量:[1.18, -0.295, 0.52] ...(中间"很""甜"同理,归属向量全为1)... [SEP] → 自身向量(初始随机:[-0.3, 0.6, 0.2]) + 位置向量(第10位:[0.02, 0, -0.2]) + 句子归属向量(句2:[1, 1, 1]) = 最终输入向量:[0.72, 1.6, 1.0] -
2 微调阶段:BERT首先使用预训练的参数初始化模型,所有参数都使用下游任务的标签数据进行微调,每个不同的下游任务都有单独的微调模型
-
bert 的主干就是多个 transform 的 encode 叠加,为了深入理解语义,但是具体任务使用还是需要在输出层(主干部分微调)进行微调处理
-
微调任务包含:
- 基于句子对的分类任务:核心共性:输入是 “句 1 + 句 2”,用 [CLS] 汇总全局语义,输出层做分类 / 回归,复用句对归属标记(0/1)
任务 输出层 目的 MNLI:(自然语言推理) 线性层 + Softmax(三分类:蕴含 / 矛盾 / 中立) 判断句 2 是否能从句 1 推出 QQP(Quora 问答匹配) 线性层 + Softmax(二分类:两问题是否语义相同) 判断两个问题是否是同一问题的不同表述。 QNLI(问答自然语言推理) 线性层 + Softmax(二分类:段落句子是否能回答问题) 筛选能回答问题的句子。 STS-B(语义文本相似度) 线性层(回归任务,输出 0~5 的相似度分数) 量化两句话的语义相似程度。 MRPC(微软同义句匹配) 线性层 + Softmax(二分类:是否同义) 判断两句话是否语义等价。 RTE(文本蕴含识别) 线性层 + Softmax(二分类:蕴含 / 不蕴含) 简化版 MNLI,只判断是否蕴含。 SWAG(情境推理) 线性层 + Softmax(四分类:从 4 个候选后半句选最连贯的) 判断哪个候选句能承接前半句的情境。 -
基于单个句子的分类任务:核心共性:输入是单句,不用句对标记(全标 0),[CLS] 汇总语义,输出层分类。
任务 输出层 目的 SST-2(情感分类) 线性层 + Softmax(二分类:正面 / 负面) 判断句子情感倾向。 ColA(语言可接受性判断) 线性层 + Softmax(二分类:句子是否语法 / 语义通顺) 判断句子是否是自然语言(比如 “我吃饭” 可接受,“饭吃我” 不可接受)。 -
问答任务:核心:输入是 “问题 + 原文段落”,输出层预测答案的 “起始 / 结束位置”,不做分类做定位。
任务 输出层 目的 SQuAD 两个独立线性层(一个预测答案起始位置,一个预测结束位置) 从原文中找到问题的答案片段(比如问题 “李白生于哪年?”,原文 “李白生于 701 年”,预测起始 = 3,结束 = 5)。 -
命名实体识别NER:核心:输入是单句,输出层对 “每个词” 做分类(不是 [CLS] 汇总),识别实体类型。
任务 输出层 目的 CoNLL-2003 NER 给每个 token 配一个线性层 + Softmax(多分类:PER 人 / ORG 机构 / LOC 地点 / O 非实体) 给每个词打实体标签(比如 “李白(PER)生于 701 年,是唐代(ORG)诗人”)
6 T5 (Text-to-Text Transfer Transformer)编码器 + 解码器(文本 - 文本统一框架)
-
-
T5模型本质上来说是一个基于Transformer架构的encoder-decoder模型。T5模型将各种NLP任务都视为Text-to-Text任务,也就是输入为Text,输出也为Text的任务。
- 注:如果使用需要找对应的中文版,这是一个生成模型
-
核心能力:多任务适配、序列转换
-
典型场景:机器翻译、文本摘要、文本改写、开放域问答、零样本 / 少样本任务迁移
- 零样本学习(Zero-shot) 模型从没见过目标任务的标注数据,直接用
- 少样本学习(Few-shot) 只给目标任务 极少量标注样本(比如 1~10 个),模型就能学会
-
模型架构以及细节变化(与 transform 相比)
-
层归一化方面:
- 移除层归一化的偏置参数:移除 bias 减少参数冗余,降低过拟合风险
- 残差连接前执行 LN:避免深层训练时梯度消失,提升稳定性
-
嵌入层与输出层权重:共享(transform 中是独立的) 大幅减少参数量;增强输入输出语义一致性,助力多任务迁移
-
使用了自定义的相对位置嵌入(区别于 Transformer 的绝对位置嵌入)
-
T5 论文里的相对位置定义,核心不是给每个位置贴固定标签,而是通过可学习的偏置项,让模型计算注意力时感知两个token 间的 “相对距离关系”:
- 先定核心规则:限定距离范围:
- 先给相对距离划了个 “有效区间”,默认最大偏移范围 k=128。
- 也就是说,两个 token 的相对距离 d(比如位置 i 和 j,d=i-j),不管实际相隔多远,超过 128 或者小于 - 128 的,都直接截断成 128 或 - 128。
- 这就像老师只关注 “前后 128 个座位” 的同学,太远的同学就默认归为 “128 位以外”,不用再细分,避免模型记太多无关的远距离关系。
- 先给相对距离划了个 “有效区间”,默认最大偏移范围 k=128。
- 再做关键设计:给距离配可学习偏置:
- 为每个在有效区间内的相对距离,都分配了一个 “可学习的偏置项 b_d”。这个 b_d 不是固定值,而是模型训练时不断调整的参数。
- 比如距离 1 对应偏置 b₁,距离 2 对应偏置 b₂,一开始这些 b 值是随机的,训练中模型会慢慢优化
- 比如让 “相邻词” 的 b 值能让注意力权重更高,让 “相隔很远词” 的 b 值让注意力权重更低。
- 最后融到计算:嵌入注意力分数:把这个偏置项加进了注意力分数的计算公式里
- 为每个在有效区间内的相对距离,都分配了一个 “可学习的偏置项 b_d”。这个 b_d 不是固定值,而是模型训练时不断调整的参数。
- 注:每个多头注意力的头,都有自己专属的一套偏置项
- 先定核心规则:限定距离范围:
-
预训练任务方法是对 BERT 的 MLM (Masked Language Model) 的一种改进,通常称为 Span Corruption (跨度损坏)。
- BERT 的做法: 随机遮盖 15% 的词(Token),并用 [MASK] 标签替换。
- T5 的做法: 随机遮盖一段连续的文本(Span),并用一个唯一的哨兵令牌 (sentinel token),如 <extra_id_0>、<extra_id_1> 等来替换,然后,让解码器按顺序生成所有被遮盖的文本段。
- 举例:
- 原始文本: Thank you for inviting me to your party tonight.
- 损坏后的输入 (Input): Thank you <extra_id_0> me to your party <extra_id_1>.
- 目标输出 (Target): <extra_id_0> for inviting <extra_id_1> tonight <extra_id_2>
- 这种方式有两个好处:
- 更难的任务: 模型需要预测一整段文本,而不仅仅是单个词,这促使模型学习更好的语言结构和连贯性。
- 固定的输出格式: 无论遮盖了多少内容,目标输出始终是一个清晰的、由哨兵令牌和文本组成的序列,完美契合其 Text-to-Text 的思想。
- 需要注意: T5在预训练阶段不需要指定任务前缀。
-
结构形式:适配了causal with prefix attention mask的注意力机制:输入的前缀部分用全局可见的注意力,生成的后缀部分用只能看前文的因果注意力,适配 Prefix LM 的逻辑
-
Transformer结构的几种变种,主要区别在于模型中self-attention机制的可见范围(变体图!!!)。
- fully-visible attention mask:输出序列的每个元素可以看见输入序列的每个元素。
- causal attention mask:输出序列的每个元素只能看对应位置及之前的输入序列的元素,无法看见未来的元素
- causal with prefix attention mask:输入序列的一部分前缀采用fully-visible attention mask,其余部分采用 causal attention mask。
- Prefix LM结构( Prefix Language Model ):
- Prefix(前缀部分):这部分是模型只能读取、不能修改也不能预测的内容,相当于给模型的输入划定了一个 “固定的前提”,比如你给模型输入的问题、或者要求它遵循的写作要求,都可以作为 Prefix
- Suffix(后缀部分):这部分是模型需要自主生成、或者需要预测的内容,也就是模型最终输出的回答、续写的文本
-
数据过滤:对公开爬取的网页数据集Common Crawl进行了过滤,去掉一些重复的、低质量的,看着像代码的文本等,并且最后只保留英文文本,得到数据集C4: the Colossal Clean Crawled Corpus。
-
注:后续的 T5 衍生版本,会使用 RMSNorm 替换 LayerNorm(解决 LayerNorm 的计算冗余、训练稳定性问题)
- RMSNorm: Root Mean Square Layer Normalization :是一种针对大语言模型的归一化方法,是 LayerNorm 的改进版本,核心是为了解决 LayerNorm 在大模型训练中存在的计算冗余、训练稳定性不足的问题
- 优势:
- 计算量更低:少了计算均值和偏移的步骤,能减少模型训练和推理的计算开销,更适配大参数的模型
- 训练更稳定:去掉减均值的操作后,能减少模型训练中可能出现的数值波动,让大模型的训练过程更平滑
- 效果更好:在大语言模型的实际训练中,RMSNorm 的表现通常和 LayerNorm 持平甚至更优,还能一定程度缓解大模型的过拟合问题
-
关于为什么 transform 和 T5 结构类似,但是 T5 就符合 Prefix LM 结构的原因:
- 在 Transform 中,encoder 部分的结果更像是用来给交叉注意力查询的,而 T5 中添加了 Prefix ,可以为交叉注意力生成结果进行引导,原因如下:
- T5 的任务数据都是前缀+内容的形式,生成的向量中是包含前缀信息的,模型训练过程中能够区分前缀和内容信
- T5 的训练方式是填补一段文本,那模型训练就不得不多关注前缀信息,这样的表现形式就是优先关注前缀信息,然后再进行内容生成
- 在 Transform 中,encoder 部分的结果更像是用来给交叉注意力查询的,而 T5 中添加了 Prefix ,可以为交叉注意力生成结果进行引导,原因如下:
-
-
参数信息
核心架构(base/large) 预训练任务 训练数据 序列长度 优化器 学习率 编码解码同 12/24 Span Corruption(随机损坏文本片段并重建) C4 数据集(约 156GB) 512 Adam 峰值 1e - 4,线性衰减 总参数量 隐藏层维度d_model 注意力头 Feed Forward 维度(d_ff) Dropout 训练轮数/批量大小 ~2.2/7.7 亿 768/1024 12/16 3072/4096 0.1(同原始) 1M 步训练(约等效 10~20 轮)/ 1024(分布式) -
参考文章
补充:
7 关于Dropout
- Dropout 是深度学习里一种防止模型过拟合的常用技巧,核心逻辑可以通俗理解成 “训练时随机让部分神经元‘放假’,测试时全体上岗”。
- 使用原因:深度学习模型(比如神经网络)的神经元之间会形成复杂的依赖关系。如果训练数据量少或者模型太复杂,神经元容易 “死记硬背” 训练数据的细节(比如噪音、个别样本的特殊规律),导致在新数据上表现很差 —— 这就是过拟合。
- 举例表示:
- 一个学生只背了课本例题的步骤,换个题型就不会做了,Dropout 就是帮这个学生 “举一反三” 的训练方法。
- 举例表示:
- 核心逻辑:
- 训练阶段:随机 “关闭” 部分神经元
- 每次训练一个批次的数据时,随机选中一定比例(比如 50%)的神经元,让它们的输出变为 0,暂时不参与本次的正向传播和反向传播(相当于 “放假”)。
- 比例是超参数,比如
dropout rate=0.5就表示每次随机关掉一半神经元。 - 作用:神经元无法依赖其他特定神经元的 “帮助”,必须自己学习到更通用的特征;同时避免了神经元之间形成强依赖,让模型更鲁棒。
- 测试 / 推理阶段:全体神经元 “上岗”,输出加权
- 测试时不再随机关闭神经元,所有神经元都参与计算。
- 为了补偿训练时部分神经元被关闭的影响,需要把每个神经元的输出乘以
(1 - dropout rate)。- 举个例子:训练时 dropout rate=0.5,测试时每个神经元的输出都乘以 0.5,保证输出的期望值和训练时一致。
- 训练阶段:随机 “关闭” 部分神经元
- 优点:简单高效,几乎不增加额外计算成本,对缓解过拟合效果明显。
- 适用场景:多用于全连接层,卷积层因为参数共享本身抗过拟合能力强,一般较少用或用较小的 dropout rate。
8 关于生成类和非生成类模型
- 生成类模型:
- 结构:Decoder-only / Encoder-Decoder
- 能力:生成连续、符合逻辑的完整文本
- 特点:
- 用因果掩码注意力,只能按顺序生成文本
- 可以处理开放式的生成需求
- 输出是完整的自然语言文本 GPT 系列、T5、BART、LLaMA、通义千问、ChatGLM
- 典型任务:文本续写、机器翻译、文本摘要、聊天问答、内容创作、代码生成
- 非生成类模型
-
结构:Encoder-only
-
能力:理解文本语义,无法生成文本
-
特点:
- 用双向注意力,能完整理解文本的上下文语义
- 输出是文本的语义向量或分类 / 识别结果
- 只能处理封闭式的理解需求:BERT 系列、ERNIE、XLNet、ELECTRA、SpanBERT
-
典型任务:文本分类、情感分析、命名实体识别、文本匹配、关系抽取、语义相似度计算
-