一、了解大模型
大模型,在本文中指大语言模型(Large Language Models),是拥有非常庞大参数量的神经网络模型,尤其是在自然语言处理(NLP)领域。这些模型通过在海量数据上训练,能够理解和生成语言,执行诸如文本生成、翻译、问答等多种任务。大模型的特点包括:
- 极大的规模:包含数十亿甚至数万亿的参数。
- 强大的泛化能力:能够处理多种未见过的数据和任务。
- 高度的计算资源需求:训练和运行大模型通常需要大量的GPU或TPU集群。
- 深度学习架构:通常基于Transformer架构,如BERT、GPT系列等。
在本期Datawhale AI夏令营中,我们将通过调用大模型来实现逻辑推理相关问题,那么大模型是如何实现该过程的?
要了解其原理,我们首先要知道大模型是如何理解文字的。
1. “你是谁?”
下面以通义千问为例,当我向其提问“你是谁?”时,它是如何工作的。
1. 文本预处理
首先,问题“你是谁?”会被转换成模型可以理解的形式。这通常涉及到将文本分割成数个令牌(tokens),每个令牌对应一个词或子词。例如,“你是谁?”会被分割为“你”,“是”,“谁”,“?”四个令牌。
2. 词嵌入
接着,每个令牌会被转换为其对应的词嵌入向量。词嵌入是一种将词汇映射到连续向量空间的技术,这样模型就可以捕捉到词语之间的语义相似性和关系。例如,“你”、“是”、“谁”的词嵌入向量分别表示为 (\vec{e}_你), (\vec{e}_是), 和 (\vec{e}_谁)。
3. 自注意力机制
Transformer模型中的自注意力层会处理这些词嵌入向量,通过计算各个词之间的相关性来更新它们的表示。此时模型会考虑到“你”、“是”、“谁”在句子中的相对位置和相互关系,以及它们在整个句子中的作用。
4. 多层编码
经过自注意力层后,词嵌入向量会传递给多个编码器层,每个层都会进一步处理这些向量,提炼更深层次的语义信息。这些层通常包括更多的自注意力机制和前馈神经网络,帮助模型理解句子的复杂结构和含义。
5. 解码与生成回答
当模型理解了问题的含义后,就开始生成回答。通常从一个起始令牌开始,模型预测接下来最可能的词。例如,模型可能会预测“我”作为第一个词,然后是“是”,接着是“通义千问”,以此类推,直到生成一个完整的回答。
6. 回答生成
模型在生成过程中会考虑已生成的部分和整个问题的上下文,以确保回答的连贯性和准确性。例如,对于“你是谁?”的问题,模型会生成:“我是通义千问,一个由阿里云开发的大语言模型。”
7. 输出处理
最后,生成的回答会被转换回可读的文本格式,并呈现。
2. 对话
单轮对话 (Single-turn Conversation)
单轮对话指的是机器人或模型在每次交互中只考虑当前输入的信息来生成响应,而不保留任何先前的对话历史。这意味着每次对话都是独立的,模型不会利用过去的对话内容来影响当前的回答。例如,当用户询问天气,模型会给出当前的天气信息,而如果用户随后询问一个完全不相关的问题,如菜谱,模型会独立地回答这个问题,而不考虑之前关于天气的对话。
特点:
- 无上下文依赖:每个请求和响应都是孤立的。
- 即时性:模型不需要加载或保存对话历史,响应速度可能更快。
- 简单性:实现起来相对简单,因为不需要复杂的上下文管理机制。
多轮对话 (Multi-turn Conversation)
多轮对话则涉及到一系列连续的对话回合,其中模型会利用之前的对话历史来理解和生成更相关的响应。这种类型的对话允许模型记住用户的身份、偏好、之前的请求以及正在进行的对话主题,从而能够进行更连贯、更自然的交流。例如,在询问菜谱后,用户可能会问某个食材的替代品,多轮对话模型能够理解这个替代品是针对上一次提到的菜谱中的哪个食材。
特点:
- 上下文依赖:模型需要跟踪和理解对话历史,以便生成适当的响应。
- 连贯性:响应通常更加连贯,因为它们考虑了整个对话的流程。
- 复杂性:实现起来更复杂,需要有状态管理、上下文理解和长期记忆的能力。
- 个性化:可以根据用户的特定需求和历史提供个性化的服务
3. 泛化与微调
泛化能力 (Generalization)
泛化能力是指机器学习模型在未见过的数据上的表现能力。一个具有良好泛化能力的模型不仅能在训练数据上表现良好,而且在新的、未知的数据上也能做出准确的预测或决策。这是机器学习模型追求的核心目标之一,因为真实世界的应用往往需要模型面对从未见过的数据。
提升泛化能力的方法:
- 正则化:通过添加惩罚项来防止模型过拟合,如L1或L2正则化。
- 数据增强:增加训练数据的多样性,使模型能够学习到更多的特征。
- 模型结构设计:合理选择模型的深度和宽度,避免模型过于复杂导致过拟合。
- 早停法:在验证集上监控模型性能,一旦性能不再提升就停止训练。
- 集成学习:结合多个模型的预测,提高整体的稳定性和准确性。
微调 (Fine-tuning)
微调是一种训练策略,通常用于预训练模型的适应性改进。预训练模型是在大规模数据集上训练得到的通用模型,它已经学习到了丰富的特征表示。微调则是将这个预训练模型应用到特定任务上,通过在新任务的数据集上进一步训练,使模型能够更好地适应这个特定任务的需求。
微调的主要步骤:
- 冻结部分层:通常会冻结模型的底层,以保留其学到的一般特征。
- 解冻部分或全部层:在初步适应后,可能会解冻一些层以进行更精细的调整。
- 调整学习率:微调时的学习率通常比初始训练时小,以避免破坏预训练学到的特征。
- 收集特定任务数据:获取并准备针对特定任务的训练数据。
- 评估和调整:在验证集上评估模型性能,根据需要调整训练策略。
主流微调方法
Adapter Tuning
Adapter Tuning 是一种参数效率高的微调方法,通过在预训练模型的每一层中插入小型的适配器模块,这些模块可以被单独训练,以适应下游任务,而原始模型的大部分参数保持不变。
优点 | 参数量小,可以快速适应新任务,避免了对完整模型的重新训练 |
缺点 | 在大量任务上累积可能占用较多存储空间 |
LoRA (Low-Rank Adaptation)
LoRA 是一种低秩适应方法,它通过添加低秩矩阵来修改预训练模型的权重,而不是更新所有权重,这极大地减少了需要训练的参数数量。
优点 | 参数效率极高,可以显著减少存储和计算成本 |
缺点 | 在某些复杂任务上,不如全模型微调那样有效 |
P-tuning v2
P-tuning v2 是一种基于前缀调优(Prefix Tuning)的改进版本,它通过学习一组可训练的向量,作为额外的输入前缀,以适应特定任务。
优点 | 可以适应各种任务,且不需要修改模型的结构 |
缺点 | 相对于其他方法,需要更多的训练时间和资源 |
QLoRA
QLoRA 是 LoRA 的一种变体,它结合了量化技术,进一步减少了模型大小和训练成本。
优点 | 在LoRA的基础上进一步降低了资源需求 |
缺点 | 会影响模型的精度,尤其是在极端量化的情况下 |
Adapter Modules with Freeze
这是一种结合了 Adapter Tuning 和 Freeze 方法的策略,即在冻结大部分模型参数的同时,仅训练插入的适配器模块。
优点 | 既保留了预训练模型的知识,又通过适配器实现了高效的任务适应 |
缺点 | 需要仔细调整适配器的结构和参数,以获得最佳性能 |
二、 常见名词
1. Agent
在本期夏令营中,我们将会接触到Agent,它究竟是什么?
"Agent" 通常指的是具有自主行为能力的实体,它能够在特定环境中感知、推理并采取行动以实现特定目标。Agent 可以是软件程序、机器人或其他形式的智能体。
根据其功能和特性,Agent 可以分为多种类型:
简单反射型 Agent | 这是最基本的类型,它根据当前感知到的环境状态执行固定的反应规则。例如,如果检测到障碍物,机器人就会避开 |
基于模型的反射型 Agent | 除了简单的反应外,这类 Agent 还会维护一个关于环境的内部模型,以便做出更复杂的决定 |
目标导向型 Agent | 这类 Agent 不仅会感知和反应,还会设定和追求目标。它们会规划行动路径以达成目标 |
效用导向型 Agent | 不仅考虑目标,还考虑行动的成本和收益,以最大化某种效用函数 |
学习型 Agent | 这类 Agent 能够从经验中学习,随着时间的推移改进其行为。它们可能使用强化学习、监督学习或无监督学习等方法 |
社会型 Agent | 在多 Agent 系统中,Agent 可能需要与其他 Agent 或人类进行互动,以完成任务或解决冲突 |
适应型 Agent | 这类 Agent 能够适应环境的变化,调整其行为策略以应对不同的情况 |
认知型 Agent | 模拟人类认知过程的 Agent,它们可能具备高级的推理、计划和解决问题的能力 |
2. Token
同样的,在我们使用这些主流大模型的时候,经常会看到Token这个词,它又是什么?
Token 可以理解为文本数据的基本单位,它是模型处理和理解文本的基础,在大模型中起到至关重要的作用。
文本的离散化:
在处理自然语言文本时,模型不能直接处理原始的文本字符串。Tokenization 是一个预处理步骤,它将连续的文本分割成一系列离散的单元,这些单元被称为 tokens。
词汇和子词:
Token 可以是单词、标点符号,甚至是子词(subwords)。例如,BERT 和其他基于 Transformer 的模型使用 WordPiece 分词器,它可以将单词分解成更小的部分,如 "un"、"##der"、"stand",以处理未知词汇和拼写变化。
特殊 Tokens:
除了常规的文本 tokens,大模型通常还需要一些特殊 tokens 来辅助处理文本。例如:
[CLS]:通常放在句子的开头,用于分类任务。
[SEP]:用于标记句子的结束,特别是在处理两个句子的输入时。
[PAD]:用于填充,确保所有输入序列长度相同。
[UNK]:表示未知的词汇。
[MASK]:在掩码语言模型中,用于替换文本中的某些词汇,以训练模型预测缺失的词汇。
Token 化的作用:
Token 化允许模型将文本转换为数值向量,这些向量可以输入到神经网络中进行处理。每个 token 通常对应一个嵌入向量,这表示了 token 在语义空间中的位置。
上下文理解:
在多轮对话或长文本理解中,模型需要处理序列中的 Tokens 来捕捉上下文信息,这对于生成连贯和相关的响应至关重要。
计费单位:
在某些商业化的 NLP 服务中,Token 也是计费的单位。例如,使用某些 API 调用大模型进行文本生成或分析时,费用通常是按输入和输出的 Token 数量计算的。