❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 微信公众号|搜一搜:蚝油菜花 🥦
大家好,我是蚝油菜花,今天跟大家分享一下 LIMO 这个由上海交通大学推出的高效推理方法,仅需817条训练样本就能激活大语言模型的复杂推理能力。
🚀 快速阅读
LIMO 是一种高效的推理方法,旨在通过极少量的高质量训练样本激活大语言模型的复杂推理能力。
- 核心功能:仅使用817个精心策划的训练样本,在多个数学推理基准测试中取得显著性能提升。
- 技术原理:基于“少即是多推理假设”,利用预训练阶段已编码的领域知识,通过最少但精确组织的认知过程示例来激活复杂的推理能力。
LIMO 是什么
LIMO(Less Is More for Reasoning)是上海交通大学研究团队提出的一种高效推理方法。它通过极少量高质量的训练样本激活大语言模型(LLM)的复杂推理能力。核心假设是在预训练阶段已经具备丰富知识基础的模型中,复杂的推理能力可以通过少量但精心设计的训练样本被有效激活。LIMO仅使用817个训练样本,在多个数学推理基准测试中取得了显著的性能提升。
LIMO挑战了传统观点,认为复杂的推理任务需要大量训练数据。相反,LIMO证明了通过极少量但高质量的训练样本,可以实现优越的推理性能。这一发现为未来的推理模型开发提供了新的思路和方向。
LIMO 的主要功能
- 高效推理激活:LIMO仅使用817个精心策划的训练样本,在多个数学推理基准测试中取得了显著的性能提升。在AIME基准测试中,LIMO的准确率达到了57.1%,在MATH基准测试中达到了94.8%,相比之前的模型分别提升了50.6个百分点和35.6个百分点。
- 出色的泛化能力:LIMO在10个不同的基准测试中展现了卓越的分布外泛化能力,平均准确率达到了72.8%,相比使用100倍数据训练的模型,LIMO实现了40.5%的绝对性能提升。
- 验证“少即是多”假设:LIMO的研究提出了“少即是多推理假设”(LIMO Hypothesis),即在基础模型中,当领域知识在预训练阶段已被全面编码时,复杂的推理能力可以通过最少但精确编排的认知过程示范出现。
- 数据高效性:LIMO仅使用了之前方法所需训练数据的1%,挑战了传统观点认为复杂的推理任务需要大量训练数据的假设。
LIMO 的技术原理
- 核心假设:LIMO的核心假设是“少即是多推理假设”(LIMO Hypothesis):在基础模型中,当领域知识在预训练中已被全面编码时,可以通过对认知过程的最小但精确组织的示例而出现。假设认为,复杂推理的引发门槛并不固有地受到目标推理任务复杂性的限制,而是由两个关键因素决定:
- 模型在预训练期间编码的知识基础的完整性:现代基础模型在预训练过程中整合了前所未有数量的数学内容。例如,Llama 2和Llama 3在数学推理方面的训练数据分别达到了1.8T和3.7T代币。
- 训练后的范例的有效性:这些范例作为“认知模板”展示了模型如何有效运用现有的知识基础来解决复杂的推理任务。
- 问题定义:LIMO关注于具有可验证答案的推理任务,目标是生成一个答案和一个推理链。
- 问题选择:选择能促进复杂推理链、多样化思考过程和知识整合的挑战性问题。
- 推理链构建:收集官方解决方案,补充人类专家和AI专家撰写的解决方案,基于最先进的推理模型生成多样化的解决方法。
- 训练协议:使用监督微调在LIMO数据集上对大型语言模型进行微调,采用完整参数微调,使用DeepSpeed ZeRO-3优化和FlashAttention-2。
如何运行 LIMO
1. 环境准备
确保安装了所需的依赖库,并配置好环境。可以使用以下命令安装必要的包:
pip install transformers vllm
2. 使用 Hugging Face Transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# 初始化模型和分词器
model = AutoModelForCausalLM.from_pretrained(
"GAIR/LIMO",
torch_dtype="auto",
trust_remote_code=True,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("GAIR/LIMO", trust_remote_code=True)
# 准备输入消息
messages = [
{
"role": "system", "content": "Please reason step by step, and put your final answer within \\boxed{}."},
{
"role": "user", "content": "What is the result of 1+1?"}
]
# 格式化输入
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
# 分词
inputs = tokenizer(text, return_tensors="pt").to(model.device)
# 生成响应
outputs = model.generate(
**inputs,
max_new_tokens=32768,
temperature=0.7,
top_p=0.95,
do_sample=True
)
# 解码并打印响应
response = tokenizer.decode(outputs[0][inputs['input_ids'].shape[1]:], skip_special_tokens=True)
print(response)
3. 使用 VLLM
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
# 初始化模型
llm = LLM(
model="GAIR/LIMO",
tensor_parallel_size=4, # 根据可用GPU调整
trust_remote_code=True,
swap_space=60,
gpu_memory_utilization=0.96,
)
# 准备输入消息
messages = [
{
"role": "system", "content": "Please reason step by step, and put your final answer within \\boxed{}."},
{
"role": "user", "content": "What is the result of 1+1?"}
]
# 设置分词器
tokenizer = AutoTokenizer.from_pretrained("GAIR/LIMO", trust_remote_code=True)
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
# 配置生成参数
sampling_params = SamplingParams(
temperature=0.7,
max_tokens=32768,
top_p=0.95,
)
# 生成响应
output = llm.generate(text, sampling_params)
print(output[0].outputs[0].text)
资源
- GitHub 仓库:https://github.com/GAIR-NLP/LIMO
- HuggingFace 仓库:https://huggingface.co/GAIR/LIMO
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 微信公众号|搜一搜:蚝油菜花 🥦