论文速览【LLM】 —— 【ORLM】Training Large Language Models for Optimization Modeling

news2024/11/10 16:25:24
  • 标题:ORLM: Training Large Language Models for Optimization Modeling
  • 文章链接:ORLM: Training Large Language Models for Optimization Modeling
  • 代码:Cardinal-Operations/ORLM
  • 发表:2024
  • 领域:使用 LLM 解决运筹优化问题

  • 摘要:得益于大型语言模型(LLMs)的优化建模能力,其已成为处理复杂运筹学(OR)问题的强大工具。然而,目前的方法严重依赖于提示工程(如不同 prompt 诱导的 multi-agent 协作)和专有 LLMs,在工业应用场景中这可能导致敏感的数据泄露问题。为了解决这一问题,我们建议针对 “自然语言->优化问题建模” 任务训练开源领域 LLMs。我们确定了构造 OR LLMs 训练数据集的四个关键要求,并提出了 OR-Instruct 数据合成框架,可以针对特定要求半自动化地创建合成数据。我们还介绍了 IndustryOR benchmark,这是第一个用于测试 LLMs 在解决实际 OR 问题上的工业基准。我们将 OR-Instruct 的合成数据应用于多个 7b 大小的开源 LLMs(称为ORLMs),显著提高了模型的优化问题建模能力。我们最佳表现的 ORLM 在 NL4OPT、MAMO 和 IndustryOR 基 准测试上取得了最佳性能

文章目录

  • 1 方法
  • 2. 实验
  • 3. 结论

1 方法

  • 本文研究复杂运筹学 (OR) 问题的自动建模与编程,以减轻对人类专家的严重依赖。具体而言,这类问题要求输入一段自然语言描述的显示工业问题(比如配送货、生产规划等问题),要求模型或系统写出求解问题的代码(比如调用启发式求解器等)
  • 过去的方法大多使用多个 LLM 构建 multi agent 协作框架,每个 agent 复制整个管线的一部分,比如术语解释、数学建模、代码生成、代码运行评估等,它们通过 “多步问题分解”“反思循环纠错” 来生成正确的求解代码。作者认为这种方法有两个问题
    1. 误差会在多步分解中被积累,影响泛化性能
    2. 过去方法大多使用预训练的 LLM,通过 prompting engineering 来配置各个 agent。这意味着求解过程中,具体工业问题的敏感信息将被上传到 LLM 服务提供商(如 OpenAI)等,会导致隐私问题
  • 针对以上问题,作者提出通过训练单一 LLM 本地运行来解决以上两个问题。因此这里的核心问题被转换为如何构造良好的训练数据,数据形式为 ( p , m , c ) (p,m,c) (p,m,c),其中 p p p 为自然语言描述的问题, m m m 为问题的数学建模, c c c 为求解代码(调用 COPT 求解器),整个系统可以表示为一个映射 f : p → ( m , c ) f:p\to (m,c) f:p(m,c) 作者认为训练数据集应该满足以下四个关键需求
    1. 为了提高模型鲁棒性,数据集应该涵盖各种场景、问题类型和不同难度
    2. 由于业务目标、市场条件或资源可用性的变化,运筹问题的优化目标和约束条件可能经常发生变化,数据集应该反映这些变化
    3. 由于不同客户可能会使用不同的术语来描述相同的问题,数据集应该适应这种语言多样性
    4. 对于同一个问题,可以有多种数学建模方案(例如通过引入辅助变量把多项式优化转为线性优化),数据集中应该包含这种数据
  • 作者提出了一个半自动化方法来合成具有以上性质的高质量数据,如下图所示
    在这里插入图片描述
    1. 从一组种子数据开始(686个来自不用行业的问题+求解数据),将它们添加到数据池中
    2. 使用两种策略扩展数据,将合成数据添加到数据池中
      1. 数据扩展:使用 GPT-4 生成涵盖更广泛的场景和问题类型的数据。每次迭代,从数据集采样 3 个样本(如果存在合成样本,则有1个是合成的)作为示例,使用一个预置的 prompt 模板进行 in-context learning 来生成扩展数据,上下文长度限制在 GPT-4 最大长度以内。这种方法部分扩展了场景和问题类型的覆盖度(要求 1),但是无法满足其他 3 个要求
      2. 数据增强:使用三种增强手段,满足以上其他数据要求
        • 修改目标和约束(要求 2):使用预置 prompt 模板进行 in-context learning 来实现。首先向 GPT-4 提供原始例子,要求其首先列出优化目标和约束条件的 5 个潜在变化, 然后把潜在变化和一个 few-shot 提示模板组合后再次输入 GPT-4,从而相应地修改问题、模型和程序。
        • 重新描述问题(要求 3):使用预置 prompt 模板,要求 GPT-4 修改问题的表述,在确保核心逻辑与解决方案保持一致的情况下使其简化或复杂化,从而模拟不同客户的表达习惯
        • 扩展数学建模方案(要求 4):作者从工程师的经验中确定了五种常用数学建模技术(如引入辅助变量或使用 Big M 方法),使用预置 prompt 模板,要求 GPT-4 使用新的建模技术重写问题的数学建模方案
      3. 最后,使用启发式方法自动过滤出明显低质量的数据,通过数据扩展合成的数据正确性约70%,通过数据增强合成的数据正确性约75%。以上整个过程可以多次迭代,直到总数据量达到要求为止

