语言模子-预练习模子(三)

打印 上一主题 下一主题

主题 995|帖子 995|积分 2985

传统方法与预练习方法的比较


思想解读: 预练习的概念就和我们人读书和工作一样;先是通过底子教导到大学毕业,学习了通用的底子知识,这个做大多数工作,我们都能够快速学习和上手。模子预练习同样云云;克制了每一个卑鄙任务都从零开始练习模子
由于语言模子不需要特别的标注数据,以是非常适合做预练习的目标。
预练习方式 --BERT

Mask Language Model (MLM)
练习任务

1.完型填空
Bidirectional Language Model
a.依照一定概率,用[mask]掩饰文本中的某个字或词

b.通过遮住词两侧的内容,去猜测被遮住的词
2.句子关系猜测
Next Sentence Prediction
[CLS] 师徒四人历经艰险[SEP] 取得真经[SEP] -> True
[CLS] 师徒四人历经艰险[SEP] 火烧赤壁[SEP] -> False
释义: 通过上下两句话,去练习模子去判断是否为上下句子关系,即一个二分类任务。但是现在大家广泛不太利用该练习任务,由于这个规律模子比较容易学习到。
模子布局

BERT重要包含两个部门,第一部门是embedding层,以及在embedding层背面的网络布局。
与word2vec对比
区别:word2vec是静态的,而BERT是动态的;在相同的文本输入后,word2vec输出的向量是固定的,BERT通过embedding后,还需举行后续网络层的计算,那么就能捉住输入的字与字、词与词;即token之间的关系。并能够举行计算输出。
BERT布局-Embedding

释义图:

释义:
   1.Token Embeddings就是传统的embedding;即将词或字转为对应的向量。以是它的巨细:Word-list _Size * Vector_size 即词表巨细和向量空间的巨细
2.Segment Embeddings是由于练习任务中,需要区别两句话,前面我们说需要区分两句话是否为上下句;这里用两个向量就能够去标志是两句话,以是巨细为:2 * Vector_size
3.Position Embeddings是对输入的数据举行位置标志,在初始版的BERT中,一条数据最多有512长度,即标志的向量最多512个;以是该层巨细为:512 * Vector_size
4.加入 [CLS] [SEP] 来标志文本起始位置
5.上面3层embedding相加,就是整个embedding的结果;其巨细为:World_Lenth(<=Position_Size) * Vector_Size
6.加和后会做Layer Normalization
  BERT布局-Encoder

介绍: BERT的模子主体布局利用Google本身在17年提出的Transformer布局。
如下图:

具体释义:
   1.embedding后得到输入X;这里的X1、X2可以理解为将输入复制了多份进入到自注意力模块练习
2.自注意力计算完后,需要颠末一个线下层;才会进入下一个模块
3.Add & Normailize 是残差计算,这里会将自注意力计算后的结果加上输入注意力计算前的值;再过一个归一化层;这里加上原有值,即残差计算的目标:是为了使得模子搭的更深;由于self-attention会捕获一些规律,但是也会遗失其他的信息;加上一个计算前的值(可以是前一层、也可以是前几层的值)就可以保留
4.前馈网络Feed Forward就是颠末两个线性层;和一个激活层;注意点 在底子的BERT中,进入前馈网络的布局为:World_Length* Vector_Size;这里的两个线性层分别为:Vector_Size * 4Vector_Size;和 4Vector_Size * Vector_Size;以是第二个线性层计算后,输出仍然为:World_Length* Vector_Size。
5.末了再次颠末一个残差计算,残差计算颠末一个线性层计算后,就完成了一个底子的transformer布局
  BERT布局-self-attention

示意图:

其中Z的计算公式:

释义:
1.我们先来梳理矩阵计算的环境
   a.图中,x就是我们Embedding输入,是World_Length* Vector_Size
b.我们把x拆成3份,分别于紫色、黄色、蓝色的线下层想乘(Q、K、V);我们末了计算的结果,对矩阵的形状是稳定的;以是输出的形状需要为:World_Length* Vector_Size;那么线下层的形状就是:Vector_Size * Vector_Size
c.公式中,Q、K举行相乘;那么K需要举行转置,即K左上角T的寄义;转置后,K的矩阵形状:Vector_Size * World_Length;以是Q、K相乘的结果为:World_Length * World_Length
d.Q、K相乘后,举行一些列操纵,不影响矩阵的形状,继续与V相乘,结果Z的形状就是:World_Length* Vector_Size;即和输入的形状同等
  2.Q*K.T和softmax的理解
Q*K.T即:World_Length * World_Length;这个World_Length就是我们输入的文本长度。
以是我们展开可有下面示意图

注意: 矩阵中的数据,是不是就代表着,这个词与该句子中其他词的关系紧密程度呢。以是这行数据,就是这个字对这句话的注意力。
softmax作用: 就是归一化操纵,即将字与句子中其他词的关系程度之和,归一化到1的区间中来。
3.根号下dk的理解
我们在前面说,Q、K、V是通过输入x和对应的线下层相乘得到的;其形状为:World_Length* Vector_Size;
重点关注
1.在举行后续Q、K.T相乘 和乘V的步骤之间,是对Q K V举行拆分的;
2.好比:底子版本BERT的Vector_size为768;这里拆分成12部门,即多头数量为12,;那么每一个Q的形状:World_Length * 64
3.上面拆分后,V也会同样拆分,分别举行计算,末了合并在一起得到:World_Length* Vector_Size
4.末了合并的矩阵再举行 除于根号dk;再归一化的操纵:
示意图:

注意、总结: 在多个Q * K.T中,不管Q、K的Vector_Size 拆分成多少份,即有多少个多头计算;但是在这里计算的结果都是:World_Length * World_Length ;我们上面说了,就是词与句子中其他词的关系紧密程度。
注意核心理解比喻: 这里的多头,造成有多个World_Length * World_Length的结果,实在就是模子在不同维度,去找句子中词与词之间的关系。多头1找的是名称关系紧密程度、多头2找的是动词的关系紧密程度…
dk的值: 在底子版本的BERT中,dk是64,这个值是词向量维度:768与多头数量12的商。
dk作用: 由于softmax是将多个值的和归一化为1;根据softmax的函数特性,会出如今举行归一化的数中,有的比较大,归一化后就靠近1;而小的数,就靠近零了;如许对于模子的计算不好,这种靠近零的值要只管克制;以是先除于dk;使得值的差距被缩放;再举行归一化。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表