Transformer&BERT

1.Transformer

encode端

a. encode端,是由N(6)个相同的大模块组成,每个模块都有两个小模块组成,分别为多头自注意力以及一个前馈神经网络,另外在每个模块的输出后又接一个求和归一化模块,来求残差。
ⅰ. 首个encode模块的输入为词编码与位置编码的求和,位置编码使用sin,cos函数按照奇偶位置计算得到的结果进行拼接。三角函数不受序列长度限制(不同维度使用不同频率的正/余弦公式进而生成不同位置的高维位置向量)

ⅱ. 其他encode模块的输入为上一个encode模块的输出
ⅲ. 最后一个encode模块的输出以K,V的形式传给decode模块的MultiHeadAttention模块,
ⅳ. 自注意力模块(实际计算是根据矩阵计算得到的)

  1. 输入为利用词嵌入,结合权重矩阵WQ,WK,WV,生成的Q,K,V向量
  2. 利用当前词的查询向量Q,与当前输入的词的所有键向量K做点积,得到权重
  3. 将权重除以sqrt(dk)(键向量长的的根号)再进行softmax,得到最后的权重
  4. 将权重与各自对应的值向量V相乘再相加(加权求和),得到自注意力层再该位置的输出z
  5. 最终得到的z向量即为下一个encode模块的输入

ⅵ. 多头自注意力模块(一般为8头)

  1. 为每个头保持独立的Q,K,V,权重矩阵W,从而产生不同的Q,K,V
  2. 经过八个不同的头运算,得到8个不同的z矩阵,
  3. 将8个矩阵拼接,再与一个权重矩阵Wo相乘(全连接层),得到最终的z矩阵

ⅶ. 残差模块(add&norm)

  1. 每个自注意力层、前馈网络层的周围都有一个残差连接,并且都跟着一个“层-归一化”的步骤
  2. add表示残差连接,Norm表示Layer Norm
  3. 其中sublayer(x)为子模块的输出。
  4. 层-归一化操作即求和与归一化,使用的是LN,因为LN可以对Transformer学习过程中由于多词条embiedding累加可能带来的尺度问题施加约束,相当于对表达每个词的一词多义的空间施加了约束,有效降低模型方差

ⅷ. 前馈神经网络

  1. 一个完全链接的前馈网络,有一个带有ReLU集活的线性转换

decode端

b. decode端:同样由N(6)个模块组成,包括自注意力层,编码-解码自注意力层,前馈神经网络

ⅰ. 自注意力层

  1. 最低端的模块的自注意力层,根据上一个时间步产生的结果(如翻译任务,当前需翻译student,这里的输入就是I am )
  2. 训练时和测试时的输入时不一样的,每次训练时的输入也不一样(shifted right)
    a. 训练时的输入为lable,例如英中翻译时,decoder的输入是中文
    b. 训练时的输入为上次的输入加上输入序列向后移动一位的embedding
    c. 实际不能每次累增输入,而是一次性全部输入,在第一个self-attention对后面的数据进行mask
    d. 测试时,先生成第一个位置的输出,第二次预测时,将其加入到输出序列。
  3. 其他模块的自注意力层,接收的是上一个模块的输出

ⅱ. 编码-解码自注意力层

  1. 输入的查询向量Q是上层子注意力层的输出,K,V都是从Encoder层输出过来的。
  2. 目的是让decoder端的单词给予encoder端对应的单词更多的关注

ⅲ. 前馈神经网络:通encode层的一样

最终线性变换与softmax

c. 最终线性变换与softmax
ⅰ. 线性变换:一个全连接神经网络,将解码组件投射到一个比它大得多的向量里
ⅱ. softmax层:把想来向量里的数据变换成概率,概率最高的单元格就被选中,对应词表中的单词

2.Transformer为什么要multi-head Attention

a. 将模型分为多头,形成多个子空间,让模型关注不同的信息,最后再将各个方面的信息综合起来。
b. 有助于网络捕获到更丰富的特征/信息

3.Transformer相比于RNN/LSTM有什么优势

a. RNN系列模型并行计算能力差,因为要依赖上一时刻的输入
b. Transformer的特征抽取能力比RNN系列好
c. 注意:任何模型都有适用范围,transformer也不是完全能替代RNN系类模型。RNN在很多涉及时序上的任务(语音识别)上仍是首选