2. 实验

  • 作者使用以上流程,将 686 个种子数据扩展为拥有 30k 数据的 OR-INSTRUCT 数据集,行业分布和问题类型分布如下
    在这里插入图片描述
  • 作者使用以上数据集微调了几个 7B 左右规模的开源 LLM,包括 Mistral-7B、Deepseek-math-7B 和 LLaMA-3-8B
    • 训练过程中,数据被包装为类似 Alpaca 的模板进行训练,输入数据的 ( p , m , c ) (p,m,c) (p,m,c) 问题的 p p p 部分,要求模型预测出 m , c m,c m,c,仅在预测部分计算损失
    • 评估过程中,输入目标问题描述 p p p,使用 greedy 解码策略生成 m , c m,c m,c,从中提取程序 c c c 并执行以得到模型解的量化性能

3. 结论

  • 作者在 NL4OPT、 IndustryOR 和 MAMO 三个 benchmark 上评估模型性能,对比方法包括 NIPS 竞赛冠军方法 tag-BART、多 LLM agent 方法 Chain-of-Experts 和 OptiMUS 等。实验结果显示,经过 OR-INSTRUCT 数据集微调的 LLaMA-3-8B 模型(记为 ORLM-LLaMA-3-8B)在所有 benchmark 上取得了 SOTA 性能,大幅超越了所有 Baseline 方法,相比直接使用 GPT-4 求解(记为 Stander)平均提升 55.4%

    • 在分问题难度评估时,ORLM-LLaMA-3-8B 在所有难度的问题上超越 Stander GPT-4,尤其是在困难问题上超越更多
    • 在分问题类型评估时,ORLM-LLaMA-3-8B 和 Stander GPT-4 都无法求解任何非线性规划和某些罕见类型问题,这可能是因为这些类型的问题过于复杂,且数据量不足

    总的来说,本文提出的数据合成方法有效提升了问题类型和难度的覆盖度

  • 作者进一步进行消融实验,验证三种数据增强方案的有效性。具体而言

    1. 从 OR-INSTRUCT 数据集中选择了一个 4 个尺寸为 3k 的子集,第一个应用了所有三种数据增强方法,其他三个分别剔除某种增强数据
    2. 使用选出的 4 个数据集微调具有相同超参数的 LLaMA-3-8B 模型,对比性能

    发现去除任何一种增强方法都会导致性能下降,说明三种增强方法都有效,其中 “重新描述问题” 对性能影响最大

  • 本文关注的运筹优化问题确实是一个非常现实的问题,对于生产生活中遇到的具体优化问题,使用这种方法,不再需要专家进行数学建模,只需普通工人用自然语言描述问题即可求解,这个具体问题上已经产生了多篇相关文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2080101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浙商之源——龙游商帮丨情义担当与信誉丰碑——姜益大布行

在龙游这片古老而繁华的土地上,流传着一段关于龙商精神的光辉篇章——姜益大的故事。这不仅是一段商业传奇,更是龙游商人智慧、勇气与诚信的生动写照。 初来乍到,逆锋起笔 清朝同治六年(1867),安徽绩溪人姜德明在龙游商帮朋友点拨…

《JavaEE进阶》----2.<Spring前传:Maven项目管理工具>

本篇博客讲解我们在使用Spring框架时所要用到的Maven这个项目管理工具 它可以更方便的管理我们的项目,比如通过 1.常用的Maven命令来进行编译、测试、打包、清理包等等,不仅如此, 2.Maven还可以对依赖进行管理,方便我们添加依赖、…

信息打点-资产泄露CMS识别Git监控SVNDS_Store备份

知识点: 1、CMS指纹识别源码获取方式; 2、习惯&配置&特性等获取方式; 3、托管资产平台资源搜索监控; 详细点: 参考:https://www.secpulse.com/archives/124398.html 源码泄露原因: …

fastjson序列化时过滤字段的方法

在使用fastjson进行序列化时,可能需要根据实际需求过滤掉某些字段,以避免将敏感信息或不必要的字段发送到客户端。fastjson提供了多种灵活的方式来实现这一需求。以下整理了fastjson序列化时过滤字段的几种常用方法。 方法一:使用fastjson的…

Windows10激活__“亲测有效”无需秘钥

目录 前言 1. 鼠标“右键”点击“开始菜单” 2. 点击选择“Windows PowerShell(管理员)” 3. 在该终端窗口,输入“ irm "https://get.activated.win" |iex ” 4. 按下“Enter”键,回车执行该命令 5. 按下数字键盘…

如何使用 Python 和 Selenium 解决 Cloudflare 验证码

在网络自动化测试或网页数据抓取的过程中,Cloudflare验证码是许多开发者遇到的棘手问题。这一验证码设计的初衷是为了保护网站免受恶意攻击,但它也给合法的自动化操作带来了不小的挑战。 那么,使用Python和Selenium,是否有办法有…

