【Transformer】Attension is All You Need - 模型理解
用简短的话概括整个Transformer从训练到工作的过程:
1、训练:
对于Encoder,输入原语言的大量句子,对于每一个句子,首先进行每个token进行词义嵌入和位置嵌入(一般是三角函数,产生token个三角函数,每个三角函数带入位置值),两个叠加变成E,然后通过E*Wq, E*Wk, E*Wv,求得整个句子的Q, K, V。然后叠加到原本的E上面,修改C = LayerNorm(E + ΔE),其中ΔE = Attention(Q, K, V) = Softmax( (Q K^T) / sqrt(d_k) ) V,之后把修改过的E矩阵输出,输出编码矩阵C(不使用Masking)
对于Decoder,他的目的是关注原语句中关键词的部分。它输入目标语言的对应翻译目标序列target,同步输入来自Encoder的编码矩阵C,预测下一个token生成是什么的概率。在训练时,Decoder的输入是右移一位的目标序列(teacher forcing机制,例如输入<start> token1 token2 ...,预测token1 token2 ... <end>),而非直接“对应翻译目标序列target”。这样能并行计算所有位置的预测概率,与真实target计算交叉熵损失。这点在推理阶段才真正自回归生成(逐token预测)。
最后根据和目标序列target的交叉熵来进行梯度下降和反向传播,调整所有W中的参数
2、工作阶段
对于Encoder,通过Self-Attention,和训练状态类似
=>其内部的参数Wq,Wk,Wv目的是让每个token都能变成表达语义的向量
对于Decoder,Decoder由多个层(block)组成,每层包含三种子层:Masked Self-Attention、Cross-Attention和前馈网络。
第一层是Masked Self-Attention,每次的输入是模型自回归预测的目标语言token,输出一个对于预测token的编码C'矩阵(和Encoder类似)
=>其内部参数Wq', Wk', Wv'目的是学习目标语言的生成规律(类似词义空间)
第二层是Cross-Attention,输入MSA层的预测矩阵C'作为Q矩阵的生成矩阵,Q = C'*Wq',同时输入来自Encoder的编码C矩阵,得到K = C*Wk', V = C*Wv'
=>其内部参数Wq'', Wk'', Wv'' 目的是让Decoder学会在源语言语义空间里找对应的词,了解句子结构和重点
Decoder到这时候,计算完Cross-Attention的QKV之后,输出一个C'',这里的C''最终会通过下面的神经网络转换成分数->概率
第三层是一个前馈神经网络(FFN),FFN可以让模型深度思考每个token的语义,输出的维度进行维度对齐,和Decoder输出的维度一致。它输出预测的向量表示,最后再通过 Linear + Softmax 映射到词表概率。
Linear线性层要做的是:把每个 h_t(维度 d)映射到词汇表的打分空间(维度 V,V是词汇表中的所有词数量)。最后输出一个t x V大小的矩阵,表示当前对于V个词,每个词的分数,然后再转换成概率
=>每层Decoder都有自己独立的一组 Wq, Wk, Wv 参数,不在层间共享。
例子:翻译I have a cat。比如我的Decoder自回归到"<start>我"这个序列,然后自回归输入了Decoder,这时候,Decoder继续通过MSA层把"<start>我"词嵌入,得到一个输入矩阵X',然后进行CrossAttention,把X'和原本的输出矩阵C进行Cross-Attention操作,最后得到了一个Decoder的输出矩阵C',然后经过FNN,得到C'',再进行线性变换,先映射到词表,然后进行Softmax转换成概率分布,最后自回归"<start>我有"
下图为具体结构示意图

登录后方可回帖