Transformer, ELMo, GPT, 到Bert

本秂侑毒 提交于 2019-12-06 11:18:04

RNN:难以并行

CNN:filter只能考虑局部的信息,要叠多层

Self-attention:可以考虑全局的信息,并且可以并行 (Attention Is All You Need

示意图:x1, x2, x3, x4先embedding成a1, a2, a3, a4,然后输入到Self-Attention Layer输出 𝑏1, 𝑏2, 𝑏3, 𝑏4,   ps:它们能够平行计算 

下面我们来看看如何计算b1 

先通过Wq, Wk, Wvai变成(qi, ki, vi),ps:三个矩阵乘的都是ai,这就是为什么叫self-attention

 

计算b1的过程

 

 

 

 

整个过程的示意图(省略了scale的部分)

 

还有一些操作:

1. Multi-head Self-attention: MultiHead(Q,K,V)=Concat(head1,,headh)WOwhere headi=Attention(QWiQ,KWiK,VWiV)

2. Positional Encoding (原始paper是人工设计的,不是训练出来的)

 

Transformer

Transformer示意图

Decoder 部分 

 默认参数:

  1. d_model=512:layer的输入输出都是512维度
  2. nhead=8:8个head-attention
  3. num_encoder_layers=6:6个encoder block
  4. num_decoder_layers=6:6个decoder block
  5. im_feedforward=2048:feed forward 隐层的神经元个数

可以查看google blog,transformer的大致工作的gif示意图.

 

ELMo

 

对数似然函数:

Θx:token representation的参数 ,  Θs: Softmax layer参数

假设我们使用的是L层的双向LSTM,那么,对于每一个token tk, 我们可以得到2L+1个向量表示

 ELMo具体操作是将这2L+1个向量进行加权平均,权重是学出来的,针对不同的下游任务,

 stasksoftmax-normalized weights, γtask:the scalar parameter  -- allows the task model to scale the entire ELMo vector

 

Bert

BERT用了双向的Transformer的encoder,而GPT是单向的decoder

 

 

BERT用了Masked Language model和Next Sentence Prediction(NSP), 并且可以很好的对下游任务进行fine-tune,一般只需要在额外加一层output layer就可以得到非常好的结果.

 

对于不同的task, Fine-tune BERT

 

 下面讲一下具体的一些细节。

 

Masked LM

对于每一句话,mask掉 15%的token, 对于这部分mask掉的token,

  1. 80%被替换成[MASK], my dog is hairy → my dog is [MASK]
  2. 10%替换成random token (根据unigram distribution), my dog is hairy → my dog is apple
  3. 10% 不变, my dog is hairy → my dog is hairy

然后我们只预测masked words

 

Next Sentence Prediction

例子

  • Input = [CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]
  • Label = IsNext
  • Input = [CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]
  • Label = NotNext

 

最近,还有一些新的版本的Bert。

 

SpanBERT

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!