PCL 点云ISS关键点提取算法

目录 一、概述二、代码示例三、运行结果📌 结果预览 🔗接上篇 Python 点云ISS关键点提取算法 一、概述 点云ISS关键点(Intrinsic Shape Signatures):利用点云中每个点的局部邻域的协方差矩阵来分析局部几何结构。协方差矩阵的特征值可以揭示局部几何形状的显著性。通…

通过websock实现实时刷新前端(可实现进度条)

业务场景: 领导让我们做一个根据进度实时刷新的进度条,如下所示 后面去网上查了下,可以通过websocket这种双向通信协议的持久链接实现。 配置 创建配置类,启用websocket支持 import org.springframework.context.annotation.…

进阶-task1-深度学习理论基础

学习目标: 从不同的角度更好地优化神经网络 熟悉临界点等与优化有关的常见的概念网络优化失败的常见原因常用的解决/优化方案 具体内容: 网络优化常见的问题? 损失函数Loss不再下降,但是收敛值不合理 深层网络反而不如浅层网…

【扩散模型(七)】IP-Adapter 与 IP-Adapter Plus 的具体区别是什么?

系列文章目录 【扩散模型(二)】IP-Adapter 从条件分支的视角,快速理解相关的可控生成研究【扩散模型(三)】IP-Adapter 源码详解1-训练输入 介绍了训练代码中的 image prompt 的输入部分,即 img projection…

19c库启动报ORA-600 kcbzib_kcrsds_1---惜分飞

一套19c的库由于某种情况,发现异常,当时的技术使用隐含参数强制拉库,导致数据库启动报ORA-00704 ORA-600 kcbzib_kcrsds_1错误 2024-08-24T06:11:25.49430408:00 ALTER DATABASE OPEN 2024-08-24T06:11:25.49437008:00 TMI: adbdrv open database BEGIN 2024-08-24 06:11:25.49…

Iptables-快速上手

Iptables firewall 防火墙Iptables简述一、Iptables的四表五链1.filter表2.nat表3.raw表4. mangle表5.数据包的流通过程 二、快速上手1. 查看规则2. 规则详细3. 添加规则4. 自定义链 三、关于iptables和docker1. 背景2. 解决方案 firewall 防火墙 从逻辑上讲,可以分…

【国外比较权威的免费的卫星数据网站】

国外比较权威的免费卫星数据网站有多个,它们各自在数据覆盖范围、分辨率、以及数据种类等方面具有不同的特点和优势。以下是一些推荐的网站: NASA Worldview 网址:https://worldview.earthdata.nasa.gov/简介:NASA Worldview显示…

Visual Studio解决scanf不能正常输入的问题

总所周知,vs中直接使用scanf会报错,用scanf_s就不会,然而很多时候我们用的还是scanf,下面讲解如何在vs中使用scanf 🎁1.添加#define _CRT_SECURE_NO_WARNINGS 不做任何处理,会出现的报错 注意下方的C499…

MySQL商品复购率计算

先看表格 复购率计算: 根据商品ID、商品名称、订单状态、订单创建时间、收货人电话来进行复购率计算: select b.商品ID,b.名称,b.购买人数,c.复购人数,c.复购人数/b.购买人数 as "复购率" from ( select 商品ID,max(商品名称) as "名称…

嵌入式学习day34

单循环服务器:同一时刻,只能处理一个客户端的任务 并发服务器:同一时刻,能够处理多个客户端的任务 UDP不需要创建连接 TCP并发服务器 1.多进程 2.多线程 3.IO多路复用 1、多进程 2、多线程 3、IO多路复用 IO模型&#xff1a…

机器学习:K-means算法(内有精彩动图)

目录 前言 一、K-means算法 1.K-means算法概念 2.具体步骤 3.精彩动图 4.算法效果评价 二、代码实现 1.完整代码 2.结果展示 3.步骤解析 1.数据预处理 2.建立并训练模型 3.打印图像 四、算法优缺点 1.优点 2.缺点 总结 前言 机器学习里除了分类算法&#xff0…

Threejs绘制方形管道

之前有用Threejs的TubeGeometry绘制管道效果,但是TubeGeometry的管道效果默认是圆形的截面,这节实现方形截面的管道绘制。 因为Threejs不提供方形截面的管道,所以使用的是绘制截面,然后拉伸的方式,所以需要先绘制一个方…

【FPGA数字信号处理】- 什么是时域

​数字信号处理的领域中,时域是我们理解和处理数字信号的关键维度之一。 时域分析能够让我们直接观察信号随时间的变化情况,为后续的信号处理和系统设计提供坚实的基础。 接下来将以通俗易懂的方式,让大家深入了解数字信号处理基础中的时域…

算法学习:一维数组的排序算法

【排序算法】八种排序算法可视化过程_哔哩哔哩_bilibili 1,冒泡排序: 冒泡排序(Bubble Sort): 冒泡排序是一种简单的排序算法,它通过重复地交换相邻的元素,直到整个序列有序。算法思路是:从第一个元素开始,依次比较相邻的两个元素,如果前者大于后者,就交…