GPU的作用是进行矩阵运算,这样才是真正加速的地方,深度学习中很多的矩阵需要计算。
Tansformer
Transformer优点:
- 并行计算(解决RNN不能并行问题)。
- self-attention。
- 多语义词(杜鹃(花、鸟)),在不同语境和上下文表示不一样。
Self_attention
转换为Q(查询向量),K(被查询向量),V(特征信息),计算Q与K的内积
- 每一个词Q会跟整个序列中每一个K做内积计算得分,基于得分分配权重(内积就是计算相似度,垂直就无关系)
- 下图是一个词的向量计算的原理,如果合成为一个矩阵(就是并行计算了),这个就是Transfomer并行计算的作用。
归一化,对分值转换为概率(向量长度越长,内积值越大,为了避免这个原因导致不合理的值,加上向量维度的根号,合理化值)
归一化的只是对最后一个维度值进行归一化,加权到V上。
矩阵并行计算,权重是矩阵乘法计算
多头注意力机制
layer Normalize和残差连接(防止经过self-Attention的向量比出事的向量更差)![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5571cc5275402b1c0d41f8dd31727eee.png)
Decoder端
Mask机制的作用,只能够用预测的序列编码计算,把未知的编码遮掩掉,不能够成为已知条件。
整体框架
- 输入句子序列转换为ID索引
- 词初始化编码或者利用BERT预训练模型进行微调
- 加入位置编码(周期性信号随着位置变换)
- N层的self-attention
- 8头堆叠的self-attention,残差连接。
BERT预训练
方法一: MASK
模型能够把MASK的词都能够预测出来了,那么模型就学到了上下文的语义了。
方法二:预测两个句子是否连贯
BERT用于下游任务(阅读理解)
联合训练(在序列下游任务同时,对BERT预训练词向量进行微调)
1.文字、问题、结果都是索引转换成向量,返回的结果也是预测的在文章中的位置。
2. 预测答案在文章中的起始和终止位置:
额外训练两个起始和终止位置向量,通过问题和答案标签训练分类器,返回索引的位置。
BERT具体代码实现步骤
构建self_attention
num_hidden_layers:12层
prev_output:embedding层(batch*len,dim=768)
构建Query句阵
12头,64维
构建Key矩阵
构建value矩阵
转换维度:
将原来[batch,len,N,hidden_dim]转换为[batch,N,len,dim]仅仅最后两维做内积
Softmax
得分与V特征信息点积:
matmul之前都是对V的维度进行改变能够与attention_probs的维度[B,N,len,len]进行点积
V=[B,N,L,Hidden_dim]