Transformer详解

本文介绍Transformer模型的基本结构,包括Encoder和Decoder的组成与工作原理,并详细解释了位置编码的作用及多头注意力机制的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Transformer全局概括

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:

  1. Encoder和Decoder的个数可以自己决定,Encoder之间的结构是相同的,Decoder之间的结构是相同的,但是Encoder和Decoder之间的结构是不相同的
  2. Encoder之间的结构是完全相同的,但是参数是完全不同的,训练的时候是6个Encoder都在训练
    在这里插入图片描述
    Encoder
    在这里插入图片描述
    Decoder
    在这里插入图片描述

位置编码

在这里插入图片描述

  1. Embedding
    将输入的句子切分成字,每个字定义一个512维的字向量
    在这里插入图片描述
  2. 位置编码
    对于RNN的输入参数u,隐藏参数w,输出参数v,在所有的timestamps,RNN都共享一套参数,更新的时候也是更新整套参数。
    在这里插入图片描述
    RNN是串行化处理,Transformer可以并行化,所有单词可以一起处理,但是忽略了单词间的序列关系(先后关系),这个时候就需要位置编码
    在这里插入图片描述
    将位置编码(512维度)和字向量(512维度)相加,得到最终的Transformer的输入
    在这里插入图片描述
    在这里插入图片描述

多头注意力机制

在这里插入图片描述
在这里插入图片描述

Transformer 是一种用于自然语言处理任务的深度学习模型,它是由 Google 在 2017 年提出的。相比于传统的循环神经网络卷积神经网络,Transformer 采用了全新的 Encoder-Decoder 架构,使用了自注意力机制(Self-Attention Mechanism)来处理输入序列,从而在机器翻译、文本摘要、对话生成等任务上取得了很好的效果。 Transformer 本质上是一个 Encoder-Decoder 架构,其中 Encoder Decoder 都是由多个相同的层堆叠而成。每个层都包含了两个子层,分别是 Multi-Head Attention Feed Forward Neural Network。其中 Multi-Head Attention 是 Transformer 的核心,它使用了自注意力机制来计算输入序列中每个词与其他词之间的关系,从而更好地捕捉上下文信息。 Transformer 的训练过程分为两个阶段:第一阶段是无监督的预训练,使用大量的无标注数据来训练模型;第二阶段是有监督的微调,使用有标注的数据来微调模型,使其适应特定的任务。 下面是一个简单的 Transformer 模型的实现代码: ```python import torch import torch.nn as nn import torch.nn.functional as F class Transformer(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim, num_layers, num_heads, dropout): super().__init__() self.embedding = nn.Embedding(input_dim, hidden_dim) self.encoder_layers = nn.ModuleList([EncoderLayer(hidden_dim, num_heads, dropout) for _ in range(num_layers)]) self.decoder_layers = nn.ModuleList([DecoderLayer(hidden_dim, num_heads, dropout) for _ in range(num_layers)]) self.fc_out = nn.Linear(hidden_dim, output_dim) self.dropout = nn.Dropout(dropout) self.scale = torch.sqrt(torch.FloatTensor([hidden_dim])).to(device) def forward(self, src, trg, src_mask, trg_mask): src_len, batch_size = src.shape trg_len, batch_size = trg.shape src_pos = torch.arange(0, src_len).unsqueeze(1).repeat(1, batch_size).to(device) trg_pos = torch.arange(0, trg_len).unsqueeze(1).repeat(1, batch_size).to(device) src = self.dropout((self.embedding(src) * self.scale) + src_pos) trg = self.dropout((self.embedding(trg) * self.scale) + trg_pos) for layer in self.encoder_layers: src = layer(src, src_mask) for layer in self.decoder_layers: trg = layer(trg, src, trg_mask, src_mask) output = self.fc_out(trg) return output ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值