1.torch.nn.Transformer

classtorch.nn.Transformer(d_model=512, nhead=8, num_encoder_layers=6, num_decoder_layers=6, dim_feedforward=2048, dropout=0.1, activation=, custom_encoder=None, custom_decoder=None, layer_norm_eps=1e-05, batch_first=False, norm_first=False, bias=True, device=None, dtype=None)

一个Transformer模型。
用户可以根据需要修改其属性。该架构基于论文《Attention Is All You Need》。作者包括Ashish Vaswani、Noam Shazeer、Niki Parmar、Jakob Uszkoreit、Llion Jones、Aidan N Gomez、Lukasz Kaiser和Illia Polosukhin。该论文发表于2017年,并收录于《Advances in Neural Information Processing Systems》中,页面为6000-6010。

参数说明

d_model (int):编码器/解码器输入中预期的特征数量(默认值=512)。
nhead (int):多头注意力机制中的头数(默认值=8)。
num_encoder_layers (int):编码器中的子编码层数量(默认值=6)。
num_decoder_layers (int):解码器中的子解码层数量(默认值=6)。
dim_feedforward (int):前馈网络模型的维度(默认值=2048)。
dropout (float):Dropout的值(默认值=0.1)。
activation (Union[str, Callable[[Tensor], Tensor]]):编码器/解码器中间层的激活函数,可以是字符串(如“relu”或“gelu”)或单参数的可调用函数。默认值:relu。
custom_encoder (Optional[Any]):自定义编码器(默认值=None)。
custom_decoder (Optional[Any]):自定义解码器(默认值=None)。
layer_norm_eps (float):Layer Normalization组件中的eps值(默认值=1e-5)。
batch_first (bool):如果为True,则输入和输出张量的格式为 (batch, seq, feature);如果为False,则格式为 (seq, batch, feature)。默认值:False。
norm_first (bool):如果为True,编码器和解码器层将在其他注意力和前馈操作之前执行LayerNorm;否则在之后执行。默认值:False(在之后执行)。
bias (bool):如果设置为False,Linear和LayerNorm层将不会学习加性偏置项。默认值:True。

2.forward

forward(src, tgt, src_mask=None, tgt_mask=None, memory_mask=None, src_key_padding_mask=None, tgt_key_padding_mask=None, memory_key_padding_mask=None, src_is_causal=None, tgt_is_causal=None, memory_is_causal=False)

接收并处理被掩码的源序列和目标序列。

**PS:**如果为任一 [src/tgt/memory]_mask 参数提供了布尔类型的张量,则值为 True 的位置不允许参与注意力机制,这与 torch.nn.functional.scaled_dot_product_attention() 中 attn_mask 的定义相反。

参数说明

src (Tensor):传入编码器的序列(必需)。
tgt (Tensor):传入解码器的序列(必需)。
src_mask (Optional[Tensor]):对源序列的加性掩码(可选)。
tgt_mask (Optional[Tensor]):对目标序列的加性掩码(可选)。
memory_mask (Optional[Tensor]):对编码器输出的加性掩码(可选)。
src_key_padding_mask (Optional[Tensor]):针对每个批次的源序列键的张量掩码(可选)。
tgt_key_padding_mask (Optional[Tensor]):针对每个批次的目标序列键的张量掩码(可选)。
memory_key_padding_mask (Optional[Tensor]):针对每个批次的记忆键的张量掩码(可选)。
src_is_causal (Optional[bool]):如果指定,将应用因果掩码作为 src_mask。默认值:None(尝试检测因果掩码)。
警告:src_is_causal 提供了 src_mask 是因果掩码的提示。提供错误的提示可能导致执行错误,包括前向和后向兼容性问题。
**tgt_is_causal (Optional[bool])**如果指定,将应用因果掩码作为 tgt_mask。默认值:None(尝试检测因果掩码)。
警告:tgt_is_causal 提供了 tgt_mask 是因果掩码的提示。提供错误的提示可能导致执行错误,包括前向和后向兼容性问题。
memory_is_causal (bool):如果指定,将应用因果掩码作为 memory_mask。默认值:False。
警告:memory_is_causal 提供了 memory_mask 是因果掩码的提示。提供错误的提示可能导致执行错误,包括前向和后向兼容性问题。

返回类型:Tensor

形状说明:

-src:
对于未分批的输入:(S, E)
如果 batch_first=False:(S, N, E)
如果 batch_first=True:(N, S, E)

-tgt:
对于未分批的输入:(T, E)
如果 batch_first=False:(T, N, E)
如果 batch_first=True:(N, T, E)

-src_mask:
形状为 (S, S) 或(N ⋅ num_heads, S, S)

-tgt_mask:
形状为 (T, T) 或(N ⋅ num_heads, T, T)

-memory_mask:
形状为 (T, S)

-src_key_padding_mask:
对于未分批的输入:(S)
否则为 (N, S)

-tgt_key_padding_mask:
对于未分批的输入:(T)
否则为 (N, T)

-memory_key_padding_mask:
对于未分批的输入:(S)
否则为 (N, S)

注意事项:

[src/tgt/memory]_mask:
确保位置 i 可以访问未被掩码的位置:
如果提供的是 BoolTensor,值为 True 的位置将被禁止访问,值为 False 的位置不受影响。
如果提供的是 FloatTensor,其值将被添加到注意力权重中。

[src/tgt/memory]_key_padding_mask:
用于指定注意力中需要忽略的键元素:
如果提供的是 BoolTensor,值为 True 的位置将被忽略,值为 False 的位置不受影响。

输出形状:

output:
对于未分批的输入:(T, E)
如果 batch_first=False:(T, N, E)
如果 batch_first=True:(N, T, E)
注意:由于Transformer模型的多头注意力机制,Transformer的输出序列长度与解码器目标序列的输入长度相同。

变量说明:

S: 源序列长度
T: 目标序列长度
N: 批次大小
E: 特征数量

3.Transformer.generate_square_subsequent_mask()

static generate_square_subsequent_mask(sz, device=None, dtype=None)

生成一个用于序列的方形因果掩码。
被掩码的位置用 float(‘-inf’) 填充,未被掩码的位置用 float(0.0) 填充。

返回类型: Tensor