attention、transform、bert 、T5复习总结

87 阅读23分钟

详细内容见:

1 注意力机制:

<img src="/Users/gedun/大模型相关调研文档/pic/attention.png" style="zoom:50%;" />

  • 简单通俗描述计算过程: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: 标准化处理(归一化属于标准化的一种),防止数值过大或者过小导致的梯度爆炸/消失; 标准化后数值小,可以加速收敛
        • 爆炸就是"信号"越来越大,防止消息就是越来越弱
    • 4 Feed Forword: 两层全连接层,一层有激活函数,一层没有,公式max(0,XW1+b1)W2+b2
      • 第一层:使用全连接层提高维度放大输入数据中的有效部分,然后使用Relu 函数 max() 进一步扩大有效和无效数据的差异
      • 第二层:再通过全连接层把维度降低,留下有效部分
  • 右侧 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.5GB512Adam(β1=0.9,β2=0.98,ε=1e - 9)峰值 2e - 4,线性衰减
总参数量隐藏层维度d_model注意力头Feed Forward 维度(d_ff)Dropout训练轮数/批量大小
~1.0 亿51282048所有层 0.110/256(单卡)

5 bert:双向编码的预训练语言模型

在这里插入图片描述

  • BERT 聚焦自然语言理解任务,比如文本分类、问答、语义相似度判断等,这类任务需要充分捕捉文本的双向上下文语义,Transformer 的 Encoder 具备多头自注意力机制,能让模型在处理每个 token 时,同时关注到其左右所有 token 的信息,刚好契合 BERT 的训练目标(如掩码语言模型 MLM,需要依据上下文预测被掩码的 token)。

    • 例如处理句子 “我爱吃甜的苹果” 时,BERT 在理解 “苹果” 这个词时,能同时结合 “爱吃甜的” 这一前文和可能存在的后文信息,精准把握其语义。
  • 核心能力:上下文语义理解

  • 典型使用场景:文本分类、情感分析、命名实体识别(NER)、抽取式问答、语义相似度匹配

    • 命名实体识别:抽取实体词
    • 抽取式问答、语义相似度匹配:理解上下文,从文中回答和匹配
  • 参数信息:

    核心架构(base/large)预训练任务训练数据序列长度优化器学习率
    12 /24层编码器MLM(掩码语言模型)+ NSP(下一句预测)~16GB(BooksCorpus + Wikipedia)512AdamW(权重衰减)1e-4
    总参数量隐藏层维度d_model注意力头Feed Forward 维度(d_ff)Dropout训练轮数/批量大小
    1.1/3.4 亿768/102412/163072/40960.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 位以外”,不用再细分,避免模型记太多无关的远距离关系。
      • 再做关键设计:给距离配可学习偏置:
        • 为每个在有效区间内的相对距离,都分配了一个 “可学习的偏置项 b_d”。这个 b_d 不是固定值,而是模型训练时不断调整的参数。
          • 比如距离 1 对应偏置 b₁,距离 2 对应偏置 b₂,一开始这些 b 值是随机的,训练中模型会慢慢优化
          • 比如让 “相邻词” 的 b 值能让注意力权重更高,让 “相隔很远词” 的 b 值让注意力权重更低。
        • 最后融到计算:嵌入注意力分数:把这个偏置项加进了注意力分数的计算公式里
      • 注:每个多头注意力的头,都有自己专属的一套偏置项
    • 预训练任务方法是对 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 的训练方式是填补一段文本,那模型训练就不得不多关注前缀信息,这样的表现形式就是优先关注前缀信息,然后再进行内容生成
  • 参数信息

    核心架构(base/large)预训练任务训练数据序列长度优化器学习率
    编码解码同 12/24Span Corruption(随机损坏文本片段并重建)C4 数据集(约 156GB)512Adam峰值 1e - 4,线性衰减
    总参数量隐藏层维度d_model注意力头Feed Forward 维度(d_ff)Dropout训练轮数/批量大小
    ~2.2/7.7 亿768/102412/163072/40960.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 关于生成类和非生成类模型

image.png

  • 生成类模型:
    • 结构:Decoder-only / Encoder-Decoder
    • 能力:生成连续、符合逻辑的完整文本
    • 特点:
      • 用因果掩码注意力,只能按顺序生成文本
      • 可以处理开放式的生成需求
      • 输出是完整的自然语言文本 GPT 系列、T5、BART、LLaMA、通义千问、ChatGLM
    • 典型任务:文本续写、机器翻译、文本摘要、聊天问答、内容创作、代码生成
  • 非生成类模型
    • 结构:Encoder-only

    • 能力:理解文本语义,无法生成文本

    • 特点:

      • 用双向注意力,能完整理解文本的上下文语义
      • 输出是文本的语义向量或分类 / 识别结果
      • 只能处理封闭式的理解需求:BERT 系列、ERNIE、XLNet、ELECTRA、SpanBERT
    • 典型任务:文本分类、情感分析、命名实体识别、文本匹配、关系抽取、语义相似度计算