transformer
self-attention(自注意力机制)
机制:
- 输入经过编码后得到向量
- 想得到当前词语上下文的关系(可以当做是甲醛)
- 构建三个矩阵分别来查询当前词跟其他词的关系以及特征向量表达
(Queries, Keys, Values)
Queries
:要去查询的
Keys
:等着被查的
Values
:实际的特征信息
q
与k
的内积表示有多匹配,最终的得分值经过softmac就是最终上下文结果
s
o
f
t
m
a
x
(
Q
×
K
T
d
k
)
×
V
=
Z
softmax(\frac{Q\times K^T}{\sqrt{d_k}})\times V=Z
softmax(dkQ×KT)×V=Z
整体计算流程:
- 每个词的
Q
会跟每一个K
计算得分 - softmax后就得到整个加权结果
- 此时每个词看到的不只是它前面的序列,而是整个序列
- 同一时间计算出所有词的表示结果(矩阵乘法)
multi-head
机制
- 通过不同的head得到多个特征表达 ( q i , k i , v i ) (q_i,k_i,v_i) (qi,ki,vi),一般是8组
- 将所有的特拼接在一起
- 可以通过再一层全连接再降维
结果
- 不同的注意力结果
- 得到的特征向量表达也不相同
其余操作
- 堆叠多层self-attention
- 位置编码(希望模型能对位置有额外的认识)
input = embedding + position emcoddding
- 以层为单位的归一化(LayerNorm),往常的都是BatchNorm以Batch为单位归一化,但是此训练一般Batch-size = 1
- 使用基本的残差连接方式作为连接方式
Decoder(解码器)
- Attention计算不同(Decoder提供
Q
,Encoder提供K,V
) - 加入了Mask机制(对未来的预测进行Mask,不能利用)
整体
- self-attention
- Multi-Head
- 多层堆叠,位置编码
- 并行加速训练
BERT
使用transformer的encoder端
训练BERT(有很多方法)
方法一:随机mask句子中的词汇,预测被mask的是什么
方法二:预测两个句子是否应该连在一起
…