置顶-因你而在的故事
因你而在的故事 2023.6 当我透过学线办公室窗外望去,高楼与山丘,夕阳落日,无限风光,又与何人说。 心灵鸡汤 举头望明月,万般感怀皆在其中, 此情此景,犹如天星照我,愿逐月华。 I go through that so much. I doubt myself every single day. No matter what happens, I continue to doubt myself. And I think I always will and I think it’s always something I’m gonna struggle with. But this song helped me, and helps me moment to moment. I don’t think we can ever hope to fully get over the things that makes us insure, or the voices in our head that say “You can’t do it. You are not good e ...
读paper23-arxiv代码修复论文组2
读paper23-arxiv代码修复论文组2 APRMCTS: Improving LLM-based Automated Program Repair with Iterative Tree Search https://arxiv.org/abs/2507.01827 MCTS 什么是 MCTS? 蒙特卡洛树搜索是一类树搜索算法的统称,简称 MCTS( Monte Carlo Tree Search)。它是一种用于某些决策过程的启发式搜索算法,且在搜索空间巨大的游戏中会比较有效。那什么叫做搜索空间巨大呢?比如说,在上世纪90年代,IBM公司推出深蓝这个 AI,击败了当时国际象棋的世界冠军,而这个 AI 也比较简单粗暴,把整个国际象棋的搜索空间全部穷举出来,把整个游戏树全部列举出来,那么不管对手下什么,它都知道下一步怎么下可以把他下赢。而对于围棋这种游戏,围棋棋盘是 19*19 的,也就是说有 361 个落子的位置,那么如果我们想把所有围棋的棋局的可能列举出来,一般来说就是 361!,这个数量是比宇宙的原子数量还要多的,就算是世界上最强的超级计算机也无法把所有的可能性穷举出来,那么我 ...
CoderLLM训练记录
CoderLLM训练记录 torchrun的时候执行rsync命令会导致NCCL通信超时,rsync 大文件传输会吃满节点间网络带宽,导致 NCCL 通信包排队等待。但是先rsync再torchrun就没事,有趣。 预训练-Dense 首先基于已有的chat-LLM的代码进行了训练,使用了 miniMind 的Dense模型代码,架构上来讲也是比较经典易懂的Decoder-Only结构,使用CLM任务训练,原模型在成熟的对话数据集下训练效果也不错。具体架构如下: 一个低级但又不太低级的错误 数据集选用的是hf上的 ZhentingNLP/code_pretraining_data 这个数据集,一共16G数据,但后来数据集就被作者删了。 训练任务的选择上,上来就犯了个低级错误。某天跟Qwen聊天,Qwen让我试一试加入MLM,我感觉不太对劲,转头问了问Deepseek,Deepseek也认可,于是我也没多想,只是觉得有道理,就在原有的CLM基础上,使用了15%的MLM,剩余的85%仍然是CLM,但训练结果并不理想,但是看loss似乎并没有什么问题,于是只用CLM进行训练,发现效果竟然比 ...
针对d4j的一些思考
针对d4j的一些思考 缺陷定位 最开始的想法是直接使用failing_tests中的异常栈来提取项目代码相关的异常栈,一般来说单元测试代码中会直接复现某个函数报错,在异常栈中就可以直接定位到报错函数,比如Lang 1b的这段报错: 123456789101112--- org.apache.commons.lang3.math.NumberUtilsTest::TestLang747java.lang.NumberFormatException: For input string: "80000000" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.base/java.lang.Integer.parseInt(Integer.java:652) at java.base/java.lang.Integer.valueOf(Integer.java:957) at java.base/java.lang.Intege ...
读paper22-arxiv代码修复论文组
读paper22-arxiv代码修复论文组 CoSIL: Software Issue Localization via LLM-Driven Code Repository Graph Searching https://arxiv.org/abs/2503.22424 https://github.com/ZhonghaoJiang/CoSIL 相当于一个分级搜索,首先针对issue描述,基于Module Call Graph搜索搜索相关代码文件,然后针对相关代码文件,构建Function Call Graph,搜索相关函数。 相对于抽象语法树,函数调用图确实可以更精确的反应函数间的上下文关系,在缺陷定位与上下文收集上会更加精确。而且这种逐级展开的方式,也可以一定程度上避免LLM的上下文窗口限制问题(尤其是研究中两个Call Graph都是LLM构建的)。 感觉也可以加一个回溯机制,如果无法在函数调用图中找到目标,回溯到模块调用图的剩余子图中继续搜索。 对于d4j类的数据集,则可以更简单一些,直接正则提取测试用例中的函数,在函数调用图中搜索,尤其是对于被测函数不会直接触发报错而 ...
读paper21-通过自适应树遍历进行动态动作重采样以提高编码智能体性能
读paper21-通过自适应树遍历进行动态动作重采样以提高编码智能体性能 非常抽象,论文讲述的策略与总的逻辑框架没什么关系,主要还是介绍了Generate涉及到的策略,即通过智能体每一步决策可采用的不同Action,进行修复路径拓展,最终选择最佳路径实现修复。 核心是根据先前的执行结果对行动进行动态重新采样,从而为编码智能体提供参考,即通过采取替代行动,同时尽量减少冗余,增强智能体从次优决策中恢复和学习的能力。然而,误差也会随着轨迹的扩大而扩大,因此,我们首先要优化主干 SWE-Agent,提高其编辑能力并添加各种行动。然后,通过优化解决率的提高与在该点分支轨迹所增加的成本之间的权衡,确定最有希望的Action类型。最后引入了一个轨迹选择管道,利用专有的偏好优化模型来确定最有前途的解决方案。 DARS 不生成多个独立的轨迹,而是在关键决策点选择性地进行分支,在分支前使用深度优先策略充分探索轨迹。 Improving the Base SWE Agent 首先是对基座 SWE Agent的增强,主要是对智能体可用的工具的扩充,包括代码执行沙箱,项目级代码检索等 DARS Scali ...
Defects4J使用
Defects4J使用 安装 依赖 没写Git,一般Linux下都会有吧( Java 11 1conda install -c conda-forge openjdk=11 Subversion (svn ≥ 1.8) 1conda install -c conda-forge subversion Perl ≥ 5.0.12 大多数 Linux 系统自带 Perl ≥ 5.0.12,检查版本: 1perl -v 如果版本太低,可以手动编译或使用 perlbrew。 1234567wget https://www.cpan.org/src/5.0/perl-5.36.0.tar.gztar -xzf perl-5.36.0.tar.gzcd perl-5.36.0./Configure -des -Dprefix=$HOME/.local/perlmake && make installecho 'export PATH="$HOME/.local/perl/bin:$PATH"' >> ~/.bashrcsource ...
LLM基础知识整理
LLM基础知识整理 LLM-Base BERT BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型,通过双向上下文建模显著提升了自然语言处理任务的性能。其核心原理如下: 1. 核心架构:Transformer编码器 BERT采用多层Transformer编码器堆叠而成,基础模型包含12层,大模型包含24层。 每层编码器由多头自注意力机制和前馈神经网络组成,支持并行计算和长距离依赖捕捉。 自注意力机制允许模型动态权衡不同位置词的重要性,生成上下文相关的词表示。 2. 预训练任务 BERT通过两个无监督任务学习通用语言表示: 2.1 掩码语言模型(Masked Language Model, MLM) 方法:随机遮盖输入中15%的词(如替换为[MASK]),模型基于上下文预测被遮盖的词。 遮盖策略: 80%替换为[MASK]。 10%替换为随机词。 10%保留原词。 目的:迫使模型融合双向上下文信息,避免对遮盖标记过度依赖。 2.2 下一句预测(Next ...
读paper20-基于LLM的缺陷修复6
读paper20-基于LLM的缺陷修复6 AuPair: Golden Example Pairs for Code Repair https://arxiv.org/abs/2502.18487 介绍了一种从在修复代码中进行的修复对的生成方法,可以用于数据集构造,当然,修复对的生成过程也就是缺陷的修复过程。 训练集是代码及LLM生成的初始的推测(guess),该方法首先从训练集中抽取待修复代码及其guess,基于LLM进行修复,并对比修复后代码与已有修复(若有)的质量,若发现了更好的修复代码,则更新到候选对中。然后对候选修复对中的每一对,评估其修复质量,选择形成最终数据集。 候选修复对生成 从训练数据集 D 中抽取一个待修复代码及其初始guess。如果生成的修复代码在该问题的单元测试中得分高于初始guess,则该guess-fix配对将被添加到候选集 C 中。此外,如果该fix未通过所有单元测试,则为有进一步改进余地的潜在guess,因此它将作为新guess添加到训练数据集 D 中。 其中,得分是基于生成的代码在该代码测试用例的通过情况进行计算的 修复对提取 现在,我们已经有 ...
读paper19-基于LLM的缺陷修复5与总结
读paper19-基于LLM的缺陷修复5与总结 ThinkRepair: Self-Directed Automated Program Repair Datasets:Defects4J and QuixBugs 论文中提到了一点:Few-shot CoT that largely enhances analyzing and reasoning capabilities to understand the semantics of the buggy function 核心点在于针对APR的Automated few-shot CoT。少量的示例可以帮助 LLM 更好地应对所面临的任务,但示例的质量会严重影响其能力。因此,该研究设计了一种自动方法,从 LLMs 中提取思维链,选择有效的示例进行few-shot learning,并用 CoTs 组成prompt进行修复。 Collection Phase 这一步的核心点就在于,如果修复被验证为正确,就将CoT保存,相当于构建一个知识库。 Fixing Phase 针对Collection Phase保存的案例进行few-sho ...
读paper18-Agent_for_code
读paper18-Agent_for_code 总的来说我觉得可以优化的点主要集中在三部分: 前期数据预处理: 一方面是针对代码输入的预处理,即去除代码中的无关上下文来压缩代码,但这本质上是一个缺陷定位的过程 另一方面是考虑Few-shot的可能性及其效果 最后是针对修复思路的推理增强,不过这个直接使用Reasoning LLM似乎就能有较好效果 中期围绕LLM的处理流程: 一方面是流程的优化,针对目前的“修复-评估-反思”流程进行优化 另一方面是Memory、RAG等对流程中某一步的增强 末期围绕“修复-评估-反思”流程中的评估进行增强: 如何构建更有效的打分机制,比如递进式:完整性-可运行性-修复正确性 或者是多指标打分加权平均 MapCoder: Multi-Agent Code Generation for Competitive Problem Solving 来自ACL https://github.com/Md-Ashraful-Pramanik/MapCoder https://arxiv.org/abs/2405.11403 这篇paper跟我 ...
读paper17-基于LLM的缺陷修复4与修复提示词
读paper17-基于LLM的缺陷修复4与修复提示词 https://dl.acm.org/doi/10.1145/3650212.3680328 https://dl.acm.org/doi/10.1145/3650212.3680384 https://ieeexplore.ieee.org/document/10664337 CREF: An LLM-Based Conversational Software Repair Framework for Programming Tutors https://dl.acm.org/doi/10.1145/3650212.3680328 为避免LLM爬取导致的数据泄露,引入了TutorCode数据集,https://tutorcode.org/docs/ ,信息挺充足的。 是一种动态修复工具,方法很简单,就是反复将测试用例通过情况加上人类思考交给LLM直到修复通过。所以其中还是需要人为的干涉,所以实际上跟日常生活中问LLM没区别。 可以考虑使用一个LLM把其中的人类思考替代掉,类似于DeepSeek R1的思考过程。 AutoCodeR ...
读paper16-微调LLM的APR与正确性验证
读paper16-微调LLM的APR与正确性验证 REEF: A Framework for Collecting Real-World Vulnerabilities and Fixes(数据集构建) 该Paper针对的是CVE,所以更准却的说应该是漏洞数据集构建框架,不过可以尝试借鉴思路进行缺陷数据集构建框架的搭建 这种方法的好处是覆盖了较多的CWE规则,同时使用LLM对数据项进行了信息补全和完善。 但缺点是每条数据都会包含多个文件的修复,也就是说这种数据集更偏向项目级的修复。 工具和数据集在Github中给出:https://github.com/ASE-REEF 。C和cpp的数据量挺多的,但需要清洗。 RepairCAT: Applying Large Language Model to Fix Bugs in AI-Generated Programs 从数据集构造到模型微调的实现。使用LLM生成数据集进行模型微调。 数据集不进行缺陷定位,而是将整个有问题的程序一并处理,让模型决定修复的位置。 训练LLM和构建工具的源代码在Zenodo链接中存档:https://zeno ...
使用丢番图逼近优化大语言模型的参数
使用丢番图逼近优化大型语言模型的参数 背景: 大型语言模型(如GPT-3)在自然语言处理领域取得了显著的成就,但其参数量巨大,导致计算成 本高昂。丢番图逼近是数学中研究有理数逼近无理数的理论,可以用于优化模型参数,减少计算量。 问题:假设我们有一个大型语言模型,其参数量为数百万。我们需要使用丢番图逼近的方法来优化 这些参数,以减少模型的计算量,同时保持模型的性能。 要求: 1、参数分析:分析模型中参数的分布和作用,确定哪些参数可以通过丢番图逼近来优化。 2、逼近方法选择:选择合适的丢番图逼近方法,如连分数逼近、有理数逼近等。 3、参数优化:使用丢番图逼近方法对选定的参数进行优化,减少参数的位数或数量。 4、模型测试:在优化后的参数上测试模型的性能,确保模型的准确性和效率没有显著下降。 5、结果分析:分析优化后的模型与原模型的性能差异,评估丢番图逼近方法的效果。 附加挑战: • 多目标优化:考虑模型的多个目标,如准确率、计算量、存储空间等,使用丢番图逼近进行多目标 优化。 • 动态优化:设计一种动态优化策略,根据模型的使用情况实时调整参数的逼近程度。 • 理论研究:深入研究丢番图逼近理论 ...
读paper15-Multi-Agent
读paper15-Multi-Agent Communication Beyond Natural Language: LLMs Leveraging Alternative Formats for Enhanced Reasoning and Communication https://arxiv.org/abs/2402.18439 对于CoT,会首先引导模型生成思维集t={ti}t=\{t_i\}t={ti},然后基于此集合生成回复,但其使用的思维模式通常不会指定且使用自然语言,所以针对此进行改进。 该研究假设,结构化数据格式(如 JSON、markdown 表格、列表)或符号表示法(如逻辑表达式、数学公式)等各种格式有可能产生更精确、更有效的推理,并简化交流。 具体来说,对于单 LLM 推理,我们在原有的 CoT 提示中添加了鼓励使用非 NL 格式的指令。在多代理场景中,也会添加类似的格式决策指令。 为了提高清晰度并消除自然语言中固有的歧义,请考虑采用更有条理、更简洁的交流形式来逐步提供解决方案。合适的格式包括代码、伪代码、JSON、markdown 表格、逻辑运算符或数 ...
读paper14-Multi-Agent-2
读paper14-Multi-Agent-2 MALT: Improving Reasoning with Multi-Agent LLM Training 采用顺序多代理设置,异构 LLM 分配专门的角色:生成器、验证器和迭代解决问题的完善模型。我们提出了一种基于轨迹扩展的合成数据生成过程和一种由基于结果的联合奖励驱动的信用分配策略。 MALT 包括以下步骤: 单独生成合成数据:为每个基准单独生成合成数据。 基于联合二元奖励的信用分配启发式方法:在此过程中,每个基准的训练集由可用于比较的真实答案组成,用于在搜索过程的叶节点上生成二元奖励。基于此方法,为每个模型生成特定角色的训练数据。 模型训练:训练遵循上述配置,首先进行 SFT(监督微调),然后在 SFT 策略的基础上进行 DPO(直接偏好优化)。 在实践中,对长文本序列进行训练可能会不稳定或产生幻觉。为了解决这个问题,MALT 在推理过程中采用了一种简单的多数表决机制,由三个productions来确保自洽性。由于推理不需要树形搜索过程,而且与baseline推理遵循相同的顺序模式,因此计算效率很高. Inference Se ...
深度学习-蒸馏、剪枝、量化
深度学习-蒸馏、剪枝、量化 蒸馏 Distilling the Knowledge in a Neural Network 概述 基本原理 教师模型与学生模型: 教师模型(Teacher Model,Net-T):通常是一个大型且高精度的模型,能够通过训练获得较强的性能。教师模型可以是任何一种复杂的模型,通常是深度神经网络。 学生模型(Student Model,Net-S):是一个结构更小、计算需求更少的模型,旨在通过学习教师模型的知识来达到类似的性能,甚至在某些情况下超越教师模型。 知识迁移: 蒸馏的核心思想是通过将教师模型的输出信息(通常是软标签,soft labels)传递给学生模型。软标签不同于硬标签(即分类任务中的目标标签),它包含了更多关于类别之间关系的信息。教师模型的输出通常会比学生模型的输出更平滑、更有信息,因此能够帮助学生模型学到更为细致的特征表示。 软标签(Soft Labels)与温度(Temperature): 软标签:是教师模型经过软化处理后的预测结果。通常,教师模型的输出通过一个温度参数进行调整,使得原本很尖锐的概率分布变得更加平滑,从而为 ...
并行计算-片上多处理器
并行计算-片上多处理器 关键概念 Scoreboard 在计算机体系结构和并行计算中,Scoreboard 是一种硬件机制,主要用于管理指令的执行顺序和资源分配,以支持无序执行(Out-of-Order Execution)或解决数据相关性问题。它的中文一般翻译为 “记分牌” 或 “计分板”。 Scoreboard 的作用 Scoreboard 的核心目的是协调指令执行,确保指令在处理器流水线中正确执行,即使它们之间存在依赖关系。它通过监控指令的状态、处理单元的可用性以及数据依赖性,来决定是否可以发射(issue)、执行和写回(commit)特定的指令。 具体来说,Scoreboard 的功能包括: 处理数据相关性: 读后写依赖(RAW,Read After Write):确保后续指令读取正确的数据。 写后读依赖(WAR,Write After Read):确保前面的读操作完成后再写入。 写后写依赖(WAW,Write After Write):确保写入操作按照正确的顺序完成。 管理硬件单元的使用: Scoreboard 记录每个功能单元(如加法器、乘法器等)的状态,确保指令 ...