强化学习的一些事

强化学习MD作业deadline提前了整整一个月了,这一周就光做作业去了什么也没干
刚出一个llama3想玩玩也没时间,现在又要看论文了,打算下午去吃点好的犒劳下自己了。

关于强化学习写作业的感受,太难了,环境怎么设计奖励怎么回馈实在是太难了,不靠GPT基本很难完成了可以说是。一些有意思的是价值迭代和DQN在完成的一个版本都下不过随机落子,但是在价值迭代改进了之后能够完胜随机落子,同时下不过随机落子的DQN完全没有改动竟然随便赢改进之后的价值迭代,可以说是傻逼克高手了。

因为价值迭代一直没有进度,(成功的那版是用GPT仿照悬崖环境的价值迭代写的),我中间也尝试过用策略迭代代替价值迭代,结果这个策略迭代更离谱了,会在已经有棋子的地方下棋。

论文的一些事

问题背景

先前agent的决策过程与人类不是很像,agent知识来源狭隘且以简单的启发式的决策进行行动,同时环境也是为agent进行设计过的、受限的。在大模型出来之后,智能体能做出类人决策变得很有可能了。

An autonomous agent is a system situated within and a part of an environment that senses that environment and acts on it, over time, in pursuit of its own agenda and so as to effect what it senses in the future.

这是Franklin and Graesser (1997)提出来的关于自主智能体的定义,其中最重要的就是智能体可以感知环境并且行动以影响它所感知到的未来,就是说是感知、规划、决策、行动作为了智能体应当具有的能力。

这篇论文的结构主要是:

  • 架构
    • 如何设计agent架构激发LLM潜能
    • 如何让agent完成复杂任务
  • 应用
  • 评估

Constructions

自主agent远不止QA系统这么简单,它需要能够:

  • 遵循特定规则
  • 自主感知
  • 与环境交互并进化
    总体框架就是有:
  • 配置
  • 记忆
  • 规划
  • 行动
    分析影响记忆和规划,然后这三者再一起影响行动。

配置模块(profiling module)

agent通常以一个特定的角色行动,而配置模块则通常来指出这一点。
agent在以一个角色行动时通常具有一些属性(profile),如年龄性别职业、心理学信息社会学信息等等,这些信息通常由使用场景确定。
目前主要的产生这些profile的手段有:

  • 手工设计
    比如直接用prompt输入类似于“你是一个开朗的女孩”,这种方法非常灵活,但耗费人力
  • 大语言模型生成
    说明profile的生成规则,阐述目标agent profile的属性和组成,然后可选择性的给一些例子,最后让大语言模型自动生成。好处是非常节省时间,但是生成的profile难以被精确控制
  • 数据集对齐
    profile是由真实世界获取的数据集,组装成一个prompt来指定agent。这种方法让agent的行动更有意义,更能反应真实场景。

记忆模块(memory module)

存储agent从环境的发现,并利用这些发现让未来行动变得更加便利,这一模块的存在可以让agent积累经验、自我进化,使其行动更加便利合理。

记忆结构

受到人类记忆结构的启发(感知记忆、短期记忆、长期记忆),Transformer上下文窗口被视为短期记忆,长期记忆则是向量数据库存储。

  • 统一记忆(unified memory)
    这一结构仅仅模拟短期记忆,使用上下文学习技术来实现,将记忆信息写入prompt中,
    这一方式实现较为简单,同时能增强agent的上下文理解能力。但是这种方法受限于短期记忆窗口大小,在长上下文的场景中agent的能力会退化。

  • 混合记忆(hybrid memory)
    该结构模拟的就是人类的长短期记忆结构,短期记忆缓冲最近的感知,而长期记忆则随着时间不断巩固。结合长短期记忆的设计有利于a
    gent的长期推理与积累有价值经验,这在完成开放环境下的复杂任务十分重要。

记忆格式

  • 自然语言
    直接用自然语言记录agent的发现,非常自然并且可理解,同时自然语言也可以保留更多的语义信息来指导agent的行为。

  • 嵌入向量
    记忆信息被编码成嵌入向量,方便记忆信息的提取,能让agent从记忆中获取信息的效率提高。

  • 数据库
    记忆信息存入数据库,允许agent更加规范全面地使用信息。使用这一方式的agent都在SQL上面做了微调,方便agent对数据库进行操作。

  • 结构化列表
    记忆信息被编成列表以精简高效的语义信息(例如元组、目标-规划对等等)进行存储

