了解并实现一个Transformer Block

文章目录

  • [1. 前言](#1. 前言)
  • [2. Transformer Block](#2. Transformer Block)
  • [3. 代码实现](#3. 代码实现)
  • [4. 参考](#4. 参考)

1. 前言

什么是 Transformer?如果希望深入理解可以参考:
《NLP深入学习:大模型背后的Transformer模型究竟是什么?(一)》
《NLP深入学习:大模型背后的Transformer模型究竟是什么?(二)》

本文主要介绍常常听到的 Transformer Block 的概念,以及如何实现一个 Transformer Block。

2. Transformer Block

回顾一下 Transformer 的完整模型:

我们常说的 Transformer Block 对应图中解码器的上部分。为了具体展示流程,我们假设有一句话:"Every effort moves you" 作为输入,经过蓝色框中的 Transformer Block 之后输出,如下图:

图中蓝色的部分就是所谓的 Transformer Block。

3. 代码实现

BERT 源码已经实现了 Transformer 的细节,完整源码参考 Pytorch Bert,这里把 Transformer Block 实现的框架贴出来

python 复制代码
import torch.nn as nn

from .attention import MultiHeadedAttention
from .utils import SublayerConnection, PositionwiseFeedForward


class TransformerBlock(nn.Module):
    """
    Bidirectional Encoder = Transformer (self-attention)
    Transformer = MultiHead_Attention + Feed_Forward with sublayer connection
    """

    def __init__(self, hidden, attn_heads, feed_forward_hidden, dropout):
        """
        :param hidden: hidden size of transformer
        :param attn_heads: head sizes of multi-head attention
        :param feed_forward_hidden: feed_forward_hidden, usually 4*hidden_size
        :param dropout: dropout rate
        """

        super().__init__()
        self.attention = MultiHeadedAttention(h=attn_heads, d_model=hidden)
        self.feed_forward = PositionwiseFeedForward(d_model=hidden, d_ff=feed_forward_hidden, dropout=dropout)
        self.input_sublayer = SublayerConnection(size=hidden, dropout=dropout)
        self.output_sublayer = SublayerConnection(size=hidden, dropout=dropout)
        self.dropout = nn.Dropout(p=dropout)

    def forward(self, x, mask):
        x = self.input_sublayer(x, lambda _x: self.attention.forward(_x, _x, _x, mask=mask))
        x = self.output_sublayer(x, self.feed_forward)
        return self.dropout(x)

4. 参考

《NLP深入学习:大模型背后的Transformer模型究竟是什么?(一)》
《NLP深入学习:大模型背后的Transformer模型究竟是什么?(二)》

欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;

欢迎关注知乎/CSDN:SmallerFL;

也欢迎关注我的wx公众号(精选高质量文章):一个比特定乾坤

相关推荐
蚂蚁20141 小时前
卷积神经网络(二)
人工智能·计算机视觉
z_mazin3 小时前
反爬虫机制中的验证码识别:类型、技术难点与应对策略
人工智能·计算机视觉·目标跟踪
lixy5793 小时前
深度学习3.7 softmax回归的简洁实现
人工智能·深度学习·回归
youhebuke2254 小时前
利用deepseek快速生成甘特图
人工智能·甘特图·deepseek
訾博ZiBo4 小时前
AI日报 - 2025年04月26日
人工智能
郭不耐4 小时前
DeepSeek智能时空数据分析(三):专业级地理数据可视化赏析-《杭州市国土空间总体规划(2021-2035年)》
人工智能·信息可视化·数据分析·毕业设计·数据可视化·城市规划
AI军哥4 小时前
MySQL8的安装方法
人工智能·mysql·yolo·机器学习·deepseek
余弦的倒数4 小时前
知识蒸馏和迁移学习的区别
人工智能·机器学习·迁移学习
Allen Bright4 小时前
【机器学习-线性回归-2】理解线性回归中的连续值与离散值
人工智能·机器学习·线性回归
青松@FasterAI5 小时前
【程序员 NLP 入门】词嵌入 - 上下文中的窗口大小是什么意思? (★小白必会版★)
人工智能·自然语言处理