现在很多应用只分别使用 Transformer 的 Encoder 和 Decoder 部分。不过,我很难理解其中的区别。
如果 GPT 仅使用 Decoder 而 BERT 仅使用 Encoder,这是否意味着两者之间的唯一区别基本上在掩码部分?
解码器中的交叉注意力层被省略了,因为 GPT 中没有编码器,对吧?
现在很多应用只分别使用 Transformer 的 Encoder 和 Decoder 部分。不过,我很难理解其中的区别。
如果 GPT 仅使用 Decoder 而 BERT 仅使用 Encoder,这是否意味着两者之间的唯一区别基本上在掩码部分?
解码器中的交叉注意力层被省略了,因为 GPT 中没有编码器,对吧?
BERT 是 Transformer 编码器,而 GPT 是 Transformer 解码器:
你是对的,鉴于 GPT 是仅解码器,没有编码器注意块,因此解码器等效于编码器,除了多头注意块中的掩蔽。
然而,BERT 和 GPT 的训练方式有一个额外的区别:
BERT是一个Transformer编码器,这意味着对于输入中的每个位置,相同位置的输出是相同的token(或[MASK]masked token的token),即每个token的输入和输出位置是相同的。
GPT 是一个 Transformer 解码器,这意味着它用于自回归推理。这意味着输入中的标记相对于输出向右移动了一个位置,即如果输出为 [ the, dog, is, brown, </s>],则输入为 [ <s>, the, dog, is, brown, </s>]。
除此之外,在推理时,BERT 一次生成所有输出,而 GPT 是自回归的,因此您需要一次迭代地生成一个令牌。