记忆操作

  • 记忆读
    从记忆中获取有用的信息来增强agent的行动,比如使用先前成功的经验来达成相似的目标。如何获取有效信息十分重要,有三个标准评价记忆信息的有效程度:新近性、重要性、相关性。

  • 记忆写
    记录智能体对环境感知的信息,记录有效信息也十分重要,一方面如何存储与已有记忆相似的记忆,另一方面如何在记忆存储达到上限的时候进行遗忘。

    1. 记忆重复
      同一子目标下的行动方案压缩并替换原来的记忆
    2. 记忆溢出
      由用户显式删除记忆
      先进先出
  • 记忆反思
    模仿人类见证和评估自己的认知、情感和行为过程的能力。目标是为agent提供独立总结和推断更抽象、复杂和高级信息的能力。

规划模块(planning module)

面对复杂任务的时候,人们倾向于将任务分解成简单子任务。而这一模块就是模仿人类的这一能力。

无反馈规划

  • 单一路径推理
    将任务分解成多个中间的级联步骤,每个步骤仅有一个后续步骤。如思维链的方式,让LLM一步一步思考解决步骤并组成一个prompt进行自我提示。

  • 多条路径推理
    以树结构进行推理,与人类的思考方式更类似,每一中间步骤都可能有多个子结果并引起更多的规划

  • 外部规划器
    虽然LLM在零样本规划展示了很强的能力,但是在特定领域进行高效规划依然是一个挑战。在这个方法中LLM充当一个发现与总结者,其中的规划步骤则交给外部规划器做

有反馈推理

在面对真实世界场景,需要长远规划以解决复杂问题,这个时候直接生成完美计划是非常困难的,同样每一步骤执行的结果成功与否也未可知。

  • 环境反馈
    这一部分感觉也是研究最多的地方,反馈来自于agent处于的环境,比如会在每次规划前都考虑当前环境状态,然后进行action影响环境以此迭代以完成复杂任务,这样的框架可以让agent在当前状态下选取更合适的行动以达成目标。有很多框架基本上是将行动的成功与否、推理的有效性、失败的信息给纳入到环境状态中一起输入到规划程序中。

  • 人类反馈
    人类反馈是一个主观信号,能帮助agent很好地与人类价值观和喜好对齐,同时减少幻觉。比如agent直接向人类所要环境描述,这样可以很灵活地让用户将各种反馈融入agent的推理。

  • 模型反馈
    由agent内部模型给出反馈,比如agent做出一个结果交给内部LLM进行评估,再由评估对结果进行优化。基本上就是利用LLM对agent从规划步骤、到行动、到结果等各个阶段做评估,然后优化

行动模块

该模块位于最下游,直接与环境交互,受到profile、memory、planning三个模块的影响将agent的决策变为特定的动作输出。

动作目标

  1. 完成任务:动作为了完成任务而服务,每个行动都有助于完成最终任务。
  2. 交流:动作通常用来与人类或其它agent进行交流来分享信息或者取得合作
  3. 环境探索:在不熟悉的环境中进行探索扩大感知面,以达成探索和利用的平衡

动作生成

不同于传统LLM输入输出的高度相关,agent的行动来自于不同的决策和来源。

  1. 通过记忆采取行动:依据当前任务最近、最相关、最重要的记忆进行信息提取,由提取的信息驱动动作生成。或者从相似任务的成功经验中提取信息或者直接使用先前的动作
  2. 通过规划采取行动:依照已规划的步骤采取行动

动作空间

  • 外部工具
    LLM可能不适合于需要全面专业知识的领域,同时本身存在的幻觉问题也很难由其自身进行解决

    1. API:通过外部提供的API,依据需求生成api call,以达到网页查询、代码编译运行等等,
      文章还介绍了可以生成工具的agent。
    2. 数据库知识:集成外部数据或者知识库可以让agent在特定领域生成更加真实的动作。
    3. 外部模型:相较于API,外部模型用来处理更加复杂的任务,往往一个外部模型会与多个API相关
  • 内部知识
    agent仅仅依靠内部LLM学习到的知识作为动作的引导,以下是LLM能提供给agent的能力

    1. 规划能力:LLM具有一定分解任务的能力,以动作空间的视角来看应该就是将解构的复杂任务的子任务视为一个可执行动作。
    2. 交流能力:该能力使得agent运行得更像人类,agent可以通过互相交流以及反思来改善各自的行动
    3. 通用感知理解能力:LLM能够很好理解人类常识,这就让agent能模拟人类的日常生活并做出类人决策,也就是能较高层次地理解agent当前环境,以模拟高层次的行为,如社交行为、用户推荐等等。

动作影响

就是动作产生的影响。

  • 改变环境
  • 改变agent内部状态:更新记忆、进行新的规划、获取新知识
  • 引起新动作

