论文导航
前言
不知道有没有人像我一样,再最开始接触 Transfomer 和Bert 的时候,感觉就是云里雾里,只知道着 Bert 不是基于 Transformer 的构建的吗,对他们之间的具体区别一直没有清晰到位的理解 (((φ(◎ロ◎;)φ)))。于是在论文阅读和资料查找答疑之后,用这篇博文记录自己的理解,也方便以后回顾。
Transfomer
transfomer 原意为变形金刚,由于网络中attention部分就像是用于组装的零件,能根据我们的设计和需要构成各种模型,最终成为能完成各种任务的“变形金刚”。由此可知,attention 就是其中最重要的部分。
Transformer 抛弃了以前的 CNN 结构和 RNN 结构,提出了全新的编解码框架,即由编码端 encoder 和解码端 decoder 两个部分组成。 其结构如下图:
流程概述
(1)input 经过 Embedding (直接一句话的所有 embedding)
(2)每一个单词加上对应的 位置编码
(3)经过一个 MHA(multi-head position)同时做一个 shortcut 处理后经过一个 normalization
(4)经过一个两层的全连接网络同时做一个 shortcut 处理后经过一个 normalization
要点分析
- Multi-Head Attention
其中的 attention 是为 self-attention , multi-head 就是将多个 self-attention 叠在一起,所以只需要明白 self-attention ,Multi-Head Attention 就迎刃而解了。
self-attention 中每个单词 i 的 embedding 复制成为三个相同的向量后分别乘以系数矩阵 WQ,WK,WV(矩阵均随机初始化,通过训练得到新值,每一个单词都是乘以相同的 WQ,WH,WV ) 得到 qi, ki, vi(其中 q 代表 queries , k 代表 keys , v 代表 values)
用
对于每一个单词 i,其 qi 乘以其他单词 j 的 kj 并将每一个结果结果然后除以键向量(即k)维数的开方值 将这一列结果值进行 softmax 得到对应的系数权重, 再将这些系数权重和其对应单词的 v 做加权求和,得到了单词对应的输出向量 z
通过上述计算之后,每一个输出向量 z 都包含了其他词的信息,而且系数权重的大小能够反映词与词之间的相关程度的深浅。
接下来说说 multi-head ,multi-head 的中文意思就是多头,即对同一组输入的 embedding,我们可以进行多个 attention 操作。每一个 attention 都有独立的 WQ,WK,WV 系数矩阵 ,每一个 attention 对应一个输出,对吼将这些输出连接起来(直接拼接),并乘以矩阵 WO 做一次线性变换得到输出 - 位置编码
因为 transformer 是对全局进行 attention,即前面的单词也能看见后面的单词,因此 transformer 丢失了时序信息,为解决这个问题,加入了位置编码。将位置 embedding 和词 embedding 相加,作为最终输入 embedding。
Bert
在结构模型上就是将 transformer 的 encoder 作为一个基本单元,把 N 个这样的基本单元顺序连接起来。
Bert 是一个 ①预训练 ②微调 的方案。
- 预训练
包含了两个任务,第一个任务是随机遮盖掉15%的单词,用 mask 替代原单词,让模型去猜测这个单词是是什么;第二个任务是每一个训练样本是一个上下句,有50%的样本,上句和下句是真的(即下句是接上句的),有50%的样本,上句和下句是无关的,让模型判断两个句子之间的关系。这两个任务各自有一个 loss ,将这两个 loss 相加作为总的 loss
优点:
可以充分利用到上下文的信息,使得模型有更强的表达能力,而且能够很好的捕捉到句子之间的关系 - 微调
主要是针对下游任务进行微调。
假设应用于分类任务,取出句子开头的 CLS 标记对应的向量 C,加一层网络 W, 并使用 softmax 进行分类,得到预测结果。