大模型学习-基础篇(三)初遇LLMs的模型结构

系列目录-大模型学习篇

大模型学习-基础篇
大模型学习-实践篇

问题场景(Problems)

在这里插入图片描述

在了解Transformer架构以后,我们介绍了attetion机制和位置编码函数,紧接着学习了旋转位置编码。本章节我们就初步了解一些常见的大模型结构和相关基础知识。

解决方案(Solution)

相关的术语:
AI (人工智能)
ML(机器学习)
DL(深度学习)
foundation model (基础模型)
LLM (大语言模型)
GPT4(OpenAI的应用产品)

从上到下,依次为上面的子集。

Generation AI (生成式AI)
可以指任何需要生成文本、语音、视频和图像的场景。

对于大模型而言,我们需要了解具有代表性的三个开源模型:Llama、ChatGLM和BLOOM。

模型训练数据训练数据量模型参数量词表大小模型结构模型结构激活函数layer norm
LLaMA以英语为主的拉丁语系,不包含中日韩文1T/1.4T tokens7B、13B、33B、65B32000Casual decoderRoPESwiGLUPre RMS Norm
ChatGLM中英双语,中英文比例为 1:11T tokens6B130528Prefix decoderRoPEGeGLUPost Deep Norm
Bloom46 种自然语言和 13 种编程语言,包含中文350B tokens560M、1.1B、1.7B、3B、7.1B、176B250880Casual decoderALiBiGeLUPre Layer Norm

由于前文已经介绍过RoPE位置编码,此处不再进行介绍。需要注意的是:虽然Llama和chatGLM都使用了RoPE,但是在源码实现上Llama是将RoPE放在了multiHeadAttention类里面,每次进行自注意力机制计算前都要进行一次RoPE变换,而ChatGLM只是在输入层进行了RoPE的变换操作,其他层没有进行操作。

针对表格的内容,我们介绍一下模型架构(casual decoder、prefix decoder、encoder-decoder)的区别:
(1)encoder-decoder:
模型由两种block组成,encoder block和decoder block,其中decoder block比encoder block多一个掩码多头注意力机制。
掩码方式为:输入时是双向注意力掩码,输出时是单向注意力掩码
优点:在输入上采用双向注意力,对问题的编码理解更充分
缺点:在长文本生成任务上效果差,训练效率低。
代表模型:T5、Flan-T5、BART。

(2)casual decoder:
掩码方式:单向注意力掩码,确保每个输入token只能注意到过去的token和它本身。Causal Decoder是一种自回归模型,这种模型架构适用于文本生成任务,如文本续写或问答系统,因为它可以保证生成文本的连贯性。
优点:文本生成任务效果好,训练效率高,zero-shot 能力更强,已被证明具有涌现能力
缺点:生成效率低,序列生成结果的前后依赖性强。
代表模型:GPT/LLaMA/BLOOM系列模型

(3)prefix decoder:
掩码方式:输入部分采用双向注意力机制,任意两个token都可以相互看见。输出部分采用单向注意力,待生成的token可以看到Encoder侧所有token(包括上下文)和Decoder侧已经生成的token,但不能看未来尚未产生的token。允许模型同时考虑前缀信息和单向生成特性,主要用于条件生成任务,比如机器翻译、摘要生成等。
优点:灵活性更高:,前缀部分提供了上下文信息,能够更好地控制生成的主题或风格,或者改善生成质量 。
缺点:prefix的token互相能看到,可以让模型充分学习到前缀包含的上下文信息,但是训练效率低。因为在相同训练量下,关注到的token数量要少于casual decoder模型。另外,前缀质量也成为了影响模型性能的一个限制因素。
代表模型:ChatGLM系列模型,ChatGLM、ChatGLM2、U-PaLM

LlaMA(casual decoder):

LLaMA-7B 有 32 个 transformer 层,隐藏维度为 4096。LLaMA 原模型的词表大小是 32000,tokenizer 主要是在英文语料上进行训练的,在中文上和多语种上效果比较差。LLaMA 在中文上效果差,一方面是由于 LLaMA 模型是在以英文为主的拉丁语系语料上进行训练的,训练语料不包含中文;另一方面,与 tokenizer 有关,词表规模小,可能将一个汉字切分为多个 token,编码效率低,模型学习难度大。

LLaMA 词表中只包含了很少的中文字符,在对中文文本进行分词时,会将中文切分地更碎,需要多个 token 才能表示一个汉字,编码效率很低。Chinese LLaMA 扩展中文词表后,单个汉字倾向于被切分为 1 个 token,避免了一个汉字被切分为多个 token 的问题,提升了中文编码效率。

