大模型入门
大模型
大模型(Large Language Model)是指具有大量参数和训练数据的语言模型,能够生成高质量的文本内容。大模型通常基于深度学习技术,使用神经网络架构,如 Transformer,来处理和生成自然语言文本。
大模型本质上就是两个文件:
-
参数文件(parameters)。里面存的是模型训练完之后的所有权重,就是那个神经网络学到的所有"知识"。以 Meta 发布的 Llama 2 70B 为例——700 亿个参数,每个参数占 2 个字节(float16),总共 140GB。
-
运行代码(run file)。可以是 Python、C、或者任何编程语言写的。这段代码做的事情就是加载那些参数,跑一个神经网络的前向传播。
参数是怎么来的:压缩
大模型的核心:预测
大模型训练本质:有损压缩
大模型是如何训练出来的
造一个大模型,本质上都要搞定五件事:
- 架构(Architecture):用什么样的神经网络?目前答案几乎统一——Transformer。
- 训练算法和损失函数(Training Algorithm & Loss):怎么训?优化什么目标?
- 数据(Data):喂什么样的数据进去?
- 评估(Evaluation):怎么判断模型好不好?
- 系统工程(Systems):怎么让训练跑得动、跑得快?
分词器Tokenizer
分词器(Tokenizer)是大模型中的一个重要组件,负责将输入的文本转换为模型可以理解和处理的格式。分词器的主要功能是将文本分割成更小的单元,通常称为“词”或“子词”,并将这些单元映射到对应的数字ID,以便模型能够进行计算。
举例,对于句子 "Hello, world!",分词器可能会将其分割成以下单元:
- "Hello"
- ","
- "world"
- "!"
然后,分词器会将这些单元映射到对应的数字ID,例如:
- "Hello" -> 123
- "," -> 456
- "world" -> 789
- "!" -> 101
这样,输入的文本就被转换成了一个数字ID的序列 [123, 456, 789, 101],模型可以基于这个序列进行训练和推理。
预训练和后训练
预训练(Pre-training)是指在大规模文本数据上训练模型,使其学习语言的基本结构和语义。预训练通常使用自监督学习方法,例如语言模型任务(Language Modeling),让模型预测下一个词或填空。 后训练(Post-tuning)是指在预训练的基础上,使用特定领域的数据对模型进行进一步训练,以适应特定任务的需求。例如,可以在医疗文本数据上进行后训练,使模型更好地理解医疗术语和知识。
监督微调SFT
监督微调(Supervised Fine-Tuning)是指在预训练或后训练的基础上,使用特定任务的数据对模型进行进一步训练,以优化模型在该任务上的性能。例如,可以使用问答数据集对模型进行微调,使其更好地回答问题。
强化学习RLHF
RLHF(Reinforcement Learning from Human Feedback),基于人类反馈的强化学习。在大模型训练中,RLHF 是一种通过人类反馈来优化模型性能的方法。具体来说,RLHF 通过收集人类对模型输出的反馈(例如喜欢或不喜欢某个回答),并将这些反馈作为奖励信号,来指导模型的训练过程。这样,模型可以逐渐学习到更符合人类期望的行为,从而提升其在特定任务上的表现。
偏好对齐DPO
DPO(Direct Preference Optimization,直接偏好优化) 是 2023 年 Stanford 提出的方法,核心思想极其简洁: 不需要训练奖励模型,不需要强化学习。直接在偏好数据上做监督学习就行。 具体来说:
- 你有一对回答:一个人类更喜欢的(好答案)、一个人类不太喜欢的(差答案)
- DPO 的损失函数就是:增大好答案的生成概率,减小差答案的生成概率
评估
评估是大模型训练中的一个重要环节,用于衡量模型在特定任务上的性能和效果。
系统工程
系统工程是指在大模型训练过程中,设计和实现高效的计算架构和资源管理,以支持大规模模型的训练和推理。这包括分布式训练、模型并行、数据并行、混合精度训练等技术,以确保训练过程的可扩展性和效率。 算力是目前大模型训练的最大瓶颈,训练一个大模型需要大量的计算资源和时间,因此系统工程在大模型训练中起着至关重要的作用。
GPU 和 CPU 的根本区别:
- CPU 优化的是延迟(latency):用少量核心尽快完成一个任务
- GPU 优化的是吞吐量(throughput):用大量核心同时处理很多数据