4.Transformer是如何训练的,如何测试的

a. 训练阶段

  • ⅰ. 与seq2seq类似,首先encoder端得到输入,得到encoder的表示,然后将其输入到decoder做交互式attetion
  • ⅱ. decoder端,接受label的输入,经过多头self-attention模块后,结合encoder的输出,再结合前馈神经网络,最终得到decoder的输出
  • ⅲ. 经过线性全连接,就可以通过softmax来预测下一个token,然后根据softmax多分类的损失函数,将loss反向传播即可
  • ⅳ. 整体来说,transformer的训练过程相当于一个有监督的多分类任务
  • ⅴ. 注意: encoder端可以并行计算,但docoder不可以,与seq2seq一样,一个接一个的预测出来

b. 测试阶段

  • ⅰ. 与训练阶段唯一不同的是decoder底端的输入,测试阶段的输入是上个时间步的预测结果。

5.为什么说transformer可以替代seq2seq

a. seq2seq最大的问题在于将encoder端的所有信息压缩到一个固定长度中,并将其作为decoder首个隐藏状态的输入,来预测decoder端第一个单词的隐藏状态。在处理序列较长时,会损失encoder端的很多信息。decoder不能关注到其想要关注的信息
b. seq2seq并行能力差
c. transformer引入了self-attention模块,让源序列和目标序列首先自相关起来,这样源序列和目标序列自身的embedding所蕴含的信息更丰富。后续使用前馈神经网络增强了模型的表达能力
d. transformer的并行能力远远超过seq2seq系列的模型

6.Transformer中句子的encoder表示的是什么,如何得到词序信息

a. encoder端得到的时整个输入序列的encoding的表示,而且经过self-attention后,其输入序列的表达更加丰富
b. 词序信息时利用不同频率的正弦和余弦函数

7.Transformer如何并行化

a. 主要体现在self-attention模块,encoder端的transformer可以并行处理整个序列,得到整个输入序列经过encoder的输出
b. 对于输入序列x1,x2.。。self-attention可以直接计算全部的信息,而RNN系列的模型必须按照顺序从x1计算到xn

8.self-attention公式中的归一化有什么作用

a. 随着dk的增大,q*k的结果也随之增大,这样会使softmax函数推入梯度非常小的区域,使得收敛困难(甚至梯度消失)
b. 加入归一化,可以使QK的结果更平滑

9.Bert的基本原理

a. 是一个自编码语言模型,设计了两个任务来训练该模型

  • ⅰ. MLM:采用MaskLM的方式来训练语言模型,选择15%的数据,其中80%被换成【mask】,10%的不变,10%随即替换成其他词,之后根据模型所给的标签去学习这些地方该填的词
  • ⅱ. NSP:增加了一个句子级别的连续性预测任务,为每个训练前的例子选择句子A和B时,50%的情况下B真的是A的下一个句子,50%的概率是随机的一个句子,即预测输入的两个的两个文本是否为连续的文本,引入这个任务可以更好的让模型学到连续的文本片段之间的关系

10.bert是如何利用Transformer的

a. 只是用了transformer的encoder模块,分别使用了12层和24层
b. BERTbase L=12,H=768, A =12 totalparm = 110m,其中l为transformer encoder块的数量,隐藏层维度为H,子注意力头的数量为12
c. 输入方面,bert的输入比transformer多了句编码

11.bert的训练过程

a. Masked LM

  • ⅰ. 任务描述:给定一句话,随机抹去这句话中的一个或几个词,根据剩余词汇去预测被抹去的几个词分别是什么
  • ⅱ. 流程:在一句话中随机选择15的词用于预测,对于在原句中被抹去的词会,80%采用特殊符号mask替换,10%采用一个任意的词替换,10%不变
  • ⅲ. 原因:预测一个词时,模型并不知道输入对应位置的词会是否为正确的词汇(10%正确),迫使模型更多的依赖上下文去预测词会,并且赋予了模型一定的纠错能力
  • ⅳ. 缺点:每次只有15%的数据被标记,意味着模型可能需要更多的预训练步骤来收敛
  • ⅴ. 优点:随机替换也修正了unk问题,强迫模型学习上下文信息

