LIMO:上海交大推出高效推理方法,仅需817条训练样本就能激活大语言模型的复杂推理能力

简介: LIMO 是由上海交通大学推出的一种高效推理方法,通过极少量的高质量训练样本激活大语言模型的复杂推理能力。

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


大家好,我是蚝油菜花,今天跟大家分享一下 LIMO 这个由上海交通大学推出的高效推理方法,仅需817条训练样本就能激活大语言模型的复杂推理能力。

🚀 快速阅读

LIMO 是一种高效的推理方法,旨在通过极少量的高质量训练样本激活大语言模型的复杂推理能力。

  1. 核心功能:仅使用817个精心策划的训练样本,在多个数学推理基准测试中取得显著性能提升。
  2. 技术原理:基于“少即是多推理假设”,利用预训练阶段已编码的领域知识,通过最少但精确组织的认知过程示例来激活复杂的推理能力。

LIMO 是什么

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)

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 微信公众号|搜一搜:蚝油菜花 🥦

相关文章
LaTeX中的多行数学公式
LaTeX中的多行数学公式
3594 0
LaTeX中的多行数学公式
|
存储 Java 数据处理
Flink-01 介绍Flink Java 3分钟上手 HelloWorld 和 Stream ExecutionEnvironment DataSet FlatMapFunction
Flink-01 介绍Flink Java 3分钟上手 HelloWorld 和 Stream ExecutionEnvironment DataSet FlatMapFunction
288 1
|
开发工具 Android开发 开发者
Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?
本文介绍了一种在Android平台上实现实时截图快照的方法,尤其适用于无需依赖系统接口的情况,如在RTMP推送、RTSP服务或GB28181设备接入等场景下进行截图。通过底层模块(libSmartPublisher.so)实现了截图功能,封装了`SnapShotImpl.java`类来管理截图流程。此外,提供了关键代码片段展示初始化SDK实例、执行截图、以及在Activity销毁时释放资源的过程。此方案还考虑到了快照数据的灵活处理需求,符合GB/T28181-2022的技术规范。对于寻求更灵活快照机制的开发者来说,这是一个值得参考的设计思路。
372 1
|
机器学习/深度学习 人工智能 自然语言处理
让大模型不再巨无霸,这是一份最新的大模型参数高效微调综述
【5月更文挑战第12天】最新综述探讨了大模型参数高效微调,旨在减少计算成本、增强泛化能力和灵活性。方法包括Additive、Selective、Reparameterized和Hybrid PEFT,已应用于NLP、CV和多模态学习。尽管取得进展,仍需解决泛化、效率和可解释性问题。未来研究将关注多任务学习、强化学习和神经架构搜索。论文链接:https://arxiv.org/pdf/2403.14608.pdf
866 2
|
敏捷开发 机器学习/深度学习 数据采集
端到端优化所有能力,字节跳动提出强化学习LLM Agent框架AGILE
【10月更文挑战第23天】字节跳动研究团队提出AGILE框架,通过强化学习优化大型语言模型(LLM)在复杂对话任务中的表现。该框架将LLM作为核心决策模块,结合记忆、工具和专家咨询模块,实现智能体的自我进化。实验结果显示,AGILE智能体在ProductQA和MedMCQA数据集上优于GPT-4。
1021 4
|
人工智能 边缘计算 自然语言处理
DistilQwen2:通义千问大模型的知识蒸馏实践
DistilQwen2 是基于 Qwen2大模型,通过知识蒸馏进行指令遵循效果增强的、参数较小的语言模型。本文将介绍DistilQwen2 的技术原理、效果评测,以及DistilQwen2 在阿里云人工智能平台 PAI 上的使用方法,和在各开源社区的下载使用教程。
|
缓存 前端开发 JavaScript
Webpack 4 和 Webpack 5 区别?
【10月更文挑战第23天】随着时间的推移,Webpack 可能会继续发展和演进,未来的版本可能会带来更多的新特性和改进。保持对技术发展的关注和学习,将有助于我们更好地应对不断变化的前端开发环境。
|
机器学习/深度学习 人工智能 自然语言处理
深度学习之对抗样本生成与防御
基于深度学习的对抗样本生成与防御是当前人工智能安全领域的关键研究方向。对抗样本是通过对输入数据进行微小扰动而产生的,能够导致深度学习模型做出错误预测。
650 2
|
数据库 开发者 Python
"揭秘FastAPI异步编程魔法:解锁高性能Web应用的终极奥义,让你的并发处理能力飙升,秒杀同行就靠这一招!"
【8月更文挑战第31天】FastAPI是一款基于Python的现代化Web框架,内置异步编程支持,可充分利用多核CPU的并行处理能力,大幅提升Web应用的性能。本文探讨FastAPI的异步编程特性,通过示例代码展示其在处理并发请求时的优势。异步编程不仅提高了并发处理能力,还降低了资源消耗,使代码更简洁易读。无论对于初创企业还是大型企业级应用,FastAPI都是构建高性能Web服务的理想选择。
665 0
|
网络安全 开发工具 git
使用git克隆仓库报错:Warning: Permanently added‘github.com’ to the .....(ssh )
所以,你可以安全地忽略这个警告,它不会影响到你使用git克隆仓库。如果你已经成功克隆了仓库,那么一切都在正常工作。如果你在克隆过程中遇到其他问题,那可能需要查看具体的错误信息来解决。
838 0

热门文章

最新文章