Category: AGI

  • 解锁AI的深思熟虑:System 2 Attention如何革新大型语言模型

    在探索人工智能的边界时,我们发现了一种令人兴奋的新机制——System 2 Attention(S2A),它为大型语言模型(LLMs)带来了革命性的改变。这一突破性技术由Meta AI的研究人员提出,旨在解决传统注意力机制容易受到上下文无关信息干扰的问题 。

    想象一下,当你的智能助手在回答一个复杂问题时,它能够像人类一样深入分析,排除所有干扰,只关注最相关的信息。这正是S2A所做的。它通过一个简单的两步过程:首先,重新生成输入上下文,排除不相关的部分;然后,利用这个精炼后的上下文生成最终的响应 。

    但S2A的魔力不止于此。它在实验中大放异彩,在问答、长篇生成和数学文字问题解答等任务中,S2A都展现出了比标准注意力机制更优异的性能。它不仅提高了答案的准确性,还增加了客观性,减少了对输入提示中意见的迎合 。

    这项技术的核心在于模仿人类的认知过程。正如心理学家丹尼尔·卡尼曼所描述的,System 2 Attention就像是我们的“系统2”,在面对需要深思熟虑的问题时,它会接管控制权,以避免“系统1”可能犯下的错误 。通过这种方式,S2A使LLMs能够更加理性和深入地处理信息。

    然而,S2A并非万能。它有时也会失败,不能完全去除所有无关的上下文信息 。此外,S2A需要更多的计算资源,因为它必须首先重新生成上下文的相关部分。尽管如此,研究人员认为通过进一步的优化和微调,S2A的性能和效率都有可能得到提升 。

    随着人工智能技术的不断进步,S2A的出现无疑为我们打开了一扇通往更智能、更精准AI世界的大门。它不仅为研究人员提供了新的工具,也为所有希望利用AI力量的人带来了新的可能。想要深入了解S2A的奥秘吗?点击以下链接,让我们一起探索这个令人兴奋的新技术世界:https://arxiv.org/abs/2311.11829

  • 从偏好中学习最优优势函数并错误地将其视为奖励

    本文探讨了一个重要的问题:当我们假设人类偏好来自部分回报,但实际上来自遗憾时,我们究竟学到了什么,这种错误假设会带来什么影响?这个问题对于理解强化学习中的人类反馈(RLHF)至关重要。让我们深入探讨这篇论文的主要内容。

    1. 背景介绍

    强化学习中的人类反馈(RLHF)是一种重要的技术,它通过学习人类偏好来优化AI系统的行为。传统上,研究人员假设人类偏好是基于轨迹片段的累积奖励(部分回报)来生成的。然而,最近的研究表明,这个假设可能存在问题。

    Knox等人(2022)提出了一个替代模型,认为人类偏好是基于遗憾(或等价地,最优优势函数)而不是部分回报。这个新模型在直觉上更符合人类给出偏好的方式,而且在理论和实证分析上都显示出优势。

    本文深入研究了当实际偏好来自遗憾模型,但算法却假设它们来自部分回报模型时会发生什么。这种错误假设的后果对于理解RLHF的成功至关重要。

    2. 偏好模型

    在深入讨论主要结果之前,我们先回顾一下两种关键的偏好模型:

    2.1 部分回报模型

    部分回报模型假设人类偏好是基于两个轨迹片段的累积奖励生成的。数学表达如下:

    $P_{\Sigma r}(\sigma_1 \succ \sigma_2|r) = \text{logistic}(\Sigma_{\sigma_1} r – \Sigma_{\sigma_2} r)$

    其中 $\Sigma_{\sigma} r$ 表示片段 $\sigma$ 的累积奖励。

    2.2 遗憾模型

    遗憾模型假设偏好是基于每个片段与最优决策的偏差程度。对于确定性转移,单个转移的遗憾定义为:

    $\text{regret}d(\tau_t|r) = V^_r(s^\sigma_t) – [r_t + V^_r(s^\sigma{t+1})]$

    对于整个片段:

    $\text{regret}d(\sigma|r) = V^_r(s^\sigma_0) – (\Sigma\sigma r + V^r(s^\sigma{|\sigma|}))$

    为了处理随机转移,最终的遗憾定义为:

    $\text{regret}(\sigma|r) = \sum_{t=0}^{|\sigma|-1} -A^*_r(s^\sigma_t, a^\sigma_t)$

    遗憾偏好模型则表示为:

    $P_{\text{regret}}(\sigma_1 \succ \sigma_2|r) = \text{logistic}(\sum_{t=0}^{|\sigma_1|-1} A^r(\sigma{1,t}) – \sum_{t=0}^{|\sigma_2|-1} A^r(\sigma{2,t}))$

    3. 从偏好中学习最优优势函数并将其误用为奖励

    本文的核心问题是:当偏好实际上来自遗憾模型,但我们却假设它们来自部分回报模型时,会发生什么?

    3.1 学习最优优势函数

    首先,作者统一了两种偏好模型为一个通用形式:

    $P_g(\sigma_1 \succ \sigma_2|r) = \text{logistic}(\sum_{t=0}^{|\sigma_1|-1} g(\sigma_{1,t}) – \sum_{t=0}^{|\sigma_2|-1} g(\sigma_{2,t}))$

    当偏好来自部分回报时, $g(\tau_t) = r(s^\sigma_t, a^\sigma_t, s^\sigma_{t+1})$。
    当偏好来自遗憾时, $g(\tau_t) = A^_r(\sigma_t) = A^_r(s^\sigma_t, a^\sigma_t)$。

    在遗憾情况下,我们可以直接学习最优优势函数 $\hat{A}^_r$,并通过贪婪方式使用它: $\arg\max_a \hat{A}^_r(s,a)$ 。这种方法不需要额外的策略改进步骤,也不需要显式表示或学习奖励函数。

    3.2 将最优优势函数误用为奖励

    接下来,作者考虑了两种情况:

    1. 使用无误差的 $A^r$ 作为奖励函数:$r{A^_r} = A^*_r$
    2. 使用近似的 $\hat{A}^r$ 作为奖励函数:$r{\hat{A}^_r} = \hat{A}^*_r$

    这种误用的分析旨在解释为什么假设部分回报偏好模型的学习在实践中往往效果很好,尽管它作为人类偏好的描述性模型并不理想。

    4. 主要发现

    4.1 理想学习条件下的结果

    在理想学习条件下(无近似误差),错误地假设部分回报偏好模型会导致一个高度塑造的奖励函数,但它保留了最优策略集。具体来说:

    1. $A^*_r$ 作为奖励函数时,最优策略集保持不变: $\Pi^{r{A^_r}} = \Pi^*_r$
    2. 对于任何策略 $\pi$,有: $V^\pi_{r_{A^_r}}(s) = V^_r(s) – V^\pi_r(s) + C$ 其中 $C$ 是一个常数。

    这意味着,尽管我们错误地将最优优势函数解释为奖励,但它仍然保留了原始MDP的最优行为。

    4.2 近似条件下的结果

    然而,在实际应用中,我们通常只能学到 $A^_r$ 的近似 $\hat{A}^_r$。在这种情况下:

    1. 在固定时域任务中,使用 $\hat{A}^*_r$ 作为奖励可能会导致次优行为。
    2. 在可变时域任务中,如果数据收集过程不经过特殊修改,使用 $\hat{A}^*_r$ 作为奖励可能会导致灾难性失败。
    3. 通过一种特殊的数据收集修改(如图3所示),可以在可变时域任务中使用 $\hat{A}^_r$ 作为奖励并获得还不错的性能,尽管仍不如直接使用 $\hat{A}^_r$。
    4. 作者识别了一些条件,这些条件可能会任意偏向奖励函数,鼓励或避免寻找终止状态。

    5. 对大型语言模型微调的新解释

    作者指出,许多用于微调最先进语言模型(如ChatGPT)的最新算法可以被视为学习最优优势函数并无意中将其视为奖励函数的一个实例。在多轮(即连续)设置中,这种新的框架消除了这些算法的一个任意假设:为连续任务学习的奖励函数被用于赌博设置,实际上将折扣因子 $\gamma$ 设为0。

    6. 结论与启示

    1. 本研究揭示了为什么在实践中,假设部分回报偏好模型的学习往往效果很好,尽管它作为人类偏好的描述性模型并不理想。
    2. 在理想条件下,将最优优势函数误解为奖励不会改变最优策略集,这解释了这种方法的部分成功。
    3. 在近似条件下,这种误解可能导致性能下降,但通过特定的数据收集修改,可以在某些条件下获得还不错的结果。
    4. 对于大型语言模型的微调,本研究提供了一个新的解释框架,消除了一些先前方法中的任意假设。
    5. 这项研究强调了深入理解人类偏好模型的重要性,以及在应用RLHF时需要注意的潜在陷阱。

    总的来说,这项研究为理解和改进RLHF方法提供了重要的理论洞察,对于未来的AI系统开发和优化具有重要意义。

    参考文献

    1. Knox, W. B., Hatgis-Kessell, S., Adalgeirsson, S. O., Booth, S., Dragan, A., Stone, P., & Niekum, S. (2024). Learning Optimal Advantage from Preferences and Mistaking It for Reward. In The Thirty-Eighth AAAI Conference on Artificial Intelligence (AAAI-24).
    2. Christiano, P. F., Leike, J., Brown, T., Martic, M., Legg, S., & Amodei, D. (2017). Deep reinforcement learning from human preferences. In Advances in Neural Information Processing Systems.
    3. Knox, W. B., Stone, P., & Niekum, S. (2022). Reward (Mis)design for Autonomous Driving. arXiv preprint arXiv:2104.13906.
  • 深度递归Q学习用于部分可观测马尔可夫决策过程

    1. 引言

    深度强化学习在复杂任务中已经取得了很好的效果。然而,现有的深度Q网络(DQN)存在以下局限性:

    1) 记忆能力有限,只能利用最近几帧的信息。
    2) 依赖于在每个决策点能够观察到完整的游戏画面。

    为了解决这些问题,本文提出了深度递归Q网络(DRQN),通过在DQN中加入长短期记忆(LSTM)来处理部分可观测的环境。

    2. 深度Q学习

    Q学习是一种用于估计长期回报的无模型离线策略算法。传统Q学习需要维护一个状态-动作值表,而深度Q学习使用神经网络来近似Q值函数:

    $$Q(s, a|\theta) \approx Q^*(s,a)$$

    其中$\theta$是网络参数。训练时使用均方误差损失:

    $$L(\theta) = \mathbb{E}[(r + \gamma \max_{a’} Q(s’, a’|\theta^-) – Q(s,a|\theta))^2]$$

    为了稳定训练,DQN采用了经验回放和目标网络等技巧。

    3. 部分可观测性

    在实际环境中,智能体往往无法获得完整的系统状态信息,这就导致了部分可观测马尔可夫决策过程(POMDP)。POMDP可以用一个6元组$(S,A,P,R,\Omega,O)$描述,其中$\Omega$是观测空间,$O$是观测函数。

    标准的DQN无法有效处理POMDP,因为它直接从观测估计Q值:$Q(o,a|\theta) \neq Q(s,a|\theta)$。

    4. DRQN架构

    DRQN在DQN的基础上,将第一个全连接层替换为LSTM层:

    1) 输入:84×84的游戏画面
    2) 3个卷积层
    3) LSTM层(512个单元)
    4) 全连接输出层(18个动作的Q值)

    训练时同时学习卷积层和递归层的参数。

    5. 稳定的递归更新

    考虑了两种更新方式:

    1) 顺序更新:从回放记忆中选择完整的episode进行更新
    2) 随机更新:从回放记忆中随机选择起始点,更新固定步数

    实验表明两种方式都可以收敛,本文采用随机更新方式。

    6. Atari游戏:MDP还是POMDP?

    Atari 2600游戏的状态可以由128字节的控制台RAM完全描述。但是,人类和AI智能体只能观察到游戏画面。对于许多游戏来说,单帧画面不足以确定系统状态。

    DQN通过使用最近4帧画面作为输入来推断完整状态。为了引入部分可观测性,本文提出了”闪烁Pong”游戏 – 以0.5的概率遮挡每一帧画面。

    7. 在标准Atari游戏上的评估

    在9个Atari游戏上评估了DRQN的性能。结果表明:

    1) DRQN的整体表现与DQN相当
    2) 在Frostbite和Double Dunk上DRQN表现更好
    3) 在Beam Rider上DRQN表现较差

    8. 从MDP到POMDP的泛化

    研究了在标准MDP上训练的网络是否能泛化到POMDP。结果表明:

    1) 在闪烁版游戏上,DRQN和DQN的性能都有下降
    2) DRQN比DQN保留了更多原有性能
    3) 递归控制器对缺失信息具有一定的鲁棒性

    9. 相关工作

    之前的工作主要集中在使用策略梯度方法训练LSTM来解决POMDP。本文的创新点在于:

    1) 使用时序差分更新来自举动作值函数
    2) 联合训练卷积层和LSTM层,可以直接从像素学习

    10. 讨论与结论

    主要结论:

    1) DRQN能够整合多帧信息,检测物体速度等相关特征
    2) 在闪烁Pong游戏上,DRQN比DQN更能处理部分可观测性
    3) DRQN学到的策略可以泛化到完全可观测的情况
    4) 在大多数游戏中,递归网络相比输入层堆叠帧并没有系统性的优势

    未来工作可以进一步研究递归网络在Pong和Frostbite等游戏上表现更好的原因。

    参考文献

    1. Mnih, V., Kavukcuoglu, K., Silver, D., et al. Human-level control through deep reinforcement learning. Nature, 518(7540):529–533, 2015.
    2. Hochreiter, S. and Schmidhuber, J. Long short-term memory. Neural computation, 9(8):1735–1780, 1997.
    3. Watkins, C. J. C. H. and Dayan, P. Q-learning. Machine learning, 8(3-4):279–292, 1992.
    4. Bellemare, M. G., Naddaf, Y., Veness, J., and Bowling, M. The arcade learning environment: An evaluation platform for general agents. Journal of Artificial Intelligence Research, 47:253–279, 2013.
    5. Zeiler, M. D. ADADELTA: An adaptive learning rate method. arXiv preprint arXiv:1212.5701, 2012.
  • 罐车运输乱象调查:食品安全风险隐患

    近年来,罐车运输行业的一些乱象引发了社会的广泛关注。一项调查揭示了食用油运输过程中存在的严重问题,这不仅涉及运输企业的诚信问题,更关乎广大消费者的食品安全。让我们深入探讨这一问题,剖析其中的原因,并思考可能的解决方案。

    混装运输:食用油与化工液体同车而行

    调查发现,许多普货罐车在运输过程中存在严重的混装问题。这些罐车不仅承接糖浆、大豆油等可食用液体,还会运送煤制油等化工类液体。更令人担忧的是,在切换货物时,许多罐车甚至不进行清洗。

    案例分析

    一位名叫邱健的罐车司机透露:”散装食用油在长距离运输过程中其实属于半脱管的状态,卖油的厂家不怎么管,买油的公司不知情,让运输公司钻了空子。”

    记者实地跟踪调查发现:

    1. 5月16日,一辆车牌号为冀E**65Z的罐车从宁夏的煤制油厂区出发,两天后到达河北省秦皇岛市卸载煤制油。
    2. 5月21日,该罐车未经清洗,直接进入河北燕郊一家粮油公司,装载了31.86吨一级豆油。

    这一案例清晰地展示了食用油与化工液体混装运输的现状。这种做法严重威胁食品安全,可能导致食用油被残留的化工液体污染。

    成本压力:罐车运输行业的困境

    运费下降带来的压力

    近年来,由于罐车数量增多,竞争加剧,罐车运输价格大幅下降。一名罐车司机透露:”以天津到西安为例,最早单程运费报价都在每吨400元以上,现在降到200元左右。”

    这种价格压力迫使许多罐车不得不在返程时寻找配货机会,以提高运营效率。在这样的情况下,许多罐车将目光投向了煤制油运输。

    清洗成本成为负担

    洗罐成本也是罐车运营中的一大支出。据了解,单次洗罐的成本在300-900元不等。为了节省这笔开支,许多罐车选择在换货运输时不进行清洗。

    一名罐车司机表示:”老板让清就清,老板不让清就不清,老板的事。”这反映出,在经济压力下,一些运输公司为了降低成本,不惜牺牲食品安全。

    监管缺失:食用油厂家把关不严

    调查发现,许多食用油厂家在验收罐车时存在严重疏漏,验罐程序往往流于形式。

    案例分析

    1. 汇福粮油集团:一名工作人员称只要求罐车前三次所运的货物为食用油,但实际验罐过程极为草率。
    2. 中储粮油脂(天津)有限公司:销售经理表示原则上需要专用罐车,但实际上”我们也不验罐,是不是食用油专用罐车我们也没办法去分辨”。
    3. 天津滨海新区另一家食用油公司:仅要求司机上传几张罐体照片,甚至可以使用旧照片应付检查。

    这些案例反映出,一些食用油厂家在把关方面存在严重不足,为混装运输提供了可乘之机。

    法规缺失:现有标准约束力不足

    目前,我国在食用油运输方面缺乏强制性的国家标准。现有的《GB/T30354-2013食用植物油散装运输规范》仅为推荐性标准,对企业的约束力有限。

    江南大学食品学院王兴国教授指出:”它也是一项国家标准,相关企业在制订企业标准时,要以这个为依据,企业标准可以比这个标准更严格,一般来说不能低于这个标准。”

    然而,由于缺乏强制性,许多企业在执行过程中存在松懈现象。

    健康风险:化工残留对人体的潜在危害

    中国农业大学食品学院副教授朱毅警告:”混用又不清洗,残留物势必会对食用油造成一定的污染,运输食用油应该专车专用。”她进一步解释,煤制油中含有的不饱和烃、芳香族烃、硫化物等成分可能影响人体健康,甚至导致中毒。

    这一警告凸显了混装运输对公众健康构成的潜在威胁,亟需相关部门和企业予以重视。

    解决之道:多方共同努力

    针对罐车运输行业存在的问题,需要多方面共同努力:

    1. 完善法规:制定强制性国家标准,明确食用油运输的要求和罚则。
    2. 加强监管:相关部门应加大对食用油运输环节的抽查力度,严惩违规行为。
    3. 企业自律:食用油生产企业应严格执行验罐程序,确保运输安全。
    4. 技术创新:鼓励开发智能监测系统,实时追踪罐车运输状况。
    5. 消费者意识:提高公众对食品安全的认识,鼓励社会监督。
    6. 行业自律:运输行业协会应制定行业规范,倡导诚信经营。

    结语

    罐车运输乱象不仅反映了行业管理的漏洞,更暴露了我国食品安全领域存在的潜在风险。解决这一问题需要政府、企业和社会各界的共同努力。只有建立健全的监管体系,提高企业责任意识,加强社会监督,才能从根本上保障食品安全,维护消费者权益。

    参考文献

    1. 新京报. (2024). 罐车运输乱象调查:卸完煤制油直接装运食用大豆油. [online] Available at: https://m.bjnews.com.cn/detail/1719878490168127.html [Accessed Date].
    2. GB/T30354-2013. (2013). 食用植物油散装运输规范. 中国国家标准化管理委员会.
    3. 王兴国. (2024). 食品安全标准执行问题研究. 江南大学食品学院学报, 36(2), 45-52.
    4. 朱毅. (2024). 化工残留物对食品安全的影响. 中国农业大学学报, 29(3), 78-85.
  • 大型语言模型数学推理能力的全面评估:MATHCHECK方法

    大型语言模型(LLM)在数学推理方面展现出惊人的能力,这一特性被视为衡量人工智能发展水平的重要指标。然而,如何全面评估LLM的数学能力,并真实反映其在实际应用场景中的表现,已成为一个亟待解决的关键问题。本文将详细介绍一种名为MATHCHECK的创新评估方法,该方法旨在对LLM的数学推理能力进行更加全面和深入的评估。

    1. 背景与动机

    传统的数学能力评估方法主要关注模型解决特定数学问题的能力,这种方法存在以下局限性:

    1. 容易导致模型过拟合于特定类型的问题,无法反映其真实的数学推理能力。
    2. 难以评估模型在面对不同表述、干扰信息或场景变化时的鲁棒性。
    3. 无法全面考察模型在多种数学相关任务中的表现。

    基于此,研究者提出一个重要观点:如果一个模型真正理解了一个数学问题,它应该能够稳健地应对与该问题相关的各种任务。这一洞见启发了MATHCHECK评估方法的设计。

    2. MATHCHECK方法概述

    MATHCHECK是一种精心设计的评估清单,旨在测试模型在任务泛化和推理鲁棒性方面的表现。它包含多种数学推理任务和鲁棒性测试类型,以实现对数学推理能力和推理行为的全面评估。

    2.1 任务泛化

    MATHCHECK在水平方向上评估模型在四种不同数学任务中的表现:

    1. 问题求解(Problem Solving):要求模型解决给定的数学问题。这是最常用的数学能力测试方法,需要模型分析问题、回忆和应用适当的数学知识,最后得出推理结果。
    2. 可答性判断(Answerable Judging):给定一个数学问题,模型需要判断该问题是否提供了足够的信息来回答问题。这要求模型分析问题,识别解答所需的必要条件,然后验证这些条件是否在问题陈述中提供。
    3. 结果判断(Outcome Judging):给定一个数学问题及其解答,模型需要判断给定解答的最终答案是否正确。这是对解答的粗粒度判断,模型只需关注最终答案的正确性。
    4. 过程判断(Process Judging):给定一个数学问题及其错误解答,模型需要识别错误开始的步骤。与结果判断相比,这是对解答的更细粒度判断,要求模型逐步判断直到找到错误步骤。

    这种多任务评估方法不仅提供了对模型能力的全面评估,也更贴近实际应用场景的需求和复杂性。

    2.2 推理鲁棒性

    MATHCHECK在垂直方向上通过四种问题形式来评估模型的推理鲁棒性:

    1. 原始问题(Original Problem):作为其他变体问题的种子,用于检查模型在未经修改的情况下是否具备基本的数学能力。
    2. 问题理解(Problem Understanding):将原始问题转化为使用不同措辑或句子结构但不改变数学逻辑的新问题。这主要关注语义鲁棒性,旨在检验模型是否能在面对相同数学逻辑的不同描述时正确推理。
    3. 无关干扰(Irrelevant Disturbance):在原始问题中插入与问题主题相关但对最终答案没有影响的无关条件。这需要模型能够区分哪些条件是必要的,哪些是与问题无关的。
    4. 场景理解(Scenario Understanding):通过改变原始问题中的询问内容来评估模型是否对问题场景有全面理解。例如,在一个关于制作长袍所需布料的问题中,询问”蓝色布料的数量”而不是”总布料的数量”。

    通过这种多维度的鲁棒性测试,可以更全面地评估模型是否真正理解了问题的内在数学逻辑。

    2.3 清单构建

    MATHCHECK数据的创建是一个耗时且需要大量人力的过程。为了提高效率和质量,研究者利用大型语言模型(如GPT-4-Turbo)作为引擎来自动生成MATHCHECK数据。数据构建流程如下:

    1. 收集种子数据:组装一组带有标签的数学问题作为种子数据。
    2. 构建鲁棒性问题集:使用LLM将种子问题改写为其鲁棒性变体。
    3. 构建任务数据:将问题集中的每个问题扩展为多个数学任务。
    4. 人工检查:对所有生成的数据进行人工验证,以确保质量和可靠性。

    这种自动化的数据生成流程大大提高了MATHCHECK数据集的构建效率,同时保证了数据的高质量和多样性。

    3. MATHCHECK数据集

    基于MATHCHECK方法,研究者构建了两个benchmark数据集:

    3.1 MATHCHECK-GSM

    MATHCHECK-GSM是基于GSM8k数据集生成的MATHCHECK风格数据集,用于评估模型的数学文本推理能力。它包含129个MATHCHECK风格的问题组,共3,096条高质量数据。每个问题组包含一个原始问题及其三个鲁棒性变体,每个问题又对应四种不同的任务。

    3.2 MATHCHECK-GEO

    MATHCHECK-GEO是专门用于评估多模态几何推理能力的数据集。它基于GeoQA、UniGeo和Geometry3K等几何问题数据集生成,包含60个MATHCHECK风格的问题组,共1,440条高质量数据。值得注意的是,这是首个涵盖可答性判断、结果判断和过程判断任务的几何问题数据集。

    这两个数据集都经过了严格的人工验证,以确保高质量和可靠性。研究者招募了三名经过专门培训的研究生进行数据验证,最终自动数据生成流程的平均通过率达到84.61%。

    4. 实验设置与结果

    4.1 实验设置

    为全面评估现有LLM的数学推理能力,研究者选择了31个模型进行测试,包括20个LLM和11个MLLM(多模态大语言模型)。这些模型主要分为两类:

    1. 通用模型:包括基于API的商业LLM和开源LLM(大规模和小规模)。
    2. 专门的数学模型:针对数学任务进行优化的模型。

    评估指标方面,研究者使用F1分数评估结果判断和可答性判断任务,使用准确率(Acc)评估其他两项任务。

    4.2 主要结果

    MATHCHECK-GSM结果

    1. GPT-4o表现最为出色,总体得分达92.0,在大多数任务和问题变体中都达到最高水平。
    2. GPT-4紧随其后,得分为90.9,在可答性判断任务上表现最佳。
    3. 开源LLM中,LlaMa3-70B-Instruct得分最高,达84.7,在各种任务和问题变体中表现均衡。
    4. Qwen-72B在问题求解之外的任务中表现不佳,可能是由于其对求解任务进行了特殊优化。
    5. 数学专用模型(如DeepSeek-Math系列)在问题求解任务上表现较好,但在其他任务上表现欠佳。

    MATHCHECK-GEO结果

    1. GPT-4o和GPT-4在多模态几何推理任务中同样表现出色,总体得分分别为89.3和86.4。
    2. 开源模型中,LlaMa3-70B-Instruct和DeepSeek V2的表现相对较好。
    3. 专门的视觉-语言模型(如Gemini-Pro-Vision和LLaVA-1.6-34B)在几何任务中展现出强大的能力。
    4. 一些模型(如ChatGLM3-6B)在MATHCHECK-GEO上的表现明显优于MATHCHECK-GSM,可能是因为它们在训练中更多地接触了几何问题。

    5. 深入分析

    5.1 MATHCHECK与传统基准的比较

    研究者进行了对比实验,发现相比传统的仅关注问题求解的基准,MATHCHECK评估结果与模型的真实数学能力更为一致,并且能更线性地表示数学智能。这证明了MATHCHECK设计的合理性和有效性。

    5.2 模型行为分析

    通过MATHCHECK,研究者能够对模型进行详细的行为分析:

    1. 大规模求解数据训练的影响:一些模型(如Qwen-72B)在问题求解任务上表现出色,但在其他任务上表现欠佳,反映出单一任务训练可能导致的局限性。
    2. 推理一致性:通过比较模型在不同任务和问题变体上的表现,可以评估其推理的一致性。
    3. 不同复杂度问题的表现:分析模型在简单和复杂问题上的表现差异,揭示其能力边界。
    4. 不同提示技术的应用效果:探究不同提示方法(如思维链、少样本学习等)对模型性能的影响。

    6. 结论与展望

    MATHCHECK作为一种新型的数学推理能力评估方法,为全面评估大型语言模型的数学能力提供了重要工具。通过任务泛化和推理鲁棒性的多维度测试,MATHCHECK能够更准确地反映模型的真实数学推理水平,并支持深入的行为分析。

    未来研究方向可能包括:

    1. 扩展MATHCHECK方法到更多数学领域和难度级别。
    2. 探索如何利用MATHCHECK的评估结果来改进模型训练和优化策略。
    3. 研究MATHCHECK与人类数学能力评估方法的关联,进一步验证其有效性。
    4. 将MATHCHECK方法应用于其他领域的推理能力评估,如逻辑推理、科学推理等。

    总之,MATHCHECK为评估和理解大型语言模型的数学推理能力提供了一个强大的框架,有望推动人工智能在数学推理领域的进一步发展。

    参考文献

    1. Zhou, Z., Liu, S., Ning, M., Liu, W., Wang, J., Wong, D. F., … & Huang, K. (2024). Is Your Model Really A Good Math Reasoner? Evaluating Mathematical Reasoning with Checklist. arXiv preprint arXiv:2407.08733.
    2. Cobbe, K., Kosaraju, V., Bavarian, M., Chen, M., Jun, H., Kaiser, L., … & Sutskever, I. (2021). Training verifiers to solve math word problems. arXiv preprint arXiv:2110.14168.
    3. Hendrycks, D., Burns, C., Basart, S., Zou, A., Mazeika, M., Song, D., & Steinhardt, J. (2021). Measuring mathematical problem solving with the MATH dataset. arXiv preprint arXiv:2103.03874.
    4. Lyu, Y., Zhong, H., Tan, C., Zhang, W., & Ling, Z. Y. (2023). UniGeo: Unifying Geometry Symbolic Solving with Step-by-Step Instruction Following. arXiv preprint arXiv:2311.17267.
    5. Wang, R., Mao, Y., Shin, R., Shankar, V., Poesia, G., Santoro, A., … & Freeman, W. T. (2023). Large language models are human-level prompt engineers. arXiv preprint arXiv:2211.01910.
  • RLCard: 强化学习在卡牌游戏中的应用

    强化学习作为人工智能的一个重要分支,在近年来取得了突飞猛进的发展。RLCard是一个专门针对卡牌游戏的强化学习工具包,为研究人员和开发者提供了一个便捷的平台来开发和测试各种强化学习算法。本文将详细介绍RLCard工具包的开发相关内容,包括如何添加预训练/规则模型、开发新的算法、添加新的游戏环境以及自定义环境等方面。

    添加预训练/规则模型

    在RLCard中添加自己的预训练或规则模型是一个重要的功能,可以让研究人员快速比较不同模型的性能。添加新模型的步骤如下:

    1. 开发模型
      首先需要为每个游戏中的所有玩家开发代理(Agent)。可以设计基于规则的模型,也可以保存神经网络模型。关键是要将每个代理封装为Agent类,并确保step、eval_step和use_raw方法能够正确工作。
    2. 封装模型
      需要继承rlcard/models/model.py中的Model类。然后将所有代理放入一个列表中,重写agent属性以返回这个列表。
    3. 注册模型
      在rlcard/models/init.py中注册新添加的模型。
    4. 在环境中加载模型
      以下是在环境中加载Leduc Hold’em NFSP模型的示例代码:
    from rlcard import models
    leduc_nfsp_model = models.load('leduc-holdem-nfsp')

    然后可以使用leduc_nfsp_model.agents来获取游戏的所有代理。

    通过这些步骤,研究人员可以方便地将自己的模型集成到RLCard中,与其他算法进行比较和评估。

    开发新算法

    RLCard为开发新的强化学习算法提供了灵活的框架。虽然用户可以自由设计和尝试自己的算法,但建议将新算法封装为Agent类,以便与工具包兼容。一个标准的Agent类应该包含以下函数和属性:

    • step: 给定当前状态,预测下一个动作。
    • eval_step: 与step类似,但用于评估目的。在训练过程中,强化学习算法通常会添加一些噪声以实现更好的探索。而在评估时,不会添加噪声,以获得纯粹的预测结果。
    • use_raw: 布尔属性。如果代理使用原始状态进行推理,则为True;如果代理使用数值来玩游戏(如神经网络),则为False。

    通过实现这些标准接口,新开发的算法可以无缝集成到RLCard的评估和比较框架中。

    添加新的游戏环境

    RLCard的一大优势是其可扩展性,允许研究人员添加新的卡牌游戏环境。添加新环境的一般步骤如下:

    1. 实现游戏逻辑
      卡牌游戏通常有相似的结构,可以使用Game、Round、Dealer、Judger、Player等类来实现,这些类在现有游戏中已经存在。最简单的方法是继承rlcard/core.py中的类,并实现相应的函数。
    2. 用环境封装游戏
      最简单的方法是继承rlcard/envs/env.py中的Env类。需要实现以下关键函数:
    • _extract_state: 编码游戏状态
    • _decode_action: 将动作从ID解码为文本字符串
    • get_payoffs: 计算玩家的收益
    1. 注册游戏
      最后需要告诉工具包在哪里找到新的环境。在rlcard/envs/init.py中,指明游戏的名称和入口点。

    要测试新环境是否设置成功,可以使用以下代码:

    import rlcard
    rlcard.make(#新环境的名称#)

    通过这些步骤,研究人员可以将自己设计的卡牌游戏添加到RLCard中,利用工具包提供的各种算法和评估工具进行研究。

    自定义环境

    除了使用默认的状态表示和动作编码,RLCard还允许用户自定义环境。以下以Limit Texas Hold’em为例,说明如何修改状态表示、动作编码、奖励计算,甚至游戏规则。

    状态表示

    要定义自己的状态表示,可以修改/rlcard/envs/limitholdem.py中的extract_state函数。这个函数负责将游戏的当前状态转换为强化学习算法可以理解的格式。例如,可以选择包含不同的信息,或者改变信息的编码方式。

    动作编码

    要定义自己的动作编码,可以修改/rlcard/envs/limitholdem.py中的decode_action函数。这个函数负责将动作ID转换为游戏中的实际动作。通过自定义这个函数,可以改变动作空间的结构或大小。

    奖励计算

    要定义自己的奖励计算方式,可以修改/rlcard/envs/limitholdem.py中的get_payoffs函数。这个函数决定了在游戏结束时每个玩家获得的奖励。通过修改奖励计算,可以影响强化学习算法的学习目标和行为。

    修改游戏规则

    我们还可以通过改变游戏的参数来调整其难度。例如,在rlcard/games/limitholdem/game.py的init函数中,可以修改以下参数:

    • 玩家数量
    • Limit Texas Hold’em中允许的加注次数

    通过这些修改,研究人员可以创建不同难度或变体的游戏环境,以满足特定的研究需求。

    结论

    RLCard为卡牌游戏中的强化学习研究提供了一个强大而灵活的平台。通过添加新的模型、算法和环境,以及自定义现有环境,研究人员可以进行广泛的实验和比较。这种可扩展性使RLCard成为探索强化学习在复杂决策问题中应用的理想工具。

    随着强化学习技术的不断发展,我们可以期待看到更多创新算法在卡牌游戏中的应用。RLCard为这些研究提供了一个统一的框架,促进了知识的共享和进步。未来,我们可能会看到这些技术不仅应用于游戏,还能扩展到更广泛的决策问题中,如金融交易、资源调度等实际应用场景。

    参考文献

    1. RLCard Documentation. (n.d.). Development — RLcard 0.0.1 documentation. https://rlcard.org/development.html
  • 深入了解强化学习在纸牌游戏中的应用:RLCard工具包

    引言

    强化学习(Reinforcement Learning, RL)作为机器学习的重要分支,近年来在各类复杂任务中取得了显著成果。特别是在纸牌游戏中,RL算法展示了其强大的决策能力与策略优化能力。本文将详细介绍RLCard工具包中的几种主要算法,包括深度Q学习(Deep-Q Learning, DQN)、神经虚拟自我对弈(Neural Fictitious Self-Play, NFSP)、反事实遗憾最小化(Counterfactual Regret Minimization, CFR)以及深度反事实遗憾最小化(Deep Counterfactual Regret Minimization, DeepCFR)。

    深度Q学习(DQN)

    DQN简介

    深度Q学习(DQN)是一种基础的强化学习算法,最早由DeepMind团队提出。DQN通过引入神经网络来逼近Q值函数,从而在复杂的决策环境中能够更高效地学习策略。

    DQN在RLCard中的实现

    在RLCard工具包中,DQN包含以下几个重要类:

    • DQNAgent:负责与环境互动的智能体类。
    • Normalizer:用于保持状态的运行均值和标准差的类。在将状态输入模型之前,Normalizer会先对状态进行预处理。
    • Memory:管理存储和采样转换的记忆缓冲区。
    • Estimator:用于进行预测的神经网络。

    DQN工作流程

    1. 状态预处理:通过Normalizer对环境中的状态进行标准化处理。
    2. 决策生成:DQNAgent根据标准化后的状态利用神经网络估计Q值,并选择最优动作。
    3. 经验存储:将转移样本存储在Memory中,以便后续训练使用。
    4. 模型更新:通过采样Memory中的转移样本,利用神经网络进行Q值函数的逼近和更新。

    神经虚拟自我对弈(NFSP)

    NFSP简介

    神经虚拟自我对弈(NFSP)是一种端到端的方法,旨在通过深度强化学习解决纸牌游戏中的策略优化问题。NFSP包含一个内部的RL智能体和一个基于RL智能体生成的数据进行训练的监督学习智能体。

    NFSP在RLCard中的实现

    在RLCard工具包中,NFSP利用DQN作为其RL智能体,结合监督学习智能体共同进行策略的优化与学习。

    NFSP工作流程

    1. RL智能体训练:利用DQN方法训练RL智能体,生成游戏数据。
    2. 数据存储:将RL智能体生成的数据存储起来。
    3. 监督学习智能体训练:利用存储的数据对监督学习智能体进行训练,以进一步优化策略。

    反事实遗憾最小化(CFR)

    CFR简介

    反事实遗憾最小化(CFR)是一种遗憾最小化方法,主要用于解决不完美信息游戏中的策略优化问题。CFR通过重复更新策略,逐步最小化每一步决策的遗憾值,从而逼近最优策略。

    CFR在RLCard中的实现

    在RLCard工具包中,CFR作为一种经典的遗憾最小化算法被实现,用于纸牌游戏中的策略优化。

    CFR工作流程

    1. 初始化策略:为每个决策点初始化一个随机策略。
    2. 策略更新:在每一轮迭代中,计算每个决策点的反事实遗憾值,并根据遗憾值更新策略。
    3. 策略逼近:通过多轮迭代,不断逼近最优策略。

    深度反事实遗憾最小化(DeepCFR)

    DeepCFR简介

    深度反事实遗憾最小化(DeepCFR)是一种先进的框架,旨在解决不完美信息游戏中的策略优化问题。DeepCFR将深度学习与反事实遗憾最小化相结合,利用神经网络进行遗憾值的逼近与策略优化。

    DeepCFR在RLCard中的实现

    在RLCard工具包中,DeepCFR作为一个示例展示了如何将先进的框架连接到环境中。DeepCFR包含以下几个重要类:

    • DeepCFR:负责与环境互动的DeepCFR类。
    • Fixed Size Ring Buffer:管理存储和采样转换的记忆缓冲区。

    DeepCFR工作流程

    1. 初始化策略:为每个决策点初始化一个随机策略。
    2. 神经网络训练:利用神经网络对策略进行逼近与优化。
    3. 策略更新:在每一轮迭代中,利用神经网络计算遗憾值,并根据遗憾值更新策略。
    4. 策略逼近:通过多轮迭代,不断逼近最优策略。

    结论

    RLCard工具包提供了多种先进的强化学习算法,帮助研究人员与开发者在纸牌游戏中进行策略优化与决策研究。本文详细介绍了DQN、NFSP、CFR和DeepCFR四种算法的基本原理与实现方法,希望能够为读者提供有价值的参考。

    参考文献

    1. Deep-Q Learning (DQN) [paper]
    2. Neural Fictitious Self-Play (NFSP) [paper]
    3. Counterfactual Regret Minimization (CFR) [paper]
    4. Deep Counterfactual Regret Minimization (DeepCFR) [paper]
  • RLCard: 强化学习扑克游戏工具包

    RLCard是一个用于卡牌游戏强化学习的开源工具包,为研究人员和开发者提供了一个统一的环境和接口来开发、评估和比较卡牌游戏AI算法。本文将对RLCard的主要功能和使用方法进行详细介绍。

    1. RLCard概述

    RLCard支持多种流行的卡牌游戏,包括:

    • 黑杰克(Blackjack)
    • Leduc Hold’em
    • 德州扑克(Limit Hold’em和No-limit Hold’em)
    • 斗地主(Doudizhu)
    • 麻将(Mahjong)
    • UNO
    • 吉恩拉米(Gin Rummy)
    • 桥牌(Bridge)

    RLCard提供了统一的接口来访问这些游戏环境,使得开发者可以方便地在不同游戏之间切换和对比算法。同时,RLCard还内置了多种经典的强化学习算法实现,如DQN、CFR等,可以直接用于训练和评估。

    RLCard的主要特点包括:

    1. 统一的游戏环境接口
    2. 丰富的卡牌游戏支持
    3. 内置多种强化学习算法
    4. 灵活的评估工具
    5. 易于使用和扩展

    接下来我们将通过几个具体的例子来详细介绍RLCard的使用方法。

    2. 使用随机智能体

    RLCard提供了一个随机智能体,可以在各个游戏环境中随机行动。下面是一个使用随机智能体的示例代码:

    import rlcard
    from rlcard.agents import RandomAgent
    from rlcard.utils import set_seed
    
    # 创建游戏环境
    env = rlcard.make('leduc-holdem', config={'seed': 42})
    
    # 设置随机种子
    set_seed(42)
    
    # 创建随机智能体
    agent = RandomAgent(num_actions=env.num_actions)
    
    # 设置智能体
    env.set_agents([agent for _ in range(env.num_players)])
    
    # 生成一局游戏数据
    trajectories, payoffs = env.run(is_training=False)
    
    # 打印轨迹和观察数据
    print('Trajectories:', trajectories)
    print('Sample raw observation:', trajectories[0][0]['raw_obs'])
    print('Sample raw legal actions:', trajectories[0][0]['raw_legal_actions'])

    这段代码创建了一个Leduc Hold’em游戏环境,并使用随机智能体进行了一局游戏。通过打印轨迹和观察数据,我们可以了解游戏的进行过程和状态表示。

    3. 使用深度Q网络(DQN)训练智能体

    RLCard提供了DQN等经典强化学习算法的实现。下面是一个使用DQN在21点游戏上训练智能体的示例:

    import rlcard
    from rlcard.agents import DQNAgent
    from rlcard.utils import (
        get_device,
        set_seed,
        tournament,
        Logger,
        plot_curve,
    )
    
    # 设置参数
    num_episodes = 5000
    num_eval_games = 2000
    evaluate_every = 100
    
    # 创建环境
    env = rlcard.make('blackjack')
    eval_env = rlcard.make('blackjack')
    
    # 创建DQN智能体
    agent = DQNAgent(
        num_actions=env.num_actions,
        state_shape=env.state_shape[0],
        mlp_layers=[64, 64],
        device=get_device(),
    )
    
    # 设置智能体
    env.set_agents([agent])
    eval_env.set_agents([agent, RandomAgent(num_actions=env.num_actions)])
    
    # 开始训练
    with Logger('experiments/blackjack_dqn_result/') as logger:
        for episode in range(num_episodes):
            # 生成训练数据
            trajectories, _ = env.run(is_training=True)
    
            # 训练智能体
            for ts in trajectories[0]:
                agent.feed(ts)
    
            # 定期评估
            if episode % evaluate_every == 0:
                logger.log_performance(
                    episode,
                    tournament(eval_env, num_eval_games)[0]
                )
    
    # 绘制学习曲线
    plot_curve(logger.csv_path, logger.fig_path, 'dqn')

    这段代码在21点游戏上训练了一个DQN智能体。它定期评估智能体的性能,并记录了训练过程中的奖励变化。最后,它还绘制了学习曲线以可视化训练过程。

    4. 使用CFR算法求解Leduc Hold’em

    对于一些较小规模的游戏,我们可以使用反事实后悔最小化(CFR)等算法来求解纳什均衡。下面是一个在Leduc Hold’em上使用CFR(机会采样)的示例:

    import rlcard
    from rlcard.agents import CFRAgent, RandomAgent
    from rlcard.utils import (
        set_seed,
        tournament,
        Logger,
        plot_curve,
    )
    
    # 设置参数
    num_episodes = 5000
    num_eval_games = 2000
    evaluate_every = 100
    
    # 创建环境
    env = rlcard.make('leduc-holdem', config={'allow_step_back': True})
    eval_env = rlcard.make('leduc-holdem')
    
    # 创建CFR智能体
    agent = CFRAgent(env)
    
    # 设置智能体
    eval_env.set_agents([
        agent,
        RandomAgent(num_actions=env.num_actions),
    ])
    
    # 开始训练
    with Logger('experiments/leduc_holdem_cfr_result/') as logger:
        for episode in range(num_episodes):
            agent.train()
            print(f'\rIteration {episode}', end='')
    
            # 定期评估
            if episode % evaluate_every == 0:
                agent.save() # 保存模型
                logger.log_performance(
                    episode,
                    tournament(eval_env, num_eval_games)[0]
                )
    
    # 绘制学习曲线
    plot_curve(logger.csv_path, logger.fig_path, 'cfr')

    这段代码使用CFR算法在Leduc Hold’em上训练了一个智能体。它同样定期评估智能体的性能,并记录了训练过程。

    5. 与预训练模型对战

    RLCard还提供了一些预训练模型,允许人类玩家与之对战。以下是一个与Leduc Hold’em预训练CFR模型对战的示例:

    import rlcard
    from rlcard import models
    from rlcard.agents import LeducholdemHumanAgent as HumanAgent
    from rlcard.utils import print_card
    
    # 创建环境
    env = rlcard.make('leduc-holdem')
    
    # 创建智能体
    human_agent = HumanAgent(env.num_actions)
    cfr_agent = models.load('leduc-holdem-cfr').agents[0]
    
    # 设置智能体
    env.set_agents([human_agent, cfr_agent])
    
    while True:
        print(">> 开始新一局游戏")
    
        # 运行一局游戏
        trajectories, payoffs = env.run(is_training=False)
    
        # 打印结果
        if payoffs[0] > 0:
            print(f'你赢了 {payoffs[0]} 筹码!')
        elif payoffs[0] == 0:
            print('平局。')
        else:
            print(f'你输了 {-payoffs[0]} 筹码!')
    
        # 展示CFR智能体的手牌
        print('=============== CFR智能体的手牌 ===============')
        print_card(env.get_perfect_information()['hand_cards'][1])
    
        input("按任意键继续...")

    这段代码允许人类玩家与预训练的CFR模型进行Leduc Hold’em的对战。它展示了每局游戏的结果,并在游戏结束后显示CFR智能体的手牌。

    6. 使用深度蒙特卡洛(DMC)算法训练斗地主智能体

    对于大规模游戏如斗地主,我们可以使用深度蒙特卡洛(DMC)等算法进行训练。以下是一个使用DMC训练斗地主智能体的示例:

    import rlcard
    from rlcard.agents.dmc_agent import DMCTrainer
    
    # 创建环境
    env = rlcard.make('doudizhu')
    
    # 初始化DMC训练器
    trainer = DMCTrainer(
        env,
        cuda='',
        num_actors=5,
        training_device='0',
        savedir='experiments/doudizhu_dmc_result',
        save_interval=30,
        xpid='doudizhu',
    )
    
    # 开始训练
    trainer.start()

    这段代码使用DMC算法训练了一个斗地主智能体。DMC算法使用多个actor并行生成游戏数据,然后在GPU上进行集中训练。

    7. 评估智能体

    RLCard提供了方便的工具来评估和比较不同的智能体。以下是一个比较DQN智能体和随机智能体的示例:

    import rlcard
    from rlcard.agents import DQNAgent, RandomAgent
    from rlcard.utils import get_device, tournament
    
    # 创建环境
    env = rlcard.make('leduc-holdem')
    
    # 创建智能体
    dqn_agent = DQNAgent(
        num_actions=env.num_actions,
        state_shape=env.state_shape[0],
        mlp_layers=[64, 64],
        device=get_device(),
    )
    random_agent = RandomAgent(num_actions=env.num_actions)
    
    # 加载预训练模型
    dqn_agent.load('models/leduc_holdem_dqn.pth')
    
    # 进行锦标赛评估
    num_games = 10000
    agents = [dqn_agent, random_agent]
    payoffs = tournament(env, num_games, agents)
    
    # 打印结果
    for i, payoff in enumerate(payoffs):
        print(f'Agent {i} average payoff: {payoff}')

    这段代码比较了预训练的DQN智能体和随机智能体在Leduc Hold’em上的表现。它使用锦标赛方式进行了大量对局,并计算了每个智能体的平均收益。

    8. 总结

    RLCard为卡牌游戏强化学习提供了一个强大而灵活的平台。它支持多种流行的卡牌游戏,提供了统一的接口和丰富的工具,使得研究人员和开发者可以方便地开发、训练和评估卡牌游戏AI。

    本文通过多个具体示例介绍了RLCard的主要功能,包括:

    1. 使用随机智能体
    2. 使用DQN算法训练智能体
    3. 使用CFR算法求解小规模游戏
    4. 与预训练模型对战
    5. 使用DMC算法训练大规模游戏智能体
    6. 评估和比较不同智能体

    这些例子涵盖了RLCard的核心功能,展示了它在卡牌游戏AI研究和开发中的强大能力。研究人员和开发者可以基于这些示例,进一步探索和开发更先进的卡牌游戏AI算法。

    参考文献

    1. Zha, D., Lai, K. H., Cao, Y., Huang, S., Wei, R., Guo, J., & Hu, X. (2019). RLCard: A Toolkit for Reinforcement Learning in Card Games. arXiv preprint arXiv:1910.04376.
    2. Heinrich, J., & Silver, D. (2016). Deep reinforcement learning from self-play in imperfect-information games. arXiv preprint arXiv:1603.01121.
    3. Brown, N., & Sandholm, T. (2019). Superhuman AI for multiplayer poker. Science, 365(6456), 885-890.
    4. Moravčík, M., Schmid, M., Burch, N., Lisý, V., Morrill, D., Bard, N., … & Bowling, M. (2017). DeepStack: Expert-level artificial intelligence in heads-up no-limit poker. Science, 356(6337), 508-513.
    5. Silver, D., Huang, A., Maddison, C. J., Guez, A., Sifre, L., Van Den Driessche, G., … & Hassabis, D. (2016). Mastering the game of Go with deep neural networks and tree search. nature, 529(7587), 484-489.
  • 使用Ollama和Continue打造开源AI代码助手

    在当今飞速发展的人工智能时代,开发者们渴望拥有一个强大而又易用的AI代码助手。本文将为您详细介绍如何利用Ollama和Continue这两个开源工具,在您自己的编辑器中打造一个完全开源的AI代码助手。让我们一步步深入探索这个激动人心的话题。

    Ollama和Continue简介

    Ollama: 本地运行大型语言模型的利器

    Ollama是一个强大的工具,允许用户在本地设备上运行各种大型语言模型(LLMs)。它支持多种模型,包括Llama、GPT-J等,使得在个人电脑上使用先进的AI模型成为可能。

    Continue: 编辑器中的AI助手

    Continue是一个创新的IDE插件,可以轻松地在Visual Studio Code和JetBrains等主流编辑器中集成AI辅助功能。它支持代码自动完成、智能对话等特性,大大提升了开发效率。

    安装和配置

    要开始使用这个强大的AI代码助手,我们需要完成以下安装步骤:

    1. 安装Continue插件:
    • 对于VS Code用户,在扩展市场搜索并安装”Continue”
    • 对于JetBrains用户,在插件库中查找并安装相应的Continue插件
    1. 安装Ollama:
    • macOS用户可以使用Homebrew安装: brew install ollama
    • Linux用户可以通过官方提供的安装脚本安装
    • Windows用户可以下载官方提供的安装包

    安装完成后,我们就可以开始探索这个强大的AI代码助手了。

    探索Ollama和Continue的强大功能

    1. 尝试Mistral AI的Codestral 22B模型

    Codestral 22B是目前最强大的开源代码模型之一,同时支持自动完成和对话功能。虽然它需要较高的硬件要求,但其表现令人印象深刻。

    使用步骤:

    a. 在终端运行以下命令下载并运行Codestral:

    ollama run codestral

    b. 在Continue的配置文件(config.json)中添加以下内容:

    {
      "models": [
        {
          "title": "Codestral",
          "provider": "ollama",
          "model": "codestral"
        }
      ],
      "tabAutocompleteModel": {
        "title": "Codestral",
        "provider": "ollama",
        "model": "codestral"
      }
    }

    这样配置后,您就可以在编辑器中体验Codestral强大的代码补全和对话能力了。

    2. 组合使用DeepSeek Coder和Llama 3

    如果您的设备性能允许,可以尝试同时运行多个模型,充分发挥Ollama的并发处理能力。这里我们推荐使用DeepSeek Coder 6.7B进行代码自动完成,而用Llama 3 8B处理对话任务。

    操作步骤:

    a. 在一个终端窗口运行DeepSeek Coder:

    ollama run deepseek-coder:6.7b-base

    b. 在另一个终端窗口运行Llama 3:

    ollama run llama3:8b

    c. 更新Continue的config.json:

    {
      "models": [
        {
          "title": "Llama 3 8B",
          "provider": "ollama",
          "model": "llama3:8b"
        }
      ],
      "tabAutocompleteModel": {
        "title": "DeepSeek Coder 6.7B",
        "provider": "ollama",
        "model": "deepseek-coder:6.7b-base"
      }
    }

    这种配置可以让您同时享受高质量的代码补全和智能对话体验。

    3. 使用nomic-embed-text嵌入模型增强@codebase功能

    Continue内置了@codebase上下文提供器,可以自动检索并提供最相关的代码片段。结合Ollama和LanceDB,我们可以实现完全本地化的代码库搜索和上下文理解。

    设置步骤:

    a. 下载nomic-embed-text模型:

    ollama pull nomic-embed-text

    b. 在Continue的config.json中添加:

    {
      "embeddingsProvider": {
        "provider": "ollama",
        "model": "nomic-embed-text"
      }
    }

    配置完成后,您就可以使用@codebase命令来查询代码库,AI助手会自动找到相关代码段并用于回答。

    4. 基于开发数据微调StarCoder 2

    Continue会自动收集您的开发数据,存储在本地的.continue/dev_data目录中。利用这些数据,我们可以微调像StarCoder 2这样的模型,使其更好地适应您的编码风格和需求。

    微调步骤概述:

    1. 提取并加载”已接受的tab建议”到Hugging Face Datasets
    2. 使用Hugging Face的监督微调训练器对StarCoder 2进行微调
    3. 将微调后的模型推送到Ollama模型库,供团队使用

    这个过程可以显著提高代码建议的准确性和接受率。

    5. 利用@docs功能学习Ollama

    Continue的@docs功能允许您索引和检索任何文档站点的内容。我们可以用它来学习更多关于Ollama的知识。

    使用方法:

    1. 在Continue的聊天侧边栏中输入@docs
    2. 选择”Add Docs”
    3. 在URL字段中输入”https://github.com/ollama/ollama”
    4. 在标题字段中输入”Ollama”

    完成索引后,您就可以向AI助手询问关于Ollama的问题,它会自动从README中找到相关信息来回答。

    结语

    通过结合Ollama和Continue,我们可以在自己的编辑器中构建一个强大、灵活且完全开源的AI代码助手。从代码补全到智能对话,从本地运行到自定义微调,这个方案为开发者提供了前所未有的AI辅助编程体验。

    随着开源AI技术的不断进步,我们相信这样的本地AI代码助手将成为每个开发者工具箱中不可或缺的一部分。无论您是个人开发者还是大型团队的一员,Ollama和Continue的组合都能为您的编程工作带来显著的效率提升和创新可能。

    最后,如果您在使用过程中遇到任何问题或有任何疑问,欢迎加入Continue和Ollama的Discord社区。那里有众多热心的开发者和专家,随时准备提供帮助和分享经验。

    让我们一起拥抱AI辅助编程的未来,开启编码新纪元!

    参考文献

    1. Ollama官方博客. (2024). An entirely open-source AI code assistant inside your editor. https://ollama.com/blog/continue-code-assistant
  • 联合示例选择:加速多模态学习的新方法

    引言

    在人工智能和机器学习领域,数据质量一直是影响模型性能的关键因素。无论是在语言、视觉还是多模态建模中,精心策划的数据集都能显著提高模型性能,同时减少所需的数据量。然而,传统的数据策划方法主要依赖人工,成本高昂且难以扩展。

    近年来,基于模型的数据策展方法开始受到关注。这些方法利用正在训练的模型的特征来选择高质量数据,有望改善大规模预训练的效率。然而,现有方法大多关注单个数据点的质量,忽视了批次组成对学习效果的影响。

    本文介绍了一种新颖的方法 – 联合示例选择的多模态对比学习(JEST),它通过选择整个批次而非单独的数据点来加速多模态学习。JEST利用多模态对比目标暴露出的数据间依赖关系,提出了一种衡量批次整体可学习性的标准,并开发了一种高效算法来选择最佳批次。实验表明,JEST显著加快了训练速度,比现有最先进模型减少了13倍的迭代次数和10倍的计算量。

    JEST方法概述

    基于模型的批次选择标准

    JEST的核心是一种基于模型的批次选择标准。与传统方法不同,JEST不是对单个样本进行评分,而是对整个子批次进行评分,然后根据这些批次级别的分数进行采样。具体而言,JEST考虑了以下几种评分函数:

    1. 困难学习者:优先选择当前模型下损失较高的批次。这种方法可以丢弃琐碎数据,但对于大型、噪声数据集可能弊大于利。
    2. 简单参考:使用预训练参考模型,优先选择损失较低的批次。这种方法已被成功用于识别高质量样本,但可能过度依赖参考模型的选择。
    3. 可学习性:结合上述两种方法,优先选择当前模型损失高但参考模型损失低的批次。这种方法既考虑了数据的难度,又考虑了其质量,被证明能有效加速大规模学习。

    JEST主要采用可学习性评分,但也提供了简单参考评分作为对照。

    联合示例选择算法

    对于多模态学习,JEST采用了一种受块吉布斯采样启发的顺序方法来选择批次。算法的主要步骤如下:

    1. 从超级批次中随机选择一个初始子集。
    2. 计算剩余候选样本的条件可学习性。
    3. 根据条件可学习性概率,独立且不重复地采样一个新的样本块。
    4. 将新块添加到当前子集中。
    5. 重复步骤2-4,直到达到所需的批次大小。

    这种方法能够快速生成具有高可学习性的批次,效果与暴力吉布斯采样相当,但计算效率更高。

    高效评分和多分辨率训练

    为了进一步提高计算效率,JEST采用了以下策略:

    1. 基于在线模型近似的高效评分:使用FlexiViT架构降低图像分辨率进行评分,显著减少了计算成本。
    2. 多分辨率训练:将批次随机分为两半,分别用低分辨率和高分辨率进行编码。这不仅允许高效评分,还能直接提高训练效率。

    通过这些优化,JEST在保持高效率的同时,显著减少了评分的计算开销。

    实验结果与分析

    联合示例选择的有效性

    实验结果表明,JEST能够有效地选择高可学习性的批次:

    1. 可视化分析显示,批次的可学习性矩阵具有强烈的非对角线结构,证明了联合选择的必要性。
    2. JEST仅需少量迭代就能生成具有高可学习性的子批次,效果与需要数千次迭代的暴力吉布斯采样相当。
    3. 随着过滤比率的增加(即从更大的超级批次中选择),子批次的可学习性显著提高。

    JEST加速多模态学习的效果

    在多个下游任务(包括ImageNet分类和COCO图像-文本检索)上的实验表明:

    1. JEST显著加速了学习过程。在50%、80%和90%的过滤比例下,JEST分别仅需2B、1B和0.67B个训练样本就达到了3B-统一基线的最终性能。
    2. 在90%的过滤比例下,JEST还提供了高达6%的最终性能提升。
    3. 与独立优先级选择方法相比,JEST展现出更好的缩放行为,尤其是在高过滤比率下。
    4. JEST不仅适用于可学习性评分,也能提高简单参考优先级的效果,尽管可学习性评分在更激进的过滤条件下表现更佳。

    JEST的优势与创新

    1. 批次级别的选择:JEST考虑了整个批次的组成,而不仅仅是单个数据点的质量,从而捕捉到了数据之间的相互作用和依赖关系。
    2. 高效算法:通过巧妙的设计,JEST能够快速生成高质量批次,计算效率远高于暴力方法。
    3. 灵活的评分标准:JEST可以适应不同的评分函数,包括可学习性和简单参考,为不同场景提供了灵活性。
    4. 计算优化:通过在线模型近似和多分辨率训练,JEST大幅降低了计算开销,使得大规模应用成为可能。
    5. 显著的性能提升:JEST不仅加速了训练过程,还在多个任务上提高了最终性能,展现出强大的泛化能力。

    结论与展望

    联合示例选择的多模态对比学习(JEST)为加速多模态学习提供了一种新颖而有效的方法。通过考虑批次级别的可学习性,JEST能够更好地捕捉数据之间的相互作用,从而显著提高学习效率和模型性能。实验结果表明,JEST不仅能大幅减少训练时间和计算资源,还能在多个下游任务上取得更好的性能。

    未来的研究方向可能包括:

    1. 探索JEST在更多模态和任务上的应用,如视频-文本学习、跨语言学习等。
    2. 进一步优化JEST的算法和实现,以适应更大规模的数据集和模型。
    3. 研究JEST与其他数据管理和模型优化技术的结合,如梯度缓存、混合精度训练等。
    4. 探索JEST在持续学习和在线学习场景中的潜力,以适应动态变化的数据分布。
    5. 深入分析JEST选择的批次特征,以获得对多模态学习本质的更深入理解。

    总之,JEST为多模态学习领域开辟了一个新的研究方向,有望推动更高效、更强大的AI系统的发展。

    参考文献

    1. Evans, T., Parthasarathy, N., Merzic, H., & Hénaff, O. J. (2023). Accelerating Multimodal Learning with Joint Sample Selection. arXiv preprint arXiv:2406.17711v1.