b. Next Sentence Precdiction

  • ⅰ. 任务描述:给定一篇文章中的两句话,判断第二句话在文中是否紧跟在第一句话之后
  • ⅱ. 流程:是段落重排序的简化版,只考虑两句话,判断是否为一段文章中的前后据。实际训练时,从语料库中随机选取50%的正确句对与50%的错误句对进行训练,结合MLM任务,让模型能够更准确地刻画语句乃至篇章层面地语义信息。

c. 总结:

  • ⅰ. bert通过对MLM与NSP任务联合训练,使模型输出的每个字/词的向量表示都尽可能全面、准确地刻画输入文本的整体信息,为后续的微调任务提供更好的模型参数初始值

12.为什么BERT比ELMO效果好?ELMO与BERT、gpt的区别是什么

a. 为什么bert比EMLO效果好

  • ⅰ. LSTM特征抽取的能力弱于Transformer
  • ⅱ. 拼接方式双向融合的特征融合能力偏弱
  • ⅲ. BERT的训练数据及模型参数均多于ELMO

b. BERT与ELMO的区别

  • ⅰ. ELMO是通过语言模型任务得到句子中单词的embedding表示,一次作为补充的新特征给下游任务使用
  • ⅱ. NLMO给下游提供的是每个单词的特征形式,这称为Fature-based pre-training
  • ⅲ. BERT是基于fine-turning的形式,下游任务需要将模型改造成BERT模型,才可利用bert模型预训练好的参数

c. BERT,GPT,ELMO的区别

  • ⅰ. 特征提取器:BERT和GPT使用transformer做特征抽取,ELMO使用LSTM。elmo使用一层静态向量加两层LSTM,多层提取能力有限,而GPT和BERT采用transformer,可采用多层,并行能力强
  • ⅱ. 单双向方面:GPT采用单项,ELMO和BERT采用双向,但ELMO实际上使两个单向的语言模型(方向相反)拼接起来,使得elmo模型融合的能力较弱
  • ⅲ. GPT和BERT都采用transformer,transformer是encoder-decoder的结构,GPT的但语言模型采用的是decoder部分,而BERT采用的是encoder部分

13.BERT有什么局限性

a. 句子中的多个单词被MSAK掉,这些被mask的单词是条件独立的,之间没有任何关系,而现实中是有关系的,比如new york
b. 在预训练时会出现特殊的MASK,但在下游的fine-tune中不会出现,这导致了预训练阶段和fine-tune阶段不一致的问题
c. 只mask了一个词的某一部分,而不是整个此,例如tran {mask} mer,那么mask那预测到sfor的概率非常大

14.BERT的输入输出是什么

a. 输入是字向量,句向量和位置向量的相加,(句首加CLS, 中间和结尾加SEP)

  • ⅰ. 字向量可以是随机初始化,也可以利用word2vec作为初始值
  • ⅱ. 句向量的取值在模型的训练过程中自动学习,用于刻画文本的全局语义信息,并与字/词的语义信息相融合,可以随机生成,亦可以从表中查找
  • ⅲ. 位置向量由于出现不同位置的词携带的向量不同,因此对不同位置的词附加一个不同的向量以作区分,可以随机生成,亦可以从位置表中查找

b. 输出是文本中各个token融合了全文语义信息后的向量表示

15.针对句子语义相似度/多标签分类/机器翻译/文本生成的任务,BERT如何fine-tuning

a. 句子语义相似度

  • ⅰ. 输入上将两个句子按照CLS 句1 SEP 句2 SEP的顺序拼接,送入网络中,将CLS对应的输出接上softmax做分类即可

b. 多标签分类

  • ⅰ. 输入与普通标签分类输入一样,得到embedding后,有几个label就接几个全连接层,然后分别接上softmax分类层,这样得到loss1,loss2,。。。lossn,求和后得到最终loss。
  • ⅱ. 相当于将n个分类模型的特征提取层参数共享,得到一个共享的表示,最后在做标签分类任务

c. 翻译任务

  • ⅰ. 得到bert的输出embedding后,将其当作机器翻译任务的输入,利用字向量与词向量拼接解决UNK问题

16.BERT应用到空格丢失或者单词拼写错误等数据是否还有效,有什么改进方法

