费曼说:学习一件事情最好的方式是做它的老师,这也是写这篇博文的目的,写这篇博文,即便有其他原因,但更多的还是写给自己,话不多说,让我们开始进入大模型吧
任务说明:任务说明
基座课程:斯坦福大学大规模语言模型课程
task6是大模型的架构的概论,主要从大模型的语言输入、语言编码
7.1 大模型之模型概括
大模型要考虑的对象本次内容中主要有两个,分词和模型架构,与之对应的人工智能组成成分就是数据和模型。
大模型的本质实质上是一种数据量大,拥有海量参数的自动编码机制(auto-encoder),是一种下面是一种自动编码机制seq2seq的模型:
输出不管是何种语言,本质上都是一串句子(字符串),输出也将会是一串句子(字符串)。
从数学的角度来进行考虑,句子是一种对训练数据和对应提示的一种概率分布:
接下来,我们会从分词和模型架构的方面去考虑语言模型。
7.2 分词
所谓seq2seq模型,在计算机的眼中并不是我们所看到的自然语言的模型,我们所看到的输入输出的自然语言都是以Unicode编码的形式在在计算机中存储的。
什么是Unicode?
Unicode编码方式采用4个字节表示大部分字符,编码方式理论上可以表示超过1,100,000个字符。其中包括了各种语言的字母、数字、标点符号、特殊符号、表情符号等。截止日期2021年9月,Unicode版本13.0已经发布,收录了超过143,000个字符。未来的Unicode版本将继续增加字符的数量,以覆盖更多的语言和符号。
7.2.1 基于空格的分词
使用text.split(' ')的方式进行分词,这种方式对于英语这种以空格来划分的语言无疑来说是适用的,但对于中文、德文这些单词之间没用空格,或者具有连词符号的词语,这会带来很多的问题
7.2.2 Byte pair encoding
将字节对编码的算法应用于数据压缩领域,生成一个最常用的分词器。
学习分词器的过程,直觉上,我们将每个字符作为自己的标记,并组合那些经常共同出现的标记。整个过程可以表示为:
- 输入:训练语料库(字符序列)。
- 初始化词汇表 V为字符的集合。
- 当我们仍然希望V继续增长时:
找到V中共同出现次数最多的元素对 x,x'。
- 用一个新的符号 xx' 替换所有 x,x'$的出现。将
- xx' 添加到V中。
总结:对出现频率较高的编码对用一个新的编码来代替。
7.2.2.1 Unicode的问题
问题在于Unicode的稀疏性,我们所要考虑的字符数量过大,对于模型的训练来说也是一个困难和挑战。因此我们用到了上面的BPE算法来进行字节的重新编码,增加了字符的密度,同时可以将不同语言进行同种编码,更好的处理多语言数据。
7.2.3 Unigram model (SentencePiece)
定义一个目标函数去捕捉分词的特征
它被用来训练T5和Gopher模型。给定一个序列 x_{1:L} ,一个分词器 T 是 p(x1: L)={(i, j) T} p(x_{i: j})的一个集合。这边给出一个实例:
- 训练数据(字符串): ababc
- 分词结果 T={(1,2),(3,4),(5,5)} (其中 V={𝖺𝖻,𝖼} )
- 似然值: p(x_{1:L})=2/3⋅2/3⋅1/3=4/9
可见,根据算法,分词被划分成了(a,b)、(a,b)、(c)
似然值就是:p(ab)p(ab)p(c)=2/3*2/3*1/3=4/27
似然值的计算是 unigram 模型中重要的一部分,它用于评估分词结果的质量。较高的似然值表示训练数据与分词结果之间的匹配程度较高,这意味着该分词结果较为准确或合理。
7.2.3.1 算法流程
一切都要从一个种子词汇表开始。
计算词汇表中每个词汇loss(x),即如果将x从V中移除,上面提到过的似然值会减少多少
按照每个单词的loss进行降序排序,保留排名靠前的80%的词汇
7.3 模型架构
将上下文的向量表征作为先决条件,讲人话就是将标记序列与上下文进行向量的表示。
其中的架构也可以看作是一种auto-encoder,一种编码器来实现: 也就是说将自然语言特征映射成为上下文相关的向量特征来实现:
7.3.1 语言模型分类
起源是Transformer模型,这个模型是Encoder和Decoder架构,当前对于语言模型的分类主要有三种:
- 编码端(Encoder-Only)是指一个模型或系统只负责对输入进行编码,将输入数据转换为某种表示形式,以便供后续处理使用。编码端通常用于从原始数据中提取有用的特征或表示,以便传递给其他模型或任务进行处理。著名模型有BERT,ROBEATa
- 解码端(Decoder-Only)是指一个模型或系统只负责对编码后的表示进行解码,将编码表示转换为目标输出或还原原始输入。解码端通常用于生成文本、图像、音频等输出,或者恢复原始数据的形式。著名模型有GPT123系列模型,给出prompt输出output
- 编码-解码端(Encoder-Decoder)是指一个模型或系统同时包含编码和解码两个部分,用于将输入数据转换为目标输出。编码部分负责对输入进行编码,生成表示形式,而解码部分则使用该表示形式进行解码,生成目标输出。编码-解码端通常用于序列到序列(Sequence-to-Sequence)任务,如机器翻译、文本摘要、语音识别等。最初的编码解码的模型,Transformer、BERT、T5等
另外再补充一下自然语言的输入形式:
[CLS]是每个句子的开头,输出向量用来接入Linear模型,来完成一些相关下游任务:如预测句子的积极性、根据提示给出答案所在的位置等,[SEP]是与之相接的下一个句子的开头,图中可以看到是阅读题对应的阅读材料
词向量上接Linear:
7.3.4 语言模型理论
在这里,我们将介绍各种模型的架构,其实抽象的理论比较多,比较严谨,但是会造成理解上的一些困难。所以尽量从实现的角度来简要说明
7.3.4.1 基础
这实际上是一个非常传统的全连接的架构。全连接层函数在嵌入矩阵中输出每个标记所对应的向量。
计算对应的词向量h,并返回h序列
7.3.4.2 递归神经网络
实际上是一种循环神经网络,简单的打一个比方,全连接中间层所输出的向量按照一定的比率添加到另外层的中间层去,从而达到考虑上下文的效果。
7.3.4.3 自注意力机制
自注意力机制(Self-Attention Mechanism)是一种用于处理序列数据的机制,常用于自然语言处理中的神经网络模型,如Transformer。
它可以根据输入序列中不同位置的信息之间的相关性,动态地计算每个位置与其他位置的权重,以便更好地捕捉序列中的重要信息。它允许模型在处理每个位置时,同时关注序列中的其他位置,而无需依赖于固定窗口大小或卷积核大小。
在自注意力机制中,每个位置的输入会通过三个线性变换(通常称为查询(Query)、键(Key)和值(Value))转换为查询向量、键向量和值向量。然后,通过计算查询向量和键向量之间的相似度得到每个位置与其他位置的注意力权重。最后,将注意力权重与对应位置的值向量进行加权求和,得到该位置的输出表示。
这种自注意力机制的特点是能够捕捉长距离依赖关系,并且可以灵活地根据输入序列的不同情况进行权重分配。它在Transformer模型中被广泛使用,使得模型能够有效地处理长序列,并在机器翻译、文本生成等任务中取得了很好的效果。
Transformer :Transformer是一种用于序列建模的神经网络架构,广泛应用于自然语言处理任务中,如机器翻译、文本生成和语言理解等。
Transformer的核心思想是完全基于自注意力机制(Self-Attention Mechanism)进行序列建模,而不依赖于传统的循环神经网络(RNN)或卷积神经网络(CNN)。它的设计使得它能够并行处理序列中的元素,从而加快训练和推理的速度。
Transformer由两个关键组件构成:编码器(Encoder)和解码器(Decoder)。编码器负责将输入序列转换为一系列高级特征表示,而解码器则使用这些特征表示生成目标序列。
在编码器中,输入序列经过多层的自注意力机制和前馈神经网络进行处理。自注意力机制用于捕捉输入序列中不同位置之间的依赖关系,并生成每个位置的上下文表示。前馈神经网络则对每个位置的表示进行非线性转换,以增加模型的表达能力。
在解码器中,除了编码器的自注意力机制和前馈神经网络,还引入了另一个自注意力机制,用于解码器中不同位置之间的依赖关系建模。解码器还包括一个附加的线性层,用于预测下一个输出元素的概率分布。
为了进行训练,Transformer使用了注意力机制和残差连接(Residual Connections)来促进信息的传递和梯度的流动。此外,为了处理变长序列,Transformer还引入了位置编码(Positional Encoding),用于为输入序列中的每个位置提供位置信息。
Transformer的优点在于它能够并行处理序列,具有较长的依赖关系建模能力,并且在许多自然语言处理任务中取得了很好的性能和效果。它的出现对于序列建模领域带来了重要的突破和影响。
另外的小技巧:
1.残差网络:就是防止梯度近似0时无法优化的问题,在输出上加上输入(但是必须保证输入和输出维度一致,不然无法计算)
下面我曾经的实践:用的是MINIST数据集
与传统方式相比,确实收敛得更快了,这也是残差网络的功劳。按训练轮数来计算,效率提升了400%,另外,残差网络的计算实际上也比较简单,不耗费太多算力。
2. 层归一化:softmax回归,因为机器学习喜欢符合标准正态分布的数据,我们就对数据进行归一化。
最后感谢李宏毅老师对我的线上教导和精美的图示使得我能够清楚地表达词义
参考链接:Transformer & BERT (ntu.edu.tw)、Transformer (ntu.edu.tw)