Edit by Mar. 3, 2024
A transformer is a deep learning architecture based on the multi-head attention mechanism, proposed in a 2017 paper "Attention Is All You Need". -- Wiki
从 high level 层面上来看,transformer其实就是一个 black box
。而这个黑匣子由 Encoders
和 Decoders
两个部分组成。
Encoders
和 Decoders
其实是由多个个数相同的 encoders 和 decoders 组成的。论文里使用了6个,但这是超参,可以进行调试。
每一个 encoder 都有相同的结构
,但他们不 share weights
。Decoders 也一样。
在 transformer中,如上图所示,有两个 input part。而这两个 input part 由 input embedding (word embedding) 和 positional encoding 组成。
- Input embedding: 比较常见的input embedding 有 One-hot encoding 和 Word embedding 两种。Input embedding 的本质是将输入输入成一组数字。
- One-hot encoding
- Word embedding 在嵌入空间中生成语义上相似 和 相关单词的类似位置。
- Positional encoding 为
没有循环以及卷积结构
的 transformer 提供 self-attention 能够利用位置信息
。(详见positional_encoding.md)
- 在 embedding 之后,数据过了 encoders 之后,会将 Encoders 输出的结果输入到每一个 Decoder 中。
- 这里循环的部分就来了:Decoders 也有一个输入部分,而这个部分是上一次的结果。比如输入是 “我有一只猫”,那么每一次的 decoders 的输入就是 “开始符号“, ”开始符号 + I“, ”开始符号 + I + have“ + ...
- Decoders 的输出部分还会通过一个 Linear layer 和一个 softmax layer。
其实 encoder block 和 decoder block 长得差不多。 Decoder block 比 encoder block 多的部分是一个 masked multi-head attention。
self-attention