a. 空格丢失

  • ⅰ. 先利用英文分词作分词处理,得到正常文本后再传入BRET

b. 单词拼写

  • ⅰ. 如果概率很小,则影响不大,因为经过大规模语料训练,语料也不太干净,所以可能学到了拼写错误的结果
  • ⅱ. 如果范围很大,则需要进行人工筛选

17.BERT的embedding是如何来的

a. 输入:通过查询字向量表示,将文本中的每个字转换为向量,作为模型的输入

  • ⅰ. 位置编码与transformer的sin/cos方法不同,bert的位置编码、句编码与字编码都是随机生成的,因为经过大规模训练可以学到

b. 输出:输入各字对应的融合全文语义信息后的向量表示

18.BERT为什么需要mask

a. 经过mask后模型需要根据上下文来预测这些mask的词,增加了模型的学习能力
b. 利用mask就是引入了噪音手段

19.BERT中的mask与word2vec中的CBOW有什么异同点

a. 相同的:Cbow的思想是,给定上下文去预测当前词。bert的本质也是这么做,根据上下文去预测mask
b. 不同点:

  • ⅰ. cbow中,每个词都当作input,都被预测,而bert不是,因为这样的训练量太大
  • ⅱ. cbow中的输入只输入上下文词,而bert中将mask当作token,同时输入了模型
  • ⅲ. cbow中,每个单词的embedding是唯一的,因此不能处理一词多义,而bert中的embedding是融合了上下文信息的,就算是同一个词,在不同的上下文环境中也不一样

20.BERT中的两个与训练任务对应的损失函数

a. 损失函数由MLM与NSP两部分组成,

b. 其中 θ是bert中encoder部分的参数,θ1是MLM任务中在Encoder上所接的输出层中的参数。θ2是句子预测任务中在encoder接上的分类器的参数。如果被mask的词集合为M,因为是词典大小V的多酚类问题

c. MLM:在encoder的输出上添加一个分类层,用嵌入矩阵乘以输出向量,将其转化为词汇的维度,用softmax计算每个单词的概率
d. NSP:用分类层将[CLS]标记的输出变换为2*1形状的向量,用softmax计算下一句的概率
e. 具体训练细节部分,还使用了对于学习率的warm-up策略,激活函数使用Glue,也是用了dropout等策略

21.词袋模型到word2vec改进了什么

a. 词袋模型中,文档的向量表示直接将各词的词频向量表示相加

  • ⅰ. 缺点:词与词之间没有顺序关系

b. word2vec考虑了位置关系,将每一个词语映射成低纬稠密向量,通过求余弦的方式可以判断两个词语之间的关系
c. 主要改进:

  • ⅰ. 增加了词与词之间的顺序,引入了上下文信息
  • ⅱ. 得到了更加准确的表示,其表达的信息更为丰富

22.word2vec到bert又改进了什么

a. 更深的网络,更多的训练语料

23.bert长文本预测如何构造token

a. 保留前510个token(留两个位置给CLS和SEP)
b. 保留最后510个
c. 选择前128和后382个(800以内)
d. 选择前256和后254(大于800)

24.bert的分词模块

a. 去除无意义词,跳过’\t’,unicode变换,中文字符筛选等
b. 在上一步的基础上再细粒度的切分,例如playing切分为play和ing
c. 中文没有第二部

25.BERT如何获取词义和句意

a. 使用extract_fature.py
b. 使用bert-as-service

26.为什么要再attention后使用残差

a. 可以很好的消除层数加深所带来的信息损失

27.Bert与RNN的区别

a. 相比于RNN,LSTM可以做到并发执行(Transformer)
b. 同时提取词在句子中的关系特征,并且能在多个不同层次提取关键特征,进而更全面的反映句子语义
c. 相比于Word2vec,其又能根据句子上下文获取语义,从而避免起义出现
d. 缺点是模型参数太多,而且模型太大,少量数据训练时容易过拟合

参考资料:

Transformer十分详细! https://blog.csdn.net/longxinchen_ml/article/details/86533005
transformer考点:https://blog.csdn.net/orangerfun/article/details/104851834

