赞
踩
GLM预训练的目标->结合自编码(encoder-only)和自回归(decoder-only)模型预训练的优点
1. 给定Input=[x1,x2,x3,x3,x5,x6],然后采样m个 spans。
2. 把被采样的部分mask掉,得到Part A。
3. shuffle 被采样的 spans,得到 PartB。
4. 把PartA与PartB拼接成一个sequence,Part A部分采用双向注意力,PartB部分采样自回归预测。为了能够自回归生成,padded 【start】和【end】。
5. 采样方式:文本片段的采样遵循泊松分布,重复采样,直到原始tokens中有15%被mask
Part B里的token可以看见Part A里的token -> 实现对上下文依赖关系的捕捉
Part B里的token看不见后来的token -> 实现生成任务(Q: 但是为什么要对Part B的token进行shuffle?这样x3的生成不是会依赖于x5, x6吗?)
自回归空白填充任务的挑战之一是如何编码位置信息。Transformer 依赖于位置编码来注入标记的绝对和相对位置。我们提出了二维位置编码来解决这个挑战。具体来说,每个标记都用两个位置 id 编码。第一个位置 id 表示在损坏的文本 Part A 中的位置。对于被掩盖的跨度,它是相应 [MASK] 标记的位置。第二个位置 id 表示跨度内的位置。对于部分 A 中的标记,它们的第二个位置 id 为 0。对于部分 B 中的标记,它们的范围从 1 到跨度的长度。通过可学习的嵌入表将两个位置 id 投影到两个向量上,这两个向量都添加到输入标记嵌入中。
为什么需要这个Part A和Part B?
GLM将NLU任务制定为包含任务描述的cloze问题,这些问题可以通过自回归生成来回答。
Part A就可以看作是cloze的问题描述,masked掉的是需要回答的问题。
TODO: 我目前还没有弄清楚的一点是为什么Part A需要注意力分数,如果我们训练目标是通过生成对mask位置的词的预测,难道不是只需要生成部分有注意力分数就行了吗?还是说它这样和encoder-decoder架构的自注意力机制一样?
还有就是part A里的mask怎么处理?为什么Part B要打乱顺序?
针对三类下游任务设计了三种基于自回归填空的预训练目标,交替进行
token-level objective 单词级
从一个均值为3的泊松分布中采样片段的长度,直到原始文本中15%的字符被掩盖,然后在文本中随机排布填空片段的位置。这一目标针对的是NLU
sentence-level objective 句子级
从文档中随机掩码若干文本片段,每个文本片段必须为完整的句子,被掩码的词数量为整个文档长度的15%。这一目标是能针对seq2seq任务,其预测往往是完整的整个句子或者段落。
document-level objective 文档级
采样一个长度从原始文本长度的50%到100%的均匀分布中采样的片段。这预训练目标针对的是无条件的长文本生成
三类预训练目标的区别只是跨度(片段)的数量和长度的区别。
where
GeLU补课
参考:BERT中的激活函数GELU:高斯误差线性单元 - 知乎
GeLU可以看作是ReLU(加入非线性性)和dropout思想(正则化,提高泛化能力)的结合:
ReLU会确定性的将输入乘上一个0或者1,Dropout则是随机乘上0。而GELU则是通过随机地将输入乘上0或1来实现这个功能--输入是乘以0还是1,是在同时取决于输入自身分布的情况下随机选择的。换句话说,是0还是1取决于当前的输入有多大的概率大于其余的输入。输入越小,越有可能取0(这一点接近ReLU, 输入小于0的部分都取0)。
假定神经元输入, 当前输入大于其余输入的概率, 所以当前取0还是取1符合概率为的伯努利分布
公式:
因为GELU计算比较麻烦,所以有sigmoid近似和tanh近似,用的比较多的是tanh近似:
(BERT, GPT里用的都是GELU,好像也是用的近似的算法,还没查不太确定)
GLU(Gated Linear Unit)线性门控单元
使用GLU(Gated Linear Unit)线性门控单元的FFN(Feed-Forward Network)块是Transformer模型中常用的结构之一。
GLU线性门控单元的特点是能够对输入向量进行选择性地激活,从而增强模型的表达能力。它在Transformer模型的编码器和解码器中广泛应用,用于对输入向量进行非线性变换和特征提取。
需要注意的是,GLU线性门控单元的计算复杂度较高,可能会增加模型的计算开销。
, 是可学习的矩阵
首先将输入向量 x 通过一个全连接层(线性变换)得到一个与 x 维度相同的向量,然后将该向量作为输入传递给GeLU激活函数进行非线性变换。最后,将GeLU激活函数的输出与输入向量 x 逐元素相乘,得到最终的输出向量。
TODO: 旋转位置编码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。