理解NLP迁移学习/Transformers/GPT/Bert中遇到的难点和笔记

发布时间:2022-08-18 18:08

这篇笔记主要是我在学习这些算法的过程中,遇到难以理解的地方之后去查询资料,然后记录下了我自己的一些针对这些难点的理解,并不是对大标题中的概念进行一个基础地介绍,如果你完全没有听说过这些概念,建议先去百科一下,或者看看原文,然后如果有卡壳的地方,希望这篇笔记能帮助到你。

Seq-to-Seq model

  1. 以Neural Machine Translation来说,seq1的每个字依次进入encoder被encode成一个个hidden states(也可以称context——越是往后的hidden states/context,包含句子的内容越多),当最后一层hidden states被算出来,这个last hidden states就包含了seq1句子所有的context,并且被送入decoder,decoder开始output seq2的每个字,并且在decoding的过程中,不断地产生hidden states(即so far目前被decode了的所有context)。
  2. context vector,即最后一层的hidden layer,会比较有问题,因为没办法处理过长的句子的所有信息(毕竟要把一整个句子的含义全部encode到一个vector里),后来出现了Attention这种结构,作为弥补RNN的hidden layers的解决办法。
  3. Seq-to-Seq with Attentions:
    1)不同于之前只把最后一层encoder生成的hidden layer递给decoder,现在encoder生成的所有的hidden layers都要递给decoder,然后让decoder自己来判断当它想翻译一个字(例如f3 -> e3)的时候,它会更多更多地参考哪个 f i , i ≠ 3 f_i, i \ne 3 fi,i=3词向量,所以decoder的第一层hidden states其实是一个weighted sum of encoder hidden states。
    2)所以整个流程是:
    - encoder生成所有的hidden layers, h 1 e h_1^e h1e,…, h n e h_n^e hne
    - decoder接收到 < E N D > <END>的词向量,和一个initial decoder hidden layer h i n i t d h^d_{init} hinitd,生成 h n + 1 d h_{n+1}^d hn+1d——即第一个decoder hidden context
    - 然后通过 h 1 e h_1^e h1e,…, h n e h_n^e hne计算出attention vector a n + 1 d a^d_{n+1} an+1d,并把 a n + 1 d a^d_{n+1} an+1d h n + 1 d h_{n+1}^d hn+1d给concatenate在一起变成一个n+1时间点的context vector c n + 1 d c_{n+1}^d cn+1d
    - 把 c n + 1 d c_{n+1}^d cn+1d递给feed-forward来生成n+1时刻预测的output o n + 1 d o^d_{n+1} on+1d
    - decoder接收到 o n + 1 d o^d_{n+1} on+1d的词向量,和一个decoder hidden layer h n + 1 d h^d_{n+1} hn+1d,生成 h n + 2 d h_{n+2}^d hn+2d——即第2个decoder hidden context
    - 然后通过 h 1 e h_1^e h1e,…, h n e h_n^e hne计算出attention vector a n + 2 d a^d_{n+2} an+2d,并把 a n + 2 d a^d_{n+2} an+2d h n + 2 d h_{n+2}^d hn+2d给concatenate在一起变成一个n+2时间点的context vector c n + 2 d c_{n+2}^d cn+2d
    - 把 c n + 2 d c_{n+2}^d cn+2d递给feed-forward来生成n+2时刻预测的output o n + 2 d o^d_{n+2} on+2d
    - Repeat

参考:
https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/

Transformers

  1. Transformers实质上舍弃了sequential的模型,而是通过不断地计算不同的词在同一个高维度的空间里(维度越高的空间,空间范围就越巨大)是否有关联,来建立词的概率分布。

  2. Transformers相较于LSTM的好处就是能够将整个句子作为input来处理,这种优势主要体现在feed-forward layer的计算中,但self-attention layer的计算并非互相独立的,而且decoder也predicts one by one (sequentially).

  3. 依靠非sequential的模型来理解词与词之间的关系,相对应的downside就是失去了词的顺序这个重要的信息,意思也就是input sentence的词的顺序可以随意颠倒,也不会什么影响,所以需要额外的将词的positional information给嵌入(encode)到模型中。具体嵌入的方法有很多种,一种是直接用一个和word embedding同维度的positional encoding向量来表示词的相对位置,再用向量加法加到word embedding中,取一个比句子要长很多embedding dimension可以使模型无压力地generate sentence longer than what’s in training.

  4. 计算self-attention的过程:

    • self-attention:It is a layer that helps encoder/decoder to look at other words in the input sentence as it encodes/decodes a specific word. 其中self是相对于decoder block中的encoder-decoder-attention layer的,即self-attention是encoder-encoder或者decoder-decoder的。
    • Q,K,V分别是E和三个不同的W matrix相乘之后得到的vector(类似于projection of input(here it is Embedding) in a different dimension - usually a smaller dimension-subspace),其中Q是在比较的过程中用来代表本身,K用来和其它的词比较,Q和所有词的K一起相乘得出softMax(scores),V是用来往下一步传送的本身(当然要被scores weighted之后),最后再把V*scores的vector给element-wise的sum起来,就是self-attention score了(in lower dimension form as well)。
      理解NLP迁移学习/Transformers/GPT/Bert中遇到的难点和笔记_第1张图片
    • Multi-headed self-attention:然而z1涵盖其它词的程度还不够,以至于在训练中词i还是很容易收到其本身的影响更多一点,所以transformers的结构中用了8个这样的Q/K/V组合来尽可能代表多一点subspace的信息(不同的attention head会focus on不同的词),最后再把这8个Z matrix给concat起来,linear transform的reshape一下,得出最终的一个Z matrix喂给FF。
      理解NLP迁移学习/Transformers/GPT/Bert中遇到的难点和笔记_第2张图片

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号