当前位置:   article > 正文

Transformer中的FeedForward_transformer feed forward

transformer feed forward

Transformer中的FeedForward

flyfish

class PoswiseFeedForwardNet(nn.Module):
    def __init__(self, d_ff=2048):
        super(PoswiseFeedForwardNet, self).__init__()
        # 定义一维卷积层 1,用于将输入映射到更高维度
        self.conv1 = nn.Conv1d(in_channels=d_embedding, out_channels=d_ff, kernel_size=1)
        # 定义一维卷积层 2,用于将输入映射回原始维度
        self.conv2 = nn.Conv1d(in_channels=d_ff, out_channels=d_embedding, kernel_size=1)
        # 定义层归一化
        self.layer_norm = nn.LayerNorm(d_embedding)
    def forward(self, inputs): 
        #------------------------- 维度信息 -------------------------------- 
        # inputs [batch_size, len_q, embedding_dim]
        #----------------------------------------------------------------                       
        residual = inputs  # 保留残差连接 
        # 在卷积层 1 后使用 ReLU 激活函数 
        output = nn.ReLU()(self.conv1(inputs.transpose(1, 2))) 
        #------------------------- 维度信息 -------------------------------- 
        # output [batch_size, d_ff, len_q]
        #----------------------------------------------------------------
        # 使用卷积层 2 进行降维 
        output = self.conv2(output).transpose(1, 2) 
        #------------------------- 维度信息 -------------------------------- 
        # output [batch_size, len_q, embedding_dim]
        #----------------------------------------------------------------
        # 与输入进行残差链接,并进行层归一化
        output = self.layer_norm(output + residual) 
        #------------------------- 维度信息 -------------------------------- 
        # output [batch_size, len_q, embedding_dim]
        #----------------------------------------------------------------
        return output # 返回加入残差连接后层归一化的结果
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

PoswiseFeedForwardNe继承自PyTorch的nn.Module类。该网络包含两个一维卷积层和一个层归一化操作。在前向传播过程中,该网络首先对输入进行卷积操作,然后通过ReLU激活函数进行非线性变换,接着进行降维操作,并与原始输入进行残差连接,最后通过层归一化得到输出。

具体来说,函数初始化时,根据参数d_ff设置两个一维卷积层的输出维度。在前向传播过程中,输入的维度为[batch_size, len_q, embedding_dim],首先将输入保留为残差连接的副本。然后,通过一维卷积层1将输入映射到更高维度,并在卷积层1后使用ReLU激活函数。接着,通过一维卷积层2将输出映射回原始维度。最后,将卷积层2的输出与原始输入进行残差连接,并通过层归一化操作得到最终输出。
在这里插入图片描述
上述部分在整体的位置
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/908494
推荐阅读
相关标签
  

闽ICP备14008679号