Transformer
是一个sequence to sequence(seq2seq)的模型
即是一个输入是一个sequence, 输出是一个sequence. 并且输出的sequence的长度由模型来决定.
如语音辨识: 输入是声音信号, 输出是语音识别的文字. 或者翻译: 输入一种语言输出另一种语言.
虽然seq2seq可以解决各式各样的的问题, 但是不见得是最好用的. 针对问题客制化模型会更好, 但是seq2seq还是很厉害的.
很多问题虽然并不觉得是seq2seq的model的问题但是也可以用它硬解.
比如multi-label classification
一个文章可以归类到很多类. seq2seq输入文章, 输出model认为的类别.
Seq2seq 结构!
两大块:encoder, decoder. input一个sequence, 由encoder处理, 处理好的结果给decoder, 然后决定要输出什么样的结果.
seq2seq 的任务就是给一排向量输出另外一排向量.
encoder
encoder里面有很多block, 用来实现不同的功能, 每个block都需要多个layer来实现他们需要的功能.
每个block里面都是输入一个向量, 输出一个向量.
在transformer中 每个block的流程大致是:
先对输入的一排向量或者叫sequence做self-attention.
然后将得到的一组向量再输入给FC fully connected network中,输出一排向量, 这一排就是整个block的输出.
细致来说: transformer对self-attention的应用还有变化:
- 会将self-attention输出的向量, 与对应的输入向量相加得到真正的输出. 这样的架构叫做residual connection 残差链接. 得到residual之后在进行normalization(不是batch normalization, 而是layer normalization)
layer normalization: 输入一个向量, 对这个向量的所有dimension维度计算平均值mean m 和标准差 standard variance σ \sigma σ.
然后normalize: x i ′ = x i − m σ x'_i = \frac{x_i - m}{\sigma} xi′=σxi−m
- 得到layer normalization之后的输出才是FC的输入. 而FC也同样经过residual的处理. 同样将FC的input和output加起来. 然后在layer normalization.
- 输出上一步的结果
这就是一个block的内容.