【BERT】Transformer理论详解(一)

目录

 

一、概述

二、Transformer和RNN 

1. Transformer要做什么事?

2. 传统的RNN网络和Transformer

3. 传统的word2vec

三、Transformer

1. Attention

1.1 self-attention是什么

1.2 self-attention如何计算

1.3 每个词的Attention计算

1.4 Attention整体计算流程

2. multi-headed机制

2.1 multi-headed机制图解(1)

2.2 multi-headed机制图解(2)

2.3 multi-headed结果

3. encoder堆叠多层

4. 位置信息表达——Positional Encoding

5. Add与Normalize

5.1 Layer Normalization

5.2 Layer Normalization 和 Batch Normalization 对比

5.3 连接:基本的残差连接方式

5.4 Encoder整体架构

6. Decoder

7. 最终输出结果

8. 整体梳理

9. 效果展示

四、BERT

1. BERT训练的词向量有什么不同

2. BERT名词解释

3. 如何训练BERT


一、概述

Bert——自然语言处理通用解决方案

  • 需要熟悉word2vec,RNN网络模型,了解词向量如何建模
  • 重点在于Transformer网络架构,BERT训练方法,实际应用
  • 开源项目,都是现成的,套用进去就OK
  • 提供预训练模型,基本任务拿过来直接用即可

二、Transformer和RNN 

1. Transformer要做什么事?

  • 基本组成依旧是机器翻译模型中常见的Seq2Seq网络
  • 输入输出都很直观,其核心架构就是中间的网络设计了

2. 传统的RNN网络和Transformer

  • 计算时有什么问题? 

不能并行计算

  • Self-Attention机制来进行并行计算,在输入和输出都相同
  • 输出结果是同时被计算出来的,现在基本已经取代RNN了

3. 传统的word2vec

  • 表示向量时有什么问题?答:预训练好的向量就永久不变了
  • 如果‘干哈那’是一个词,不同语境中相同的词表达的含义不同

三、Transformer

  • 输入如何编码?
  • 输出结果是什么?
  • Attention的目的?
  • 怎样组合在一起?

1. Attention

  • 对于输入的数据,你的关注点是什么?
  • 如何才能让计算机关注到这些有价值的信息?

1.1 self-attention是什么

1.2 self-attention如何计算

  • 输入经过编码后得到的向量
  • 想得到当前词与上下文的关系,可以当作是加权
  • 构建三个矩阵分别来查询当前词跟其他词的关系,以及特征向量的表达

三个需要训练的矩阵

  • Q: query,要去查询的
  • K: key,等着被查的
  • V: value,实际的特征信息

q与k的内积表示有多匹配

  • 输入两个词向量得到一个数值

  • 得到的数值经过softmax就是最终上下文结果
  • Scaled Dot-Product Attention,不能让分值随着向量维度的增大而增加

softmax回忆:

1.3 每个词的Attention计算

每个词的Q会跟整个序列中每一个K计算得分,然后基于得分再分配特征(乘V矩阵)

1.4 Attention整体计算流程

  • 每个词的Q会跟每一个K计算得分
  • Softmax后就得到整个加权结果
  • 此时每个词看的不只是它前面的序列,而是整个输入序列
  • 同一时间计算出所有词的表示结果(矩阵乘法)

例:一个句子中第一个词的q和其他词的k相乘并经过softmax的结果分别为0.13,0.21,0.53,0.13,则第一个词的self-attention(z1) = 0.13v1 + 0.21v2 + 0.53v3 + 0.13v4

2. multi-headed机制

  • 一组q,k,v得到了一组当前词的特征表达
  • 类似卷积神经网络中的filter,能不能提取多种特征呢?
  • 卷积中的特征图:

  • 通过不同的head得到多个特征表达
  • 将所有特征拼接在一起
  • 可以通过再一层全连接来降维

2.1 multi-headed机制图解(1)

2.2 multi-headed机制图解(2)

例:以两个head为例,将上面Scaled Dot-Product Attention中的q拆分为q1和q2(WQ拆分为WQ1和WQ2,WQ1*X=q1,WQ2*X=q2)。qi,1必须和ki,1或kj,1相乘最后乘以vi,1或vj,1,qi,2必须和ki,2或kj,2相乘最后乘以vi,2或vj,2。

也就是说,一句话中某个词的第1个head的q必须和其他词第1个head的k相乘,不能第1个head的q和其他词第2个head的k相乘。

2.3 multi-headed结果

  • 不同的注意力结果
  • 得到的特征向量表达也不相同

3. encoder堆叠多层

  • 一层是不够的,多层为了提取高维特征
  • 每层计算方法都是相同的

4. 位置信息表达——Positional Encoding

在self-attention中每个词都会考虑整个序列的加权,所以其出现位置并不会对结果产生什么影响,相当于放哪都无所谓,但是这跟实际就有些不符合了,我们希望模型能对位置有额外的认识。

Positional Encoding 公式

i 代表的是当前的维度,pos 代表的是当前的位置。

例:词向量维度为128,pos=3 即第3个词的 Positional Encoding:

5. Add与Normalize

5.1 Layer Normalization

归一化:让某一层的均值为0,标准差为1

5.2 Layer Normalization 和 Batch Normalization 对比

5.3 连接:基本的残差连接方式

5.4 Encoder整体架构

6. Decoder

  • Attention计算不同
  • 加入了MASK机制

7. 最终输出结果

  • 得出最终预测结果
  • 损失函数 cross-entropy即可

8. 整体梳理

  • Self-Attention
  • Multi-Head
  • 多层堆叠,Positional Encoding
  • 并行加速训练

9. 效果展示

两个句子中,it 和 animal 、street 的self- attention 值最大,即 it 分别指代 animal 和 street

四、BERT

1. BERT训练的词向量有什么不同

这里的词向量值 encoder 最终的输出 r 矩阵

  • 在word2vec中,相同词对应的向量训练好后就固定了
  • 但在不同的场景中,‘干哈呢’的意思会相同吗?
  • encoder和decoder都叫transformer

2. BERT名词解释

  • Bidirectional Encoder Representations from Transformers
  • 说白了就是transformer的encoder部分
  • 并不需要标签,有语料就能训练了

3. 如何训练BERT

方法1:

  1. 句子中有15%的词汇被随机mask掉
  2. 交给模型去预测被mask的家伙到底是什么
  3. 词语的可能性太多了,中文一般是字
  4. 如果BERT训练的向量好,那分类自然OK

方法2:

  1. 预测两个句子是否应该连在一起
  2. [seq]:两个句子之前的连接符,[cls]:表示要做分类的向量

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值