PyTorch 实现中transformer 块中注意力输出和编码器输出密集层之间的中间(密集)层是什么?

人工智能 自然语言处理 火炬 变压器 伯特
2021-10-26 05:49:37

在 PyTorch 中,transformer (BERT) 模型在注意力层和输出层之间有一个中间密集层,而 BERT 和 Transformer 论文只提到在添加残差连接之后直接连接到编码器的输出全连接层的注意力。

为什么编码器块中有中间层?

例如,

encoder.layer.11.attention.self.query.weight
encoder.layer.11.attention.self.query.bias
encoder.layer.11.attention.self.key.weight
encoder.layer.11.attention.self.key .bias
encoder.layer.11.attention.self.value.weight
encoder.layer.11.attention.self.value.bias
encoder.layer.11.attention.output.dense.weight
encoder.layer.11.attention.output .dense.bias
encoder.layer.11.attention.output.LayerNorm.weight
encoder.layer.11.attention.output.LayerNorm.bias
encoder.layer.11.intermediate.dense.weight
encoder.layer.11.intermediate.dense .bias

encoder.layer.11.output.dense.weight
encoder.layer.11.output.dense.bias
encoder.layer.11.output.LayerNorm.weight
encoder.layer.11.output.LayerNorm.bias

我对注意力输出和编码器输出密集层之间的第三个(中间密集层)感到困惑

1个回答

前馈层是 Transformer 架构的重要组成部分。

除了self-attention层之外,Transformer 架构从整个序列中聚合信息并根据注意力分数转换每个标记,queries并且values有一个前馈层,主要是一个 2 层 MLP,分别处理每个标记:

是的=W2σ(W1X+b1)+b2

在哪里W1,W2是权重,并且b1,b2- 偏见,σ- 是非线性ReLU, GeLU

在此处输入图像描述

这是序列的一种逐点非线性变换。

我怀疑,intermediate这里对应于W1,b1输出大约是W2,b2.