如何扩展大模型的上下文长度,你学会了吗?
一、背景
大模型的上下文长度是指我们在使用大模型的时候,给大模型的输入加上输出的字符(Token)总数,这个数字会被限制,如果超过这个长度的字符会被大模型丢弃。目前开源的大模型上下文长度一般不长,比如 Llama 2 只有 4K,Code-Llama 系列因为需要输入代码,扩展到了 16K。闭源系列模型的提供了更长的上下文长度,比如 OpenAI 在其最新模型 GPT-4 Turbo 中提供了 128K 的上下文长度,Anthropic 的 Claude 2.1 模型提供了 200K 上下文长度。
一些场景需要较长上下文,比如,文档翻译需要将整篇文档输入给大模型进行翻译,长文档内容抽取需要大模型读取整篇长文档进行内容抽取,会议内容总结则需要给大模型输入会议聊天记录进行总结等。
想要得到一个长上下文的大模型,一般有两种途径。一种是大模型在初始阶段被设置为长上下文,然后经过预训练,指令微调,对齐训练等方式得到一个长上下文大模型。另外一种方式是选择已经训练好的大模型,通过技术改造扩展其上下文长度,然后再进行微调训练得到长上下文模型。
图片
本文将基于比较火的 Llama 2 大模型的结构[1]介绍上下文长度的方法与挑战,然后探讨一些业界流行的上下文长度扩展的技术,最后给大家推荐下 KubeAI 大模型训练推理平台可以上手实验。
二、LLAMA的结构
Transformer的结构
通常所说的大模型是指大语言模型(Large Language Model,LLM),其模型结构一般基于 Transformer 进行改进而来。Transformer 源自于 2017 年 Google 发表的著名论文"Attention Is All You Need[2]"。论文中的 Transformer 结构如下,下图源自论文[2]。
图片
它的结构包括两部分:Encoder(编码器)和Decoder(解码器)。Encoder 与 Decoder 大致都包含以下层,每一层都有特定的功能,下面为 Encoder(编码器)各层的简单介绍:
输入嵌入层(Input Embedding Layer):将输入文本的词或标记转换为向量表示,以便模型能够理解它们。
多头自注意力层(Multi-Head Self-Attention Layer):帮助模型捕捉输入序列中词与词之间的关系,使模型能够了解上下文信息。
前馈神经网络层(Feed-Forward Neural Network Layer):对多头自注意力的输出进行进一步的特征提取和变换,以增加模型的表示能力。
归一化层(Layer Normalization Layer):规范化每一层的输出,有助于训练过程的稳定性。
总的来说,Transformer 是一种强大的模型,它可以捕捉文本和序列数据中的长距离依赖关系,使其在翻译、对话、摘要生成等自然语言处理任务中表现出色。这个模型已经在各种应用中取得了显著的成功。感兴趣的同学可以自行去网上搜索下 Transformer 的结构,深入了解。