Chinese LLaMA的训练&微调:
①在中文语料上使用 Sentence Piece 训练一个中文 tokenizer,然后将中文 tokenizer 与原始的 LLaMA tokenizer 合并起来,获得一个合并的 tokenizer,词表大小为 49953。
②将 transformer 模型的 embedding 矩阵扩展,新加入的中文 token 附加到原始 embedding 矩阵的末尾。
③在中文语料上进一步预训练,冻结和固定 transformer 的模型参数,只训练 embedding 矩阵。
④在指令微调阶段,可以放开全部模型参数进行训练。

ChatGLM(prefix decoder):

ChatGLM-6B 采用了与GLM-130B[4]相同的模型结构。使用的Tokenizer是SentencePiece,词表大小为 130528。截止到 2022 年 7 月,GLM-130B 只训练了 400B 的 tokens,中英文比例为 1:1。ChatGLM-6B 则使用了更多的训练数据,多达 1T 的 tokens,训练语料只包含中文和英文,中英文比例为 1:1。

在训练目标上,ChatGLM-6B 的训练任务是自回归文本填空。相比于采用 causal decoder-only 结构的大语言模型,为什么prefix decoder的训练效率低呢?因为causal decoder 结构会在所有的 token 上计算损失,而 prefix decoder 只会在输出上计算损失,而不计算输入上的损失。所以,在有相同数量的训练 tokens 的情况下,prefix decoder 要比 causal decoder 的效果差,因为训练过程中实际用到的 tokens 数量要更少。

BLOOM(casual decoder):

BLOOM 的训练目标是语言模型,即根据已有的上文去预测下一个词。关于tokenizer,BLOOM 在多语种语料上使用 Byte Pair Encoding(BPE)算法进行训练得到的 tokenizer,词表大小为 250880。BLOOM的训练数据包含了英语、中文、法语、西班牙语、葡萄牙语等共 46 种语言,另外还包含 13 种编程语言。1.5TB 经过去重和清洗的文本,转换为 350B 的 tokens。训练数据的语言里面中文语料占比为 16.2%。模型结构上,与 GPT 相同,BLOOM 采用了 causal decoder-only 的 transformer 模型结构。在模型细节上,做了以下几点改动:

1)embedding layer norm:在 embedding 层后添加了一个 layer normalization,来使训练更加稳定。
2)layer normalization:为了提升训练的稳定性,没有使用传统的 post layer norm,而是使用了 pre layer Norm。
3)激活函数:采用了 GeLU 激活函数,而不是ReLU,增加了收敛速度和训练稳定性。
4)位置编码:去除了绝对位置编码,采用了相对位置编码 ALiBi。相比于绝对位置编码,ALiBi 的外推性更好,即虽然训练阶段的最大序列长度为 2048,模型在推理过程中可以处理更长的序列。

相关问答(Q&A)

以下是一些开放性的问题,欢迎各位读者给出自己的见解,并在评论区对笔者提出批评和指正,谢谢。
问题一:为何现在的大模型大部分是Decoder only结构?

1)decoder-only结构模型在没有任何微调数据的情况下,zero-shot的表现能力最好。
encoder decoder则需要在一定量的标注数据上做multitask-finetuning才能够激发最佳性能。

2)因为Encoder的双向注意力会存在低秩问题,这可能会削弱模型的表达能力。
Attention矩阵本身就是由一个低秩分解矩阵加softmax而来,具体来说就是一个n* d的矩阵与d* n的矩阵相乘后再加softmax,其中n是远远大于d的,这种形式的Attention矩阵会因为低秩问题而带来表达能力下降。

解释:Decoder-only架构的attention矩阵是一个下三角,三角阵的行列式等于它对角线元素之积,由于softmax的存在,对角线必然都是正数,所以它的行列式必然是正数,即Decoder-only架构的Attention矩阵一定是满秩的!满秩意味着理论上有更强的表达能力。

问题二:为什么大模型具有涌现能力?
1)任务的评价指标不够平滑;

2)宏观上看到了涌现现象,但是子任务效果其实是平滑增长的。
比如我们假设某个任务 T 有 5 个子任务 Sub-T 构成,每个 sub-T 随着模型增长,指标从 40% 提升到 60%,但是最终任务的指标只从 1.1% 提升到了7%。

经验总结(Conclusion)

在学习大模型时,要注意实践和理论结合,很多有趣的开放平台和开源框架都可以自己尝试玩一玩。尝试本地部署以后微调跑一跑,可以在枯燥的理论之余获得额外的乐趣。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值