大模型有两个流程:预训练和推理。
GLM模型原理的理解,就是预训练流程的梳理,如下流程所示:
input输入层会预处理输入数据,在预训练过程中,该输入数据,其实就是预先准备好的预料数据集,也就是常说的6B,130B大小的数据集。
GLM统一了自编码模型与自回归模型,主要是在该处理过程实现的。该过程也被成为自回归空格填充。该过程体现了自编码与自回归思想: 1、自编码思想:在输入文本中,随机删除连续的tokens,做成掩码[MASK]。 2、自回归思想:顺序重建连续tokens。在使用自回归方式预测缺失tokens时,模型既可以访问带掩码的文本,又可以访问之前已经被采样的spans。
输入
可以被分成两部分:Part A是被损坏的文本
,Part B由masked spans组成。 假设原始输入文本是
,采样的两个文本片段是
以及
。那么mask后的文本序列是:
,即Part A;
、
即PartB。 再对Part B的片段进行shuffle。每个片段使用
填充在开头作为输入,使用
填充在末尾作为输出。如论文中的图所示:
掩码处理时,会随机选择输入序列中的某些词语进行掩码(mask)处理。掩码的目的是让模型学习预测那些被掩码的词语。让模型能够在预训练过程中更好地学习语言规律和上下文信息。 掩码处理的流程如下:
从结构化来思考,剖析下这个过程所涉及到的一些开发知识点。
在基于Transformer网络架构的模型中,位置编码是必不可少的一个处理,其作用简单来说就是在没有显式顺序信息的情况下,为模型提供关于词的相对位置的信息,以便让模型理解输入序列中的序列信息以及上下文信息。 位置编码在GLM中,通过采用一种称为"旋转位置编码"(RoPE)的方法来处理的。RoPE是一种相对位置编码技术,它能够有效地捕捉输入序列中不同token之间的相对位置信息。相较于传统的绝对位置编码,RoPE具有更好的外推性和远程衰减特性,能够更好地处理长文本。 在GLM中,使用二维位置编码,第一个位置id用来标记Part A中的位置,第二个位置id用来表示跨度内部的相对位置。这两个位置id会通过embedding表被投影为两个向量,最终都会被加入到输入token的embedding表达中。如论文中的图所示:
自注意力机制中的
矩阵计算如图所示:
这里面的道道暂时还没有摸清,不过计算的逻辑还是基于Tranformer网络中的自注意力计算,只是这框出来的蓝黄绿,其表征有点道道。
GLM在原始single Transformer的基础上进行了一些修改: 1)重组了LN和残差连接的顺序; 2)使用单个线性层对输出token进行预测; 3)激活函数从ReLU换成了GeLUS。 这些修改是比较常见的,简单了解下即可。