Transformer网络结构中哪些位置通常会添加 Dropout 以防止过拟合?
在标准的 Transformer 网络结构(如经典论文 "Attention Is All You Need" 中所述)中,Dropout 是一种非常关键的正则化技术,用于防止模型过拟合。
通常,Transformer 会在以下 4 个核心位置 添加 Dropout:
1. 输入层:Embedding 与位置编码(Positional Encoding)相加之后
- 具体位置:在词向量(Token Embedding)与位置编码(Positional Encoding)相加之后,准备输入给第一层 Encoder 或 Decoder 之前。
- 作用:防止模型在训练初期过度依赖某些特定的词汇特征或绝对位置信息,增强输入表示的鲁棒性。
- 公式表达:
2. 多头注意力机制(Multi-Head Attention)内部:注意力权重上
- 具体位置:在计算出注意力分数并经过 Softmax 之后,在与 Value () 矩阵相乘之前。
- 作用:随机将一部分注意力权重(Attention Weights)置零。这迫使模型不能仅盯着某几个特定的 Token,而是要将注意力分散到不同的上下文中,从而学到更泛化、更平滑的注意力分布。
- 公式表达:
3. 每个子层的输出处(残差连接之前)
- 具体位置:Transformer 的每个 Block 包含子层(如 Multi-Head Attention 层和 Feed-Forward 层)。在这些子层计算完毕后,准备与输入 进行残差相加(Add)之前,会应用 Dropout。
- 作用:对子层提取出的特征进行正则化,防止深层网络中的节点共适应(Co-adaptation)。
- 公式表达:
(注:这里以 Post-LN 结构为例。无论是 Post-LN 还是 Pre-LN 结构,Dropout 都是紧跟在 SubLayer 输出之后的。)
4. 前馈神经网络(Feed-Forward Network, FFN)内部的隐藏层
- 具体位置:FFN 通常由两个线性层组成,中间带有一个非线性激活函数(如 ReLU 或 GELU)。Dropout 通常添加在第一个线性层和激活函数之后,第二个线性层之前。
- 作用:由于 Transformer 的 FFN 隐藏层维度通常很大(例如 4 倍的隐藏层维度),非常容易过拟合。在此处添加 Dropout 可以有效限制全连接层的过拟合倾向。
- 公式表达:
💡 补充说明:
- 默认概率设置:在原始的 Transformer 模型以及现今的大多数变体(如 BERT, GPT)中,上述所有位置的 Dropout 概率()通常默认设置为 0.1。
- 现代变体(如 ViT 等)的演进:在一些较新的 Transformer 变体(尤其是计算机视觉领域的 Vision Transformer)中,除了传统的 Dropout,还会使用 DropPath(或称为 Stochastic Depth)。DropPath 是直接在残差连接处随机丢弃整个子层,这对极深的网络防止过拟合和加速训练非常有效。
右滑查看面试常问