了解并实现一个Transformer Block


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 实现的框架贴出来

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

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
抱歉,我是一名语言模型,无法进行具体的代码实现。但我可以为您提供一些Transformer的基本知识和实现步骤。 Transformer是一种基于自注意力机制的深度学习模型,广泛应用于自然语言处理和图像处理领域。其核心思想是通过多层的自注意力和前馈神经网络来学习输入序列之间的依赖关系,并生成对应的输出序列。 下面是一个基本的Transformer模型的实现步骤: 1. 定义输入层和输出层的嵌入矩阵。输入层嵌入矩阵将输入序列中的词汇转换为向量表示,输出层嵌入矩阵将输出序列中的词汇向量表示转换为词汇。 2. 定义多层的Encoder和Decoder。每个Encoder包含一个自注意力层和一个前馈神经网络层,用于学习输入序列的特征表示。每个Decoder也包含一个自注意力层和一个前馈神经网络层,用于生成输出序列的特征表示。 3. 定义多头自注意力机制。每个头都会学习不同的关注点和权重,可以更好地捕捉序列中的语义信息。 4. 定义位置编码器。由于Transformer没有使用递归结构,因此需要为输入序列中的每个位置提供位置信息,以帮助模型学习序列中的顺序关系。 5. 定义损失函数。可以使用交叉熵损失函数来计算模型的预测结果与实际结果之间的差异。 6. 训练模型。通过反向传播算法来更新模型的参数,使其能够更好地适应输入序列和输出序列之间的关系。 以上是Transformer模型的基本实现步骤,具体实现细节还需要根据具体任务和数据集进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SmallerFL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值