TransformerBERT_CodingPark编程公园相关推荐

  1. 数据分析调研报告_CodingPark编程公园

    文章结构速览 关系梳理 数据挖掘:从海量数据中找到隐藏的规则,数据分析:待分析的目标比较明确 数据分析更侧重业务,一般分析的目标比较明确,重点在观察数据,得出结论: 数据挖掘更侧重技术,利用统计学/机 ...

  2. 人工智能中神经网络与自然语言处理共生关系_CodingPark编程公园

    文章目录 神经网络知识大串联 1:第一代的神经元模型 3 2:从M-P模型到感知器模型 3 3:前馈神经网络 3 4:后向传播与BP算法神经网络 4 5:深度神经网络DNN 4 6:卷积神经网络CNN ...

  3. Gensim库生成与导入W2V模型_CodingPark编程公园

    Gensim库生成与导入W2V模型 语料目录 gensim函数库Word2Vec配置参数 gensim.models.word2vec.Word2Vec(sentences=None,size=100 ...

  4. Linux压缩|解压_CodingPark编程公园

    文章介绍 本文主要介绍: Linux的基础参数 Linux压缩 Linux解压缩 基础参数 tar - 5大参数 -c:压缩 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原 ...

  5. dim=0与dim=1_CodingPark编程公园

    开局一张图

  6. anaconda-navigaotr出现adding featured channels并无法正常打开_CodingPark编程公园

    问题 navigator无法打开.停在adding featured channels状态下. 解决 在mac终端下更新navigator 输入 conda install navigator 即可解 ...

  7. export命令在Mac Pycharm上如何设置环境变量!_ CodingPark编程公园

    引言 为什么想起写一下这篇文章呢? 今天看到了这么一句话 [W ParallelNative.cpp:206] Warning: Cannot set number of intraop thread ...

  8. 谈谈池化吧!_CodingPark编程公园

    引子 下采样和池化应该是包含关系,池化属于下采样,而下采样不局限于池化,如果卷积 stride=2,此时也可以把这种卷积叫做下采样. 池化 通常池化层紧跟在 CNN 的卷积层之后. 池化方法: max ...

  9. 人机对话seq2seq+attention_CodingPark编程公园

    人机对话 概述 我做过的这种生成式的项目有两个 人机对话(智能问答) 分为 问(encoder)| 答(decoder)两个阶段

最新文章

  1. log4php的使用
  2. 写在岁末 -- 程序员的人生并非那么容易,努力向前奔跑吧!
  3. ubuntu12.04 安装中文输入法
  4. fputc会覆盖吗_深覆盖 VS 深覆合如何区分?这一篇看完就都明白了!
  5. 漫画|你还记得原生的JDBC怎么连接数据库吗?
  6. 总结Selenium WebDriver中一些鼠标和键盘事件的使用
  7. html中滤镜的效果图,CSS滤镜之Mask属性-网页设计,HTML/CSS
  8. Non-standard serial port baud rate setting
  9. DB2 设置CodePage
  10. rsync的自动脚本实现方案(非rsyncd服务)
  11. 算法竞赛入门经典经典例题及习题题解
  12. centos journalctl日志查看
  13. YOLOv5 Android(完结)
  14. Windows 下安装 TensorFlow 2.2 GPU 版 教程:坑多,整理出来方便大家
  15. ArcGIS Engine10.0轻松入门级教程(1)——必备基础知识
  16. 你对三农金融了解多少,三农又会带来什么
  17. 【FreeBSD】VMware 安装 FreeBSD
  18. 数据结构(五)图---最小生成树(普里姆算法)
  19. 家用计算机防火墙设置,如何设置防火墙 防火墙在哪里设置【详细步骤】
  20. 医用耗材管理系统的模式的应用实践-盘谷

热门文章

  1. JO、JNO、JB、JNB命令详解(从原理上)
  2. 华为手机流量日显示无服务器,华为手机打开移动数据却无法上网怎么解决教程...
  3. 【编程语言 | C语言】C 语言编程规范
  4. atm系统的用例模型_ATM自动取款机用例图
  5. Unity Shader实现《氮气加速特效》
  6. 在项目中用了Arrays.asList、ArrayList的subList,被老大公开批评
  7. 第四次作业--4则运算
  8. internal关键字
  9. Center and Scale Prediction: A Box-free Approach for Object Detection
  10. python中一切内容都可以称为_创业基础答案黑龙江大学