agent能力获取

上述介绍的是如何使用结构设计使得LLM的能力更加类人,然而仅仅依靠硬件并不能有非常好的效果,还需要一定的软件指导,如技能、经验等等。

利用微调获取能力

最直接的方式就是使用与任务相关的数据集对LLM进行微调,但仅适合开源LLM

  • 使用人类标注数据集:人工生成标注的任务再由人工完成,但人工成本很高。
  • 使用LLM生成数据集:使用LLM完成标注任务,成本更低,生成的数据更多
  • 使用真实世界数据集:主要是开放世界场景下的任务场景,数据量很大,但是作者也讲了用爬虫爬取文本SQL对应数据,这个例子我觉得应当放到人类标注数据集中。

不利用微调获取能力

在LLM微调对于硬件会有一定的要求,但是LLM又能不依赖微调就很好地获取能力。这一方法适用于开源与闭源的LLM,同时这些方法的设计空间非常大,很难找到最优解或者通用的解决方案。

  • 提示工程
    正由于LLM强大的语言理解能力,仅依赖自然语言让LLM获取能力,就是描述agent所需要的能力,然后将其整合成prompt喂给LLM即可

  • 机制工程

    1. 试错(trial-and-error):agent先行动,由critic/人类/行动结果给出动作评价,然后依据评价改进动作。就很像refelxtion,对动作的反思。

    2. 众包(crowd-sourcing):多个agent进行讨论,每个agent首先给出同一问题的不同答案,然后系统根据agent的回答要求它们互相之间整合答案,迭代直到agent们达成共识

    3. 经验累积(experience accumulation):类似于试错,先进行尝试性动作,如果这个动作解决了问题就将这个动作记住,以后遇到相似问题就继续用这个动作。作者还介绍了自主探索与模仿人类演示的例子,在这之中构建agent知识。还有让人们给出agent行动的反馈并记录下来以优化后续的动作

    4. 自我驱动进化(self-driven evolution):自主设立目标,同样也依赖于探索环境并获取反馈,这样就能依赖自己的。也有利用知识蒸馏的思想,老师指导学生模型让学生模型获得提升。这里也提到了类似于众包的让多个agent解决单个agent无法解决的问题,将agent间的信息交换与知识共享视为总体的自我进化。

application

社会科学

  • 心理学:agent可以模拟心理学实验,提供心理健康支持等等,利用设置相应agent的profile模块对人进行模仿,产出与人类参与者相一致的结果。存在一些问题就是非常优秀的模型可能会产生过于完美的估计(超精度失真),过于准确而忽略了不确定性与变量,导致结果实质上是失效的。

  • 政治经济学:利用LLM进行意识检测和预测投票、理解政治言论的话语结构和说服要素,同样利用设置好的profile来模拟人的经济行为的活动

  • 社会模拟:之前的社会实验往往成本高、不道德、有可能不可行。利用LLM-based agent来模拟现实社区以探索改善社区法规、模拟人的日常生活、模拟有害信息在社交网络中的传播、儿童社交认知等等

  • 法理:模拟法官决策过程

  • 研究助手:生成文章摘要、提取关键词、制作详细研究脚本、提供新颖研究问题等等

自然科学

  • 文档数据管理:自然科学研究通常涉及大量文献的收集、组织和综合,这需要投入大量的时间和人力资源。agent可以利用网络信息、数据库工具等等以QA、提供实验计划等方式帮助研究人员进行文档数据得管理

  • 实验助手:利用agent可以独立行动的能力(自动设计、规划、执行科学实验步骤)进行自主的实验,其中也包含了利用工具进行网络信息收集以及相关文档信息提取,并用代码的形式进行必要的计算。

  • 自然科学教育:利用LLM的流畅交流能力,教育人们比如实验设计、方法、分析,一些科学原理、数学解题、代码编程等方面的教育

工程问题

  • 土木工程:设计、优化建筑的复杂结构。

  • 计算机科学与软件工程:提供了自动化编码、测试、调试和文档生成的潜力,可以利用multi-agent的方式为agent配置不同的角色,让agent系统自动完成软件工程开发流程。

  • 工业自动化:生产过程的智能规划与控制,与数字孪生结合,获取数字孪生系统提供的信息以完成不同级别的生产任务

  • 机器人与人工智能:最近的研究重点是增强自主代理在具体环境中进行规划、推理和协作的能力,研究主要是机器人的控制策略、技能学习。同时也介绍了方便研究人员开发自主应用的开源库和agent的开发工具,比如langchain、XLang等等,提供了一整套的LLM集成开发工具,可以自动执行编码、测试、调试和文档生成任务。还有跨平台的agent的命令管理工具、扩展LLM能力的工具开发平台

