读论文日记
省流:另一种做题笔记。
2024-09-05
想找几篇分析 LLM 泛化的文章这么困难的吗?
https://arxiv.org/pdf/2405.01964
这篇文章得出的主要结论是,为了全面理解大型语言模型(LLMs)的行为和能力,研究者需要关注超出传统统计泛化理论的范畴。文章指出,尽管统计泛化能够解释模型在训练数据上的良好表现,但它并不足以解释LLMs在特定任务上展现出的一些关键特性,如零样本推理、上下文学习和数据高效的微调能力。这些特性可能源于模型的非统计泛化的其他特性,如归纳偏置和模型结构。
文章通过三个案例研究来支持这一观点:
1.零样本规则外推的非唯一性:展示了即使在测试损失相同的情况下,不同的模型在处理分布外(OOD)提示时可能表现出不同的规则外推能力。
2.上下文学习的近似非唯一性:说明了即使在KL散度非常小的情况下,模型可能在低概率序列上表现出截然不同的行为,这表明上下文学习(ICL)能力并非由最小化负对数似然直接导致。
3.微调性的非唯一性:讨论了在相同预训练损失下,不同参数化模型在微调时可能会有显著不同的性能,这强调了模型参数化对转移学习和微调的重要性。
基于这些发现,文章建议研究者应该:
1.开发更丰富的泛化度量方法,以更好地捕捉LLMs在自然语言处理任务中的表现。
2.使用形式化的语言和计算模型来研究LLMs的行为,以便在受控环境中进行分析。
3.探索和理解LLMs中的归纳偏置,这些偏置有助于模型在新任务和分布外泛化上的表现。
总的来说,文章的结论是呼吁机器学习社区对LLMs进行更深入的理论探索,特别是在饱和区(即模型在训练和测试数据上都达到或接近最优表现的区域),以揭示和利用那些能够导致实际应用中观察到的有用特性的机制。
https://arxiv.org/pdf/2403.09162
微调是不是影响 LLM 原先的泛化能力?
前人工作结论:格式专门化是导致微调 LLMs ICL 能力下降的关键因素
文章实验主要是把收集的 dataset 分成了两部分:生成任务(summarize)和分类任务(情绪分类)。然后得到了一些结论
然后得到了一些结论
4 结果与发现
4.1 相同任务,域内数据集
在图 1 中,我们首先展示了在相同微调/测试任务类型的域内测试数据集上微调后的 Llama-2 模型的结果(设置 1)。以下是主要发现:
-
微调模型在没有上下文学习(ICL)时表现通常优于基线 Llama-2 使用 ICL 的表现。 微调模型在不同的样本规模(2K、4K、6K)下表现出优越的 0-shot(无 ICL)性能,相比于基线 Llama-2 使用 ICL,在大多数数据集上表现更好,尤其是在 XLSum、Socialqa、MNLI-1、MNLI-2 和 Paws 上;见图 1(b)(c)(d)(g)和(h)。唯一的例外是在情感分类任务(Amazon 和 AmazonFood),在这些任务中,微调模型的表现略逊于基线 Llama-2 使用 ICL。这可能归因于 Llama-2 在情感分析中的固有专长,正如其高 0-shot 性能所示。在这种情况下,额外的微调可能不会显著提高性能,甚至可能由于过拟合或训练数据冲突而导致性能下降。
-
微调 LLMs 在使用上下文学习时的表现通常较差。 从图 1 可以看出,与基线 Llama-2 相比,微调模型从 ICL 中获益甚少。这一趋势表明,虽然微调提升了模型的 0-shot 域内泛化能力,但在推理过程中额外的上下文示例并不总是必要或有帮助。性能的下降可能是由于模型在微调后变得更加专业,减少了对新上下文的适应能力。微调模型与上下文示例数量之间的性能相关性仍不明确。相比之下,基线 Llama-2 显示出随着上下文示例数量增加,性能整体上有所提升。这一改进趋势表明,未经任务特定微调的 LLMs 更有效地利用上下文示例来理解专业任务。这些观察表明,一旦 LLMs 在足够的数据上进行微调,它们从 ICL 中获益的能力会减少。
-
微调更多样本可能不会持续提高测试集上的性能。 通常情况下,微调了 4K 或 6K 样本的模型在大多数测试集上优于 2K 模型。然而,性能提升的程度并不一致。例如,在 XSum(图 1(a))上,微调模型在训练集规模从 2K 增加到 6K 时,性能仅有轻微提升。相比之下,在 Paws(图 1(d))上,随着训练样本数量从 2K 增加到 4K,模型性能显著提高,从 81.6% 跳升至 93.2%。我们还发现,训练规模从 4K 增加到 6K 的影响细微甚至可能是负面的。这些发现表明,微调数据的体量与域内测试性能之间的关系是任务依赖的,并且并不简单。
4.2 相同任务,域外数据集
接着,我们展示了微调后的 Llama-2 在相同任务类型的域外测试数据集上的结果(设置 2)。我们基于图 2 得出以下观察:
-
微调模型在生成任务上的表现不如基线模型,而在分类任务上表现更好。 对于域外测试结果,任务类别(即生成和分类任务)之间存在明显的区别。在生成测试数据集(图 2 中的(a)PeerRead、(b)CNN/DailyMail、(c)Tweetqa 和(d)Sciqa)中,微调模型的表现逊色于基线模型,并且这种差距无论上下文示例的数量如何都存在。值得注意的是,在 CNN/DailyMail、Tweetqa 和 Sciqa 等数据集中,随着训练样本的增加,性能并没有提升,表明微调 LLM 的泛化能力受到了影响。
-
在情感分类任务中,微调模型的最佳表现与基线 Llama-2 相当,这意味着微调 LLMs 的情感知识不太可能丢失;见图 2(e)和(f)。 另一个显著的观察是,微调模型在使用不同的 ICL 示例时表现出更大的变异性。这表明,情感分类任务的性能对上下文示例更为敏感。对于其他分类任务(即同义句检测和自然语言推理),微调模型始终优于基线 Llama-2,如图 2(g)-(j)所示。
-
微调对生成和分类任务的域外测试的不同影响可能源于任务输出空间约束的差异。 分类任务的输出空间固有地是预定义和有限的,使得微调的 LLMs 相对容易将其继承和调整的知识应用于新领域。相比之下,域外生成数据集的输出空间与训练集的输出空间大相径庭。尽管给出了少量的上下文示例,微调模型在新领域仍可能难以处理广泛的可能输出。
4.3 不同任务
最后,我们测试了微调模型的泛化能力在跨任务测试数据集上是否得以保留(设置 3)。每个测试集的评估是使用在其他任务上微调的 2K 训练样本的模型进行的。由于篇幅限制,我们的分析仅限于五个测试集:XSum、Socialqa、Amazon、Paws 和 MNLI-1。以下发现主要基于图 3 的第一行:
-
微调的泛化表现出显著的变异性,且高度依赖于训练数据。 在评估分类任务(即 Amazon、MNLI 和 Paws)的表现时,模型的微调源对其效果有很大影响。对 Amazon 数据集的微调对 MNLI-1 测试集的性能有负面影响,而对 XSum 的微调显著提升了性能;见图 3(b)。与此同时,对于生成任务,微调在 Socialqa 上会影响 XSum 的表现,而对 XSum 的微调对 Socialqa 的影响较小;见图 3(d)和(e)。这些复杂的模式表明,微调的有效性不易预测,可能与数据集特征、微调程序等因素交织在一起。
-
在分类任务上微调的模型在生成任务上无法泛化。 从图 3(d)和(e)可以看出,在分类数据上微调的模型在生成任务上几乎没有 Rouge-L 分数。检查输出后,可以明显看出这些模型主要生成分类标签而非连贯文本,这体现了输出空间的专门化,这与 Wang 等(2023c)的发现一致。存在两个潜在原因。首先,模型的输出空间可能被限制在微调过程中见到的类别标签上,抑制了生成其他标记的能力。第二个原因可能是由于提示格式,如表 5 中的 Prompt-1。不同任务的提示具有相同的开头 "###",这可能会使模型困惑,导致其误将来自其他任务的输入误解为属于其训练任务。为了进一步调查提示格式的影响,我们引入了一组不同的提示,避免了统一的起始序列(表 5 中的 Prompt-2)。相应的结果显示在图 3 的第二行中。通过比较第一行和第二行,我们发现分类任务的跨任务评估对提示格式的敏感度高于生成任务的评估。此外,从图 3(i)可以看出,模型在 Amazon 上微调后开始在 XSum 上有效。但在 Socialqa(子图(j))上,Amazon 上的微调仍未成功。因此,提示格式对跨任务泛化至关重要,但确定一种普遍有效的格式仍需探索。
https://arxiv.org/pdf/2402.11359
这是 agent training 范式。结论是涨点了,但是感觉只是想到了一个做法,然后对着这个做法编了一个论文。而不是解决了一个问题(比如TRPO?)
motivation 是之前在下游任务上微调的 LLM agents 都对基座模型进行了微调,从而导致这些 agents 泛化能力不行。但是人类使用工具并不会改变自身的生理结构去适应工具调用,所以我们希望把解决下游任务的能力作为外挂包。本文的外挂包是“功能库”,我们可以通过增强 agent 功能库的实力来增强agent 的能力。我们希望能通过 ML 的方法来获得类似于模型参数 $\theta^ {* } $ 的 功能库*,于是本文就定义了一套pipeline,比较关键的是 optimizer,具体而言,我们会把 (现在的功能库)+ (agent 在当前功能库上的表现)作为 input 给到 optimizer,optimizer 决定增加一个 tool(自己写tool 的description、具体代码等等),减少一个 tool,修改一个 tool,终止 optimization process。
其实你不理解什么是功能库,我也不理解,于是我找到了下图。
https://arxiv.org/pdf/2308.03296
这篇文章爆了几个结论:
-
LLMs展现出能够在对话中扮演特定角色的能力,例如模拟具有特定目标和动机的人工智能助手。作者们通过分析影响函数发现,这种行为更多地是通过模仿训练数据中的类似行为而习得的,而不是通过复杂的规划算法。
-
对词序的敏感性:作者们发现,模型对于训练数据中词的顺序非常敏感。特别是,当训练数据中的词序与测试查询中的词序相匹配时,模型展现出更强的泛化能力。例如,如果训练数据中的“first president”出现在“George Washington”之前,那么这种顺序在测试查询中也必须保持一致,模型才能正确泛化。
https://arxiv.org/pdf/2406.01382
LLM 在被应用到实际场景时,一个前置步骤是:人类给 LLM 一堆 prompt,看看 LLM 的表现,接下来人类思考(或者说猜测)一下在这些 prompt 下表现良好的 LLM 在什么其它场景也可以表现良好(比如能做对大学物理的 LLM 大概率能做对小学数学,但是是不是能做对中学语文就不知道了)。
如果一个 LLM 和人类的评估不对齐(比如人类认为你可以在这些 task 上表现出色,但是你并没有;人类认为你无法胜任其他工作,但是你可以),那么将会造成损失。我们认为设计能和人类评估对齐的 LLM 是非常重要的。
做法就是造数据训模型,这篇工作好像是直接找民工收集数据了。
但是这个增量在绝大多数情况下都很小。然后作者们引入了一个简单的推荐系统,细节如下图
太幽默了,这个 human generalization function 原来是这个意思
2024-08-28
https://arxiv.org/pdf/2306.13304
问题:我们在评估“模型调用外部工具能力”时用的 问题,可能模型不需要调用外部工具就能回答了。如果粗粒度的设计一些问题,评估出来的指标不一定准确。
2024-06-10
https://arxiv.org/pdf/2305.00833
研究动机(Motivation):
大型语言模型(LLMs)在多步推理任务中表现不佳,并且无法保留先前的推理步骤以供将来使用。这限制了它们在复杂问题解答中的性能。
解决的问题(Problem Solved):
论文提出了一种名为“Self-Notes”的方法,旨在解决上述问题。这种方法允许模型在阅读上下文时,随时偏离输入内容生成明确的推理标记(即“Self-Notes”),以增强其记忆并实现多步推理。
使用的方法(Method Used):
- Self-Notes:与链式思维(Chain-of-Thought)或草稿板(Scratchpad)方法不同,Self-Notes 允许模型在任何时候插入与输入上下文和问题交织的内部推理笔记。
- 模型架构:考虑了一个自回归的变换器模型,该模型在生成最终输出之前,可以通过生成“笔记标记”来丰富上下文。
https://arxiv.org/pdf/2404.14963v3
大型语言模型(LLMs)在各种自然语言处理任务中表现出色,但在处理复杂的数学文字题时,它们的推理能力常常不尽人意。这类问题通常包含三种错误:语义理解错误、计算错误和步骤遗漏错误。尽管已有研究关注计算错误和步骤遗漏错误,但语义理解错误作为限制LLMs性能的主要因素,却被忽视了。
论文提出了一种简单但有效的方法,称为“Deeply Understanding the Problems”(DUP),通过解决语义理解错误来提高LLMs解决数学问题的能力。DUP方法的核心是鼓励LLMs深入理解问题,提取关键的解题信息,以进行更好的推理。
DUP(Deeply Understanding the Problems)方法是一种针对大型语言模型(LLMs)的提示策略,旨在提高它们解决数学文字题的能力。以下是DUP方法的详细步骤和特点:
-
揭示核心问题(Reveal the Core Question):
这是DUP方法的第一阶段,目的是从复杂和冗长的问题描述中明确问题的核心。通过设计一个提示,要求LLM明确提取问题的核心部分,从而帮助模型集中注意力于问题的目标。 -
提取解题信息(Extract the Problem-solving Information):
第二阶段进一步从问题描述中提取对解决核心问题至关重要的信息。这一步骤通过一个提示来实现,该提示要求LLM列出与核心问题直接相关的最有用的信息。 -
生成并提取答案(Generate and Extract the Answer):
在前两个阶段的基础上,第三阶段将核心问题和解题信息结合起来,生成详细的回答,并从中提取最终答案。这一步骤通过一个模板提示来实现,该模板明确指出了目标和解决问题所需的必要信息。
刷榜神文……
2024-06-06
https://arxiv.org/pdf/2304.14106
只能说看 paper 不能当真吧。
https://arxiv.org/pdf/2402.16667
之前以为这是在完成软工的事情,今天发现他们是完成了 repository 级别的代码文档的维护。这个工作的关注点还是相当好的。
我个人对repository级别代码理解这个domain 的理解有点有限。做法似乎还是人工去规定哪些内容被塞进 prompt。
https://arxiv.org/pdf/2305.10250
这篇文章似乎是提出了长期记忆的概念。在做法上也是基础的 storage 和 retrieval 的结构。在长期记忆中还有一个问题是记忆的更新,这个文章的做法是用艾宾浩斯遗忘曲线。
https://arxiv.org/pdf/2306.03901
这篇文章的思路是将 memory 改成结构化内容进行维护。
这个想法就需要 backbone model 输出schema的
2024-06-03
https://arxiv.org/pdf/2302.02676
Our key idea is that humans are capable of learning from rich and detailed feedback in the form of comparisons
RL 的数值确实反映了 comparison,同时使用了 SFT 的格式。还
2024-05-31
https://arxiv.org/pdf/2212.01378
之前有人管这个叫联邦学习来着。
https://arxiv.org/pdf/2112.08810
大概解决了一个长尾分布的问题,做法是直接加入 pure noise 数据,然后改了改 normalization 的方式。读了一遍他关于这个做法正确性的证明,说的实在是不能更对了。
https://aclanthology.org/2022.acl-short.76.pdf
有个文章模仿了一下,大概是对基座模型参数加噪声之后再到下游任务上微调,中了 ACL。zhihu 分析文章全是喷提升有限的,真蚌埠住了
这 paper 似乎还不分析理论。但是有另一篇在 embedding 上加噪声的似乎就写得不错:https://arxiv.org/pdf/2310.05914
2024-05-30
https://arxiv.org/pdf/2307.12856
在真实世界网站的性能仍然受限于几个关键问题:开放领域性、有限的上下文长度、以及缺乏对 HTML 的归纳偏差
它通过自我经验学习来完成真实网站上的任务,遵循自然语言指令。WebAgent 通过将指令分解为子指令来进行计划,将长的 HTML 文档总结为与任务相关的片段,并通过生成的 Python 程序来操作网站。研究者们设计了 WebAgent,使用了 Flan-U-PaLM 用于基于代码生成的地面化,以及 HTML-T5,一个新的预训练 LLM,用于处理长 HTML 文档,它采用局部和全局注意力机制以及长跨度去噪目标的混合,用于计划和总结。
我的理解是 finetune 得到了一个新模型挂到了 PaLM 得到了一个 Agent。没找到创新点在哪里/wul
https://arxiv.org/pdf/2204.03044
这篇更是重量级。
motivation 是 pretrain 的计算开销太大了,并不是所有人都能负担的起的。(靠之前还真不知道 pretrain 和 finetune 在资源开销上有什么区别,答案是 预训练 batch size 大,但是 finetune 就是开小一些,这可能导致显存消耗不同;预训练的电量消耗很大;预训练存 gradient 的需求比 finetune 要大一些)。对于特定的下游任务,finetune 的开销就小很多。
我们希望找到一个 finetune 的起点,使得在同样的训练方式下最终的效果会更好。这个文章的做法是让一些其它任务已经 finetune 好的模型直接求平均。效果大概是这样的???
仔细读了读,发现之前理解全错了。不难发现这个方法是 model initialization 方面的,那么不难联想到 meta Learning。图穷匕见,这篇文章的 motivation 是 meta learning 的一些工作。所以我又不懂了呵呵。
2024-05-28
https://arxiv.org/pdf/2307.09668
论文解决了以下几个关键的强化学习挑战:
在稀疏奖励环境中有效探索。
重用收集到的数据来加速新任务的学习。
安排学习到的技能来解决新任务。
通过观察专家智能体来学习。
https://arxiv.org/pdf/2305.14992
LLMs在某些对人类来说简单的问题上仍然存在困难,比如在环境中生成实现给定目标的行动计划,或执行复杂的数学或逻辑推理。这些问题的根源在于LLMs缺乏一个内部世界模型来预测世界状态(例如,环境状态,中间变量值)并模拟行动的长期结果。
我的理解是 LLM 没有什么想象能力。
为了克服这些限制,作者提出了RAP框架,该框架将LLM重新用作世界模型和推理代理,并结合了基于蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)的原则性规划算法,用于在广阔的推理空间中进行策略性探索。在推理过程中,LLM(作为代理)在LLM(作为世界模型)的指导和奖励下逐步构建推理树,并有效地获得具有适当探索与利用平衡的高奖励推理路径。
首先我们引入 world model 来给当前动作提供 reward 和 next state。又考虑到这是一个推理模型,那么我们不能上一些时间开销大的算法,于是就选一个 MCTS
https://arxiv.org/pdf/2402.15809
代理在学习从试错中获取新行为的能力方面存在限制.人类通过经验学习自然地扩展其行为空间并发展技能,而LLM代理通常在预定的行为空间内操作。为了克服这些挑战,作者提出了一种新颖的学习范式,专注于通过行动学习来扩展和改进行为空间。
为了解决上述问题,作者介绍了一个名为LearnAct的框架,该框架采用迭代学习策略,以Python函数的形式创建和改进行为。在每次迭代中,LLM根据在不成功的训练任务中识别出的错误来修订和更新当前可用的行为,从而提高行为的有效性。
以下是action生成的详细步骤:
-
接收任务指令:
- LLM代理首先接收基本任务指令,这些指令定义了任务的目标和上下文。
-
生成高层次行为步骤:
- 代理需要将任务指令转化为高层次的行为步骤。这些步骤是高级的Python函数,它们封装了多个基本动作(basic actions),以完成特定的子任务。
-
定义Python函数:
- 每个高层次的行为步骤都被定义为一个Python函数。这些函数将接受输入参数,而不是在函数内部固定值。这样做增加了行为的灵活性和可重用性。
-
使用示例和描述:
- 对于每个生成的高层次函数,LearnAct还需要生成描述和使用示例。描述提供了函数预期结果、必要条件和输入输出格式的概览。使用示例则指导代理如何在适当的场景中使用新的行为。
-
迭代学习和改进:
- 在初步创建行为函数之后,代理将通过试错来学习并改进这些函数。在训练阶段,代理尝试使用当前可用的行为空间解决问题,并根据执行反馈识别失败的行为。
-
行动学习的两种策略:
- 函数更新(Function Updating):当发现行为失败时,代理可以选择通过修改Python函数来纠正误解或忽视任务的情况。
- 写注释(Writing Notes):或者,代理可以通过增加注释来增强函数的描述,指导代理更准确地使用行为。
-
多样本学习:
- 为了提高学习过程的稳定性和每一步的质量,LearnAct在每次迭代中进行多次抽样(例如K次),生成K个修订后的结果。然后,每个行为-策略对在训练集上进行评估,选择最佳的行为样本进行下一步迭代。
-
选择最佳行为:
- 使用特定的评分系统,基于在训练实例中的成功率和成功执行动作的比例,选择最有益和可行的行为样本。
这里的 python 函数主要是想利用它的嵌套结构。
2024-05-27
https://arxiv.org/pdf/2303.08268
将LLMs与多模态感官输入和连续动作输出相结合,同时使机器人能够与环境互动并获取新信息,仍然是一个挑战。
使用的方法:
- Matcha(多模态环境聊天)代理:提出了一个交互感知框架,以LLM作为其核心,利用其能力来指导认识性动作,并对由此产生的多模态感觉进行推理,以及基于交互获取的信息来规划整个任务的执行。
- 多模态感知模块:为了处理各种感官数据并适应机器人和环境条件的变化,研究者设计了针对每种模态的训练有素的模块,并将它们插入到LLM主干中。每个模块将多模态感觉语义转换为自然语言,以便LLM能够理解并统一处理。
- 低层次命令执行策略:结合由LLM生成的命令和视觉感知模块提供的视觉信息,执行策略模块定位目标对象并执行特定动作,同时收集环境反馈供多模态感知模块进一步处理。
框架开发工程
https://arxiv.org/pdf/2303.16563
研究动机与问题:
- 在没有人类演示的情况下,使用强化学习(RL)在大型开放世界环境中学习完成长期任务是非常低效的。这是因为开放世界环境(如Minecraft)通常具有极大的世界尺寸和多样化的任务,导致RL在没有演示数据集的情况下面临探索难题和样本效率低下的问题。
使用的方法:
- 论文以Minecraft游戏作为测试平台,提出了三种细粒度的基本技能:探索技能(Finding-skills)、操作技能(Manipulation-skills)和制作技能(Crafting-skills)。
- 使用强化学习(RL)和内在奖励来获取技能,特别是提出了一种新的探索技能(Finding-skill),以探索并找到多样化的物品,为其他技能提供更好的初始化,从而提高学习样本效率。
- 利用大型语言模型(LLM)中的先验知识来发现技能之间的关系,并构建技能图谱(skill graph)。
- 在任务解决过程中,智能体通过在技能图谱上进行搜索,生成合适的技能计划。
我的理解是,如果探索空间太大 RL 随便跑可能效率低的问题,可以引入人类先验知识。我觉得先验知识肯定可以 LLM 提出,那么进一步优化似乎变成了一个 RL 提升效率的问题,我并不是很理解这个。似乎可以找人问一下。
实际上,我对 RL Agent 完全不懂。有时间似乎需要仔细读一些文章。呃呃似乎是对 RL 完全不懂。
https://arxiv.org/pdf/2303.17651
研究动机:
- 与人类在撰写文本时会不断修正改进类似,大型语言模型(LLMs)在初次生成输出时也并非总是最优的。
- 现有的LLMs在处理具有复杂目标的任务(如对话响应生成)或难以明确定义目标的任务(如提高程序可读性)时,可能会生成可理解但需要进一步细化的初始输出。
- 为了进一步提升输出质量,需要一种有效的细化方法,该方法不需要大量的监督数据或额外的训练。
解决的问题:
- 如何在不需要额外训练数据、额外训练或强化学习的情况下,通过迭代反馈和细化来提高LLMs生成的输出质量。
使用的方法:
- SELF-REFINE方法的核心思想是使用同一个LLM生成初始输出,然后让该模型对自己的输出提供反馈,并利用这些反馈来不断细化自己。
- 该方法不需要任何监督训练数据、额外训练或强化学习,而是使用单个LLM作为生成器、细化器和反馈提供者。
- 通过少量示例(few-shot prompting)引导模型生成反馈和将反馈整合到改进的草稿中。
这个好像很有名,也是对人类的一个行为的建模。按照我的理解,这个可以通过 prompt 和改改 parser 实现。
https://arxiv.org/abs/2304.05128
研究动机(解决了什么问题):
大型语言模型(LLMs)在代码生成方面取得了令人印象深刻的性能,但在复杂的编程任务中,一次性生成正确的解决方案变得具有挑战性。以往的工作设计了程序修复方法来提高代码生成性能,但这些方法需要对代码修复模型进行额外的训练。为了解决这个问题,作者提出了一种名为SELF-DEBUGGING的方法,它通过少量示例教学,使得大型语言模型能够通过自我调试来改进其预测的程序。
解决的方法(讲了一个什么故事):
SELF-DEBUGGING方法教会大型语言模型通过执行代码,然后基于代码及其执行结果生成反馈信息,来识别和修复代码中的错误。这个过程类似于人类程序员的“橡皮鸭调试法”(rubber duck debugging),即通过向橡皮鸭逐行解释代码来显著提高调试效率,而无需专家指导。
这个多少有点无聊了。
2024-02-03
【Toolformer: Language Models Can Teach Themselves to Use Tools】
本质上是让 LLM 自己标注样本。这是因为人类其实并不能理解 LLM 学习的机理,那么人类标注的数据不一定对 LLM 的学习是有价值的。当然我们也不知道 LLM 自己标注样本对自己的学习是否有价值 但是节省了人力
-
让 LLM 通过 in context learning 来进行训练数据集标注,通过加阈值让有价值的 API 信息保留下来。
-
让 LLM 在有 API 调用的数据上进行 fine tuning
通过本文大概学到了一些做实验的流程。
2024-01-31
上午理论上还学习了 proximal policy optimization,但是 rl 这方面从来没跑过代码,有点虚
【are emergent abilities of large language models a mirage】
观点就是评估方式太拉了,二元的 01 得分实在是不太牛。如果我们将 multiple choice 活着两位数乘法、四位数加法的评估方式换成一个稍微渐进一点的方法就会好很多。比如后者使用“编辑距离”。
2024-01-26
【Voyager: An Open-Ended Embodied Agent with Large Language Models】
不知道 novelty 在哪里,可能是提出了新的框架。做法还都是比较传统的 CoT/评分 llm/RAG 检索等等。
2024-01-25
【Efficient Streaming Language Models with Attention Sinks】
研究人员发现 在 decoder only 结构中,我们解码需要所有上下文 token 的 KV 信息,这太多了。他们打了个表发现 \(QK^T\) 这个矩阵,当 layer 深度比较大的时候,有这么一个特性:
负数的部分因为有激活函数的原因所以可以直接扔掉,所以可以保留最前面一溜和最后一些跑就行了。
难以评价。这甚至是现在处理上下文的最好的方法。
【LLM Augmented LLMS - Expanding Capabilities Through Composition 】
顾名思义,训练一个 anchor model(通用大模型) 和一个 domain-specific augmented model(另外训练的小模型) 结合起来来做到两者分开就达不到的效果。
这是为了解决:1.用不了这么多数据。2, catastrophic forgetting 3.基于anchor model agumenting成本大
组合的规则:不能改权重;一个 anchor model 和多个 agumenting model 对应;可以另外附上一些数据训练组合之后的结果。
左右两边分别是 agumenting model 和 anchor model,参数不变。中间再加一个 attention block 并进行训练以调用左右的 model.
这个文章 method 部分好像没什么可以说的了。图中表示:你可以从 A模型任一层把参数抽出来,先经过 projection layer 把词向量的维度对齐之后,和 B 中的某层做一个 Attention(图中 QKV 的来源和 transformer 的 decoder block 中 qkv 来源一致,B 的下一层就是 Attention 结果和 B 中该层结果相加(residual)
反向传播的时候修改 attention block 参数即可
相比于 LoRA/Delta-tuning ,calm 可以让 \(m_A\) 对 task 的一个 part 进行用该 part 的数据进行训练,让 \(m_B\) 对 task 的另一个 part 用该 part 的数据进行训练,然后用少量数据训练 \(m_c\)。结合图片,什么都能理解。
【copy is all you need】
等看懂了更新。
【large language models as optimizers】
一个玩 prompt 的手法,框架为下图。
llm 生成新的结果的时候需要参考之前的 output 的 score。可能可以理解成一种打磨的方法。
有些其它的点可能需要记录一下:
-
这个 meta prompt 初始化可以是空,可以是一些人造的 prompt,所以其实可以理解为一个搜索的过程,每次在状态空间里面添加元素。考虑到搜索初期(这个阶段模型的探索属性强,而精益求精的优化属性较弱),为了避免 evaluator 产出的 scores 波动过大,可以每次让 optimizer generate 多个结果喂过去,再往 prompt list 中 append。这个“多个结果”,根据实验,选择数字 8 的效果最好
-
对于探索和优化两维平衡的问题,这个是通过 temperature 来控制的。根据 github 代码,一共两种情况:temperature 是 constant 或者 线性变化。如果是探索性比较强的状态下,就可以给 score 比较低的一些 Output 一些增加。
2024-01-23/24
听了一些强化学习理论知识,把 policy gradient 鸽了,打算回头找个作业写一写把原理再搞明白一些再去深入。本来想写一个【学习笔记】,但是能写的东西实在是太 low 了就鸽了。
24 号 thunlp 发了一篇推送说中了一大堆 iclr,感觉很牛。
2024-01-22
早上想了一小会,跟学长聊了一下,他说这个是 RAG,有点难绷。
学长还说长文本用 streaming llm 相当多;lora 可以用在绘画生成上,比如,训一个山水的,训一个花鸟的,往 foundation model 上一加;tools 套 lora 这件事情已经被做过了。
什么都不会,怎么办!
2024-01-21
读了 graph of thoughts 和 algorithms of thoughts。前者就是纯纯水文。后者居然还是 prompt 研究,感觉一点也不牛。都没有 ToT 牛。
今天写了 assignment II ,发现自己好像不太能看清楚损失函数和什么变量有关系,一点代码能力也没有了。
晚上 follow 了一下 toolkenGPT 的工作,读了读他们的 dataset
2024-01-20
读了 lora 和 glove。本来还想读 toolkenlization 的论文但是白烂了
更了 pca 和 svd 的博客。
这天写完了 assignment I
2024-01-19
书接上文。这天应该想读 word2vec 来着,但是因为 svd pca 这些都不会就白烂了。
这天应该是开始写 cs224n assignment I
2024-01-18
Generative Agents: Interactive Simulacra of Human Behavior
这个好像是著名的 斯坦福小镇。
为了实现生成性代理,我们描述了一个代理架构,该架构使用大型语言模型存储、合成和应用相关记忆以生成可信的行为。我们的架构包括三个主要组件。第一个是记忆流,它是一个长期记忆模块,以自然语言记录代理的经历的综合列表。一个记忆检索模型结合相关性、新近性和重要性,以呈现在代理逐时行为所需的记录。第二个是反思,它将记忆在时间上合成为更高层次的推断,使代理能够得出关于自身和他人的结论,以更好地指导其行为。第三个是规划,它将这些结论和当前环境转化为高层次的行动计划,然后递归地转化为详细的行为用于行动和反应。这些反思和计划被反馈到记忆流中,以影响代理的未来行为。
2024-01-17
每日一乐:transformer architecture 让 ChatGPT 给翻译成 变压器架构 了。目测 T 换大写就行了。
1.llm agent 的
-
construction
目的:使 llm 成为六边形战士 -> 成为了六边形战士之后要在各项评测任务中表现得更好。原文中做的类比是 构建基础神经网络架构 & 让神经网络在训练中学习参数。
对于 architecture,survey 中提出了一种统一的架构,由一个分析模块、一个记忆模块、一个规划模块和一个行动模块组成。
-
分析模块
目的是识别代理的角色 & 其它基本信息。它们可以手动指定,但是非常耗时;可以直接让 LLM 生成,需要 种子/ few shot 示例,显然,这种做法精确度有点问题,不知道能不能使用 self consistency,或者使用了这种手法仍然很拉;可以从数据集里面找自然语言描述
这些方法显然不是独立的。 -
记忆模块
人类有“感觉记忆(感受器输入),短时记忆,长时记忆”。LLM 也可以分为短期记忆和长期记忆,前者是上下文信息/场景图/环境反馈,后者是额外维护的向量集,LLM 可以快速获取其信息。不过容易发现不存在只有长期记忆的结构,只有纯短期记忆/混合记忆。
此时需要考虑 format & operation
format 顾名思义,就是 data 存储的方式,那么显然有很多 database 的 work。有些工作和这个相关。
CHATDB: AUGMENTING LLMS WITH DATABASES AS THEIR SYMBOLIC MEMORY
VOYAGER: An Open-Ended Embodied Agent with Large Language Modelsreading -> 读取当前交互最需要的 memory,考虑 memory 是否 recent,和 interaction 的 relavance 以及 memory 自己的 importance.
writing -> 问题有二 :duplicated (在 OpenAI. GPT-4 technical report, 2023. 中有涉及解决方法)和 overflow(可以考虑 queue)
reflection -> 和 human 一样,但是 survey 写得太抽象,可能要读:Expel:Llm agents are experiential learners
host in the minecraft: Generally capable agents for open-world enviroments via large language models with text-based knowledge and memory.
Generative agents: Interactive simulacra of human behavior. -
规划模块
这个应当是我比较熟悉的了,后面把 CoT 的各种衍生体读一手。
可能我对 plan 理解有点狭隘。话说在自然语言中的 plan 是怎么定义的,可能还是把 task 分成 subtask 这样?
CoT 和后续工作是无 feedback 的 plan。而有 feedback 的 planning 重要的一点就是将反馈纳入推理,其实主要还是为了缓解幻觉问题。来自模型反馈的这一段因为 reference 太多导致我没看明白。把ChatGPT的翻译粘到这里,等把论文里的方法看了再说。
模型反馈:除了前述的外部环境和人类反馈之外,研究人员还研究了来自代理自身的内部反馈的利用。这种类型的反馈通常是基于预训练模型生成的。具体而言,Self-refine: Iterative refinement with self-feedback 提出了一种自我完善机制。该机制由输出、反馈和完善三个关键组件组成。首先,代理生成一个输出。然后,它利用LLMs对输出提供反馈,并指导如何完善它。最后,通过反馈和完善改进输出。这个输出-反馈-完善的过程迭代直至达到某些期望条件。 [SelfCheck: Using LLMs to zero-shot check their own step-by-step reasoning] 允许代理检查和评估其在各个阶段生成的推理步骤。它们然后可以通过比较结果来纠正任何错误。InterAct [InterAct: Exploring the potentials of ChatGPT as a cooperative agent.] 使用不同的语言模型(如ChatGPT和InstructGPT)作为辅助角色,例如检查器和排序器,帮助主要语言模型避免错误和低效的行动。ChatCoT [ChatCoT: Tool-augmented chain-of-thought reasoning on chat-based large language models.] 利用模型反馈来提高其推理过程的质量。模型反馈是由监控代理推理步骤的评估模块生成的。Reflexion [Reflexion: Language agents with verbal reinforcement learning] 旨在通过详细的口头反馈增强代理的规划能力。在这个模型中,代理首先基于其记忆产生一个动作,然后,评估者通过将代理轨迹作为输入生成反馈。与以前的研究不同,其中反馈以标量值的形式给出,该模型利用LLMs提供更详细的口头反馈,这可以为代理的计划提供更全面的支持。
行动模块负责将代理的决策转化为具体的输出。 理论上应该记录 frame 的,但是我太颓废了,摆烂了。
当我们得到 agent 的结构之后还有一个问题就是 capability acquisition。有 使用 来自 human/llm/real world dataset 的 fine tune 和 不使用 fine tune 另寻 Prompt engineering/Mechanism Engineering,后者有类似强化学习的 trial & error / 类似 self consistency 但是单步迭代的做法/在试错中找正确做法 等等。
-
-
application
-
evaluation
白烂了。
2024-01-16
-
Chain of Thought
人工构造思考过程。
后面有一篇 llms are zero-shot reasoners,具体而言,是在提问之后添加一个“let's think step by step.” 的 prompt 就会很大地提升正确率。
(最没得写,最需要编故事的一集)在 CoT 原论文中提到实验过程中的 CoT 对于所有 dataset 都是人手造的而且都一样,那么有一个想法就是对同的 dataset 设计不同的 prompt。于是想让大模型自己生成 CoT 。做法是提前问一些问题,问题后面加上 “let's think step by step.”,再把新问题和之前 llm 生成的 CoT 放到测试提问中,又能提升正确率。最后的做法被称为是 auto CoT。CoT 的简便性(已经 simple 得不能 simpler 了)可以通过消融实验来证明。
最开头的论文中提到,CoT 可以将计算资源分配给推理过程/提升可解释性。
关于 llms 在给出 CoT 时的可信度,鸽了不写
有人说可以通过阅读实验过程写得详尽的文章来获得灵感,但是我太颓废了。