了解并实现一个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公众号(精选高质量文章):一个比特定乾坤

相关推荐
程序员cxuan6 小时前
Claude 官方的学习教程,太强了。
人工智能·后端·程序员
小强闯江湖7 小时前
不只是让 AI 写代码:ViewCompose 把 Android UI 做成了可编译、可渲染的闭环
android·人工智能·kotlin
肆仲冬7 小时前
不用框架手写 AI Agent:ReAct 推理链和上下文管理的工程实践
人工智能
明月_清风8 小时前
发现一个超系统的 AI Agent 学习地图 —— Agent Atlas 推荐
人工智能·后端·agent
百度Geek说8 小时前
商业客户端Harness资产管理与应用实践
人工智能
MacroZheng8 小时前
同事问我:"Claude Code经常失忆,不怕它把项目搞炸?",我:"怕,三个Markdown文件给它装个永不丢失的外置大脑!"
java·人工智能·后端
小酒星小杜8 小时前
一个人,也能做出有人设、能追更、可商业化的漫画内容 IP
人工智能·产品·设计
字节跳动视频云技术团队8 小时前
从出片到出海:AI MediaKit 重塑短剧全链路生产力
人工智能·音视频开发
一点一木8 小时前
憋了7周没动静,OpenClaw 2.0带着16000个PR杀回来了
人工智能·github
anyup9 小时前
DeepSeek Harness 从零上手:从认识到写出第一个插件
人工智能·openai·deepseek