序言
1、bert、transformer 比较传统的rnn
1、传统缺点:seq2seq使用循环网络固有的顺序特性阻碍样本训练的并行化,这在更长的序列长度上变得至关重要,因为有限的内
存限制样本的批次大小;传统的seq2seq 处理时刻数 0-50,bert可以处理 几百个时刻长度的序列。
2、新结构:Transformer,这种模型架构避免循环并完全依赖于attention机制来绘制输入和输出之间的全局依赖关系。 Transf
ormer允许进行更多的并行化
3、优势总结:
① bert、transformer 引入 位置嵌入 的思想,因此可以保证前后关系依赖的前提下实现并行化,bert网络比传统的r
nn网络运行速度快很多
② 就算LSTM 引入了更新门、遗忘门,它不能完美解决 state 方向的梯度消失问题,因此LSTM处理的序列长度通常不超过
50,bert网路可以处理更长的序列。
③ 传统的word2vec训练完词向量以后,RNN网络不会考虑相同的词在不同语境之间的含义不同,而bert网络 会将同一个词的上下语境
加入词当中。
④ 打破了传统seq2seq解码器的输出 太过于依赖 编码器attention向量。
4、bert、transformer、传统rnn的缺点:
虽说 他们 结构有差异,但是都属于 FC 类型的网络。
一、transformer 网络
1、self-attention
Self-attention:有时称为intra-attention,是一种attention机制,它关联单个序列的不同位置以计算序列的表示。 Self-attention已成功用于各种任务,包括阅读理解、摘要概括、文本蕴涵和学习与任务无关的句子表征。
1、self-attention的理解:
顾名思义,就是自己对自己的attention,它主要是为了 找出 当前时刻的词 对于当前整个序列其他时刻的词之间的位置关系
和依赖的权重关系,self-attention 编码器输出该时刻的结果 就不单单是该时刻该单词的信息,而是融合了整个序列 其他词与该
词权重依赖关系与位置关系的融合信息。 它的表现结果如下:
2、网络基本结构解析
(1)transformer 大致结构
- 注意:① transformer 编码器、解码器输入 input 序列时与 LSTM 不同,LSTM 网络每一次只输入一个时刻的
- 文本,transformer 输入是多时刻同时输入(所有时刻embeding数据)并行执行结构。
- ② transformer 解码器 虽然也是并行输入,但是无论 训练还是测试 过程,每次只能输出一个时刻。
(2)transformer 训练过程 (用label作为decode输入,并行结构)
1、transformer 在训练时,解码器的每个输入已知(即标签),所以可以直接 位置嵌入并行输入,进行self-attention 提取特
征后 用 改训练时刻的位置的 向量 进行 linear + softmax,而下一个刻训练则用下一时刻对应位置的 解码器输出向量 进
行linear + softmax训练。
(3)transformer 测试过程 (需要进行masked,并行结构)
1、在预测过程中,transformer解码器也是一个并行输入,一次只能预测一个词语,但是每一时刻输入需要参考前面时刻输出,但
是要记得的是需要参考前面所有已知预测的时刻进行self-attention,而当前时刻词语后面的时刻词语 则用 masked 的方式
将其掩盖掉进行linear+ argmax测试。最后,和 训练过程一样,每次预测都要选取对应位置的解码器输出的向量进行
linear + argmax 预测。
(4)encode到decode 的 attention 工作过程
1、encode 中的 Value Key 矩阵 构建方式 与 self-attention 中 key value 相同
3、transformer 编码器 与 解码器 结构
(1)encode 编码器基本结构
- 每个Encoder 包含两层结 构: SelfAttention以 及feedforward NN 构成。当然还有残差结构与归一化操作。
- 加上 残差结构 与 归一化 操作的 编码器
1、注意:
① 编码器的输出维度结构:
输入多少时刻的词,输出就是多少时刻的词,它们的时刻数相同,用于 与解码器 之间的attention做准备
(2) decode 解码器基本结构
- 解码器只是在Self-Attention和 feed-forward NN之 间增加了一个 Encoder-Decoder Attention
- 完整的结构
执行过程:
4、位置嵌入 position embedding
1、模型还没有描述词之间的顺序关系,也就是如果将一个句子打乱 其中的位置,也应该获得相同的注意力,为了解决这个问题,
论 文加入了自定义位置编码,位置编码和word embedding长度相同 的特征向量,然后和word embedding进行求和操作。
2、位置嵌入的作用
transformer 网络编码器的输入是 多时刻 词embeding,为了使得并行执行的网络学习到词与词前后顺序,因此在词向
量输入网络前用 位置向量 进行标记。
例: 我 是 中国 人
0 1 2 3
将 位置 0,1,2,3..... 余弦信号 的方式进行 嵌入。
4、muti-head-self-attention、masked 概念
1、一个head相当于提取一种特征,类似于CNN的多输出通道一样吧,muti-head可以提取文本更多的特征。
(1)self-attention 执行过程
- K、V、Q生成的方式
- batch_size ==1 时 self-attention 执行的过程
- batch_size + self-attention 执行的过程
- self-attention最终表现结果
(2)muti-head-self-attention
- cancat 合并 后 进行 linear转化为 原来输入时的维度
(3)解码器中 masked 概念
Mask:遮挡掩盖的意思,比如:把需要预测的词给挡住。出现出 现在OpenAI GPT和Bert中。
Q:我|困|了 A:早点|休息 随机干扰句:你|该|吃饭|了
Input = [CLS] 我 [MASK] 了 [SEP] 早点 [MASK] [SEP]
Label = IsNext
Input = [CLS] [MASK] 困了 [SEP] 你该 [MASK] 饭了 [SEP]
Label = NotNext
5、transformer 结构结构中 FFN 层、残差结构、normal 归一化操作
(1)Feed Forward 层 (FNN层,两层FC结构)
-------- FNN 层计算方式
1、FFN层目的:
将 self-attention 提取的特征向量 做 FC 特征转换,增加的模型的可表达能力。
(2)残差结构 Residuals
残差结构的作用:
类似 resnet 的思想,随着模型的层数递增,防止模型学习效果反而变差,提供模型方向BP一种额外的道路,至少让模
型的效果不会比原来差。
- 图解
(3)layer normal 归一化
1、作用:
① 无量纲化,使得数据 zero-center,防止zigzag现象,加快模型的收敛速度。
② 一定程度上缓解过拟合
详情:
目的类似于 BN 层的三个作用,具体看
https://blog.csdn.net/qq_16555103/article/details/89914946
- 两种 normaliztion 的方式: batch normaliztion、layer normaliztion
transformer 结构用的是 layer normaliztion
6、Final Linear and Softmax Layer
- 映射词汇表 负采样 构建 softmax 损失函数
二、transformer 文献名词
1、放缩点积attention(scaled dot-Product attention)
1、放缩点积attention:
self-attention 权重α计算方式
- 常见的 query 与 key 计算 权重α的公式
2、多头注意力(Multi-headed attention)机制
多头attention的Query,Key,Value首先进过一个线性变换,然后输入到放缩点积attention,注 意这里要做h次,其实也就是所谓的多头,每一次算一个头。而且每次Q,K,V进行线性变换的参 数W是不一样的。然后将h次的放缩点积attention结果进行拼接,再进行一次线性变换得到的值作 为多头attention的结果。
三、BERT网络 ------ 语言模型
1、bert是一个语言模型,其目的就像是利用transformer encoder 的部分,它是transformer结构训练过程 encode 的一个产
物,对序列的 每一个词都加入了 上下文的权重信息(self-attention),最终获得一个包含 全文各处不同 权重的 向量。
至于后续对该向量做什么操作就不是bert的范畴了(实际上任务常常融入bert模型,两者同时训练)。
2、bert 训练词向量与 word2vec 有何不同?
word2vec 词向量一旦预训练完成,后续相同的词在不同语境的含义不会发生变化。
bert 训练的词向量会考虑到相同的词在不同语境中含义不同,词向量训练过程会参考上下文语境的权重关系 进行 融合输出。
- 注意:一个transformer 输入一个时刻的词embeding(每一层的transformer是并行执行),因此上述bert网络中有
- 两层结构,一共有2N个transformer结构;他相当与一个 双向的全连接。
1、bert网络的优势
1、BERT语言模型优势
① BERT 使用 Masked(掩码) 语言模型(也称为 “完形填空” 任务)来实现预训练好的深度双向表征。
② BERT 使用的是一个双向的全连接结构,从图中可以看出是在所有的网络层中都受到左右文本的共同作用。
③ BERT 使用的是 transformer 结构,因此它是一个并行执行的结构,它的运行速度较快
④ BERT 是一种 12/24 ... 层transformer 结构(muti-head-attention),提取的文本信息特征比较丰富
2、bert 网络 结构
CLS:每个序列的第一个 token 始终是特殊分类嵌入(special classification embedding)向量,选择该向量做任务,即 CLS。
对应于该 token的最终隐藏状态(即,Transformer的输出)被用于分类任务的聚合序列表示。如果没有分类任务的话,这个
向量是被忽略的。
SEP:用于分隔一对句子的特殊符号。有两种方法用于分隔句子:第一种是使用特殊符号 SEP;第二种是添加学习句子 A 嵌入到
第一个句子的每个 token 中,句子 B 嵌入到第二个句子的每个 token 中。如果是单个输入的话,就只使用句子 A 。
(1)bert 网络输入
token:令牌,相当于输入端口
(2)bert Masked Language Model(掩盖语言模型)
(3)bert 网络 四种问题
3、BERT 训练过程
(1)“完形填空”:Maked LM
1、用 bert masked 的位置所抽取的词向量 做一个 简单的 linear + softmax 分类,如果 分类成功找到 被masked的词,
这表明 bert 模型 训练成功。
(2)用两个句子连贯性 二分类 训练
4、 怎么使用 BERT
思考:用bert 做任务(情感分析等分类任务)需要用bert先训练好 词向量表达,然后用这个向量做分类模型训练吗?
答案: 任务 会融入 bert 中,词向量表达与分类模型是同时训练的
- bert 网络 四种类型的任务:
(1)single 序列的分类问题:
(2)single 序列 每一个词的分类问题:
(3)double 序列 分类问题: 判断 回答/推论 是对还是错还是unknow
(4)double 序列 阅读理解:QA