evaluation

主观评价
依赖人的评判,主要用在没有评估数据集或者很难建立评估标准的场景(测评agent的intelligence、用户友好程度),这个方法同样有着人工成本高、不高效的问题,但是因为使用LLM的agent本身就是期望能产出类人行为,因此我认为用人来评判也是非常有必要的。LLM不断发展,也有使用LLM来代替人工评价

  • 人工标注:人直接对agent的结果进行评分,或者对agent的结果依据不同要求如(公平性、无害性、忠诚度等等)进行排名

  • 图灵测试:要人来区分人的输出和agent的输出,用来评判一个agent的行动结果(文本,行为、情绪状态)有多类人

客观评价
客观评价是所有agent都需要经过的一道评价,基本很少有agent不进行客观评价,相较于主观评价,客观评价更具体且可以衡量。

  • 指标(metrics)

    1. 任务成功指标:衡量agent完成任务实现目标的能力(成功率、反馈/分数等等)
    2. 人类相似度指标:也是衡量agent有多像人(轨迹/位置准确性、对话相似性、人类反应的模仿程度)
    3. 效率指标:衡量agent的效率(规划长度、开发相关成本、推理速度、澄清对话数量:这个应该是衡量LLM说错多少次错话导致需要进行澄清)
  • 协议(protocols)
    这个是讲如何利用上述指标来评估agent在不同场景下的能力。

    1. 真实世界模拟:agent在游戏环境或者可交互的模拟环境中自主完成任务,然后利用上述指标进行评估,来衡量agent在场景中的能力。
    2. 社会评估:在团队协作任务中使用指标来评估agent的社交智力(合作能力、分析论证推理辩论能力、社交能力:合作,沟通,同理心等等)
    3. 多任务评估:用不同领域的任务来评估agent在开放环境下的能力
    4. 软件测试:在软件测试任务(生成测试用例、重现错误、调试代码等等)中使用各种指标来检测agent的能力
  • 基准测试(benchmarks)
    有了用什么指标(metrics)评估什么能力(protocols),一个用来作为基准的评估环境
    比如有ALFWorld、IGLU、Minecraft等等,基准多种多样,可以检测的能力也各不相同,我挺难进行总结的。

challenges

感觉就是LLM的问题带入到了agent的领域,在很多LLM综述对问题的讲解中我都看到了这几个方面。

角色扮演能力
agent与传统LLM相比,有一个profile模块,也就是需要扮演一个具有特定属性的人,虽然LLM被超大量的数据进行训练,那些很少被提及的角色依然是它们难以扮演的点。根据之前的研究,现在的LLM无法模拟人类的认知心理特征,也就是可能在对话场景中缺乏自我意识。

广义人类对齐
在传统的LLM问题中就讨论的非常多了,到了LLM-based agent中这一问题依然非常重要。在agent领域模拟任务中,描绘不同人的特征非常重要,描绘他们的消极特征可能更重要,因为模拟就是为了发现问题来解决问题,这在传统LLM中可能会因为价值对齐而回避掉对人消极特征的描述。

比如在犯罪场景模拟过程,agent需要制作一个炸弹,但这一要求的提出可能会被LLM模块因为人类价值对齐的原因而被回避,agent就无法完成这一任务,模拟过程也就失败了

提示鲁棒性
在传统LLM中就有着LLM对提示敏感的问题,只要稍微改变一下提示词LLM给出的反应就会天差地别,这在agent是要特别注意的,因为agent在于环境交互过程中获得的提示输入非常多样,同时不同模块之间也有着互动,可能模块会相互影响。

幻觉
问题就是模型倾向于以高置信度产生虚假信息,这在传统LLM中可能只是产生一段虚假回答,而在agent中因为agent的模块设计、提示机制等问题,可能会级联地使用LLM导致幻觉加重,比如在初次规划中产生了幻觉并在之后行动和再规划中因为重复调用产生的幻觉使得幻觉更加严重。

知识边界
有一种说法是LLM是世界压缩器,文中给出的例子是模拟用户选择电影,LLM可能已经有了电影内容的先验而无法正确模拟没看过这个电影的用户选择。

另外一个我的思考就是关于在我的世界中学习技能的agent框架,真正起作用的是框架的设计,还是agent调用的大模型本身就具有这个技能了。

效率
LLM反应本来就很慢,agent在引入LLM后动作的效率就会受到LLM推理的影响,更别说那种多次调用LLM来产生一条规划路径的例子,agent的效率更会受到调用次数的影响。