当前位置: 首页 > java >正文

【深度强化学习 DRL 快速实践】逆向强化学习算法 (IRL)

Inverse Reinforcement Learning (IRL) 详解

什么是 Inverse Reinforcement Learning?

在传统的强化学习 (Reinforcement Learning, RL) 中,奖励函数是已知的,智能体的任务是学习一个策略来最大化奖励

而在逆向强化学习 (Inverse Reinforcement Learning, IRL) 中,情况相反:

  • 我们不知道奖励函数 缺失的
  • 但是我们有专家的示范轨迹(比如专家怎么开车、怎么走路): τ = ( s 0 , a 0 , s 1 , a 1 , … , s T ) \tau = (s_0, a_0, s_1, a_1, \dots, s_T) τ=(s0,a0,s1,a1,,sT)
  • 目标是:推断出奖励函数,使得专家行为在该奖励下是最优的

简单来说,IRL 是"从专家行为中推断动机"

  • Initialize an actor
  • In each iteration
    • The actor interacts with the environrment to obtain some trajectories
    • Define a reward functlon, which makes thetrajectories of the teacher better than the actor
    • The actor learns to maximize the reward based on the new reward function
  • Output the reward function and the actor learned from the reward function

IRL算法之 GAIL 算法详解

GAIL(生成对抗模仿学习)结合了:生成对抗网络 GAN(Generator 对抗 Discriminator)和 强化学习 Policy Gradient(策略梯度)

  • 让智能体学会产生像专家一样的轨迹,但不直接学习奖励函数,只通过模仿专家行为来训练策略
判别器 (Discriminator) :试图区分 “专家轨迹” 和 “生成器轨迹”

判别器的目标是最大化对数似然:判别器希望对于专家数据 expert 输出接近 1,对于生成数据 policy 输出接近 0
max ⁡ D E expert [ log ⁡ D ( s , a ) ] + E policy [ log ⁡ ( 1 − D ( s , a ) ) ] \max_D \mathbb{E}_{\text{expert}} [\log D(s, a)] + \mathbb{E}_{\text{policy}} [\log (1 - D(s, a))] DmaxEexpert[logD(s,a)]+Epolicy[log(1D(s,a))]

生成器(策略网络 Policy):试图“欺骗”判别器,让判别器以为它生成的轨迹是专家生成的

生成器的目标是最小化:
min ⁡ π E τ ∼ π [ log ⁡ ( 1 − D ( s , a ) ) ] \min_{\pi} \mathbb{E}_{\tau \sim \pi} [\log (1 - D(s, a))] πminEτπ[log(1D(s,a))]

这其实可以等价强化学习问题,奖励信号变成了:
r ( s , a ) = − log ⁡ ( 1 − D ( s , a ) ) r(s, a) = - \log (1 - D(s, a)) r(s,a)=log(1D(s,a))

  • 这样,跟标准的 policy gradient 非常类似,只不过奖励是来自判别器

GAIL 简单代码示例

import gym
from stable_baselines3 import PPO
from imitation.algorithms.adversarial import GAIL
from imitation.data.types import TrajectoryWithRew
from imitation.data import rollout# 1. 创建环境
env = gym.make("CartPole-v1")# 2. 加载或创建专家模型
expert = PPO("MlpPolicy", env, verbose=0)
expert.learn(10000)# 3. 收集专家轨迹数据
trajectories = rollout.rollout(expert,env,rollout.make_sample_until(min_timesteps=None, min_episodes=20)
)# 4. 创建新模型作为 actor
learner = PPO("MlpPolicy", env, verbose=1)# 5. 使用 GAIL 进行逆强化学习训练
gail_trainer = GAIL(venv=env,demonstrations=trajectories,gen_algo=learner
)
gail_trainer.train(10000)# 6. 测试训练后的模型
obs = env.reset()
for _ in range(1000):action, _states = learner.predict(obs, deterministic=True)obs, reward, done, info = env.step(action)env.render()if done:obs = env.reset()env.close()
http://www.xdnf.cn/news/1852.html

相关文章:

  • Servlet小结
  • 【高中数学/古典概率】从1~2000中随机抽一个数,问取到的数既不被8整除,又不被12整除的概率是多少?
  • 鸿蒙-试一下属性字符串:除了Span之外,如何在同一个Text组件中展示不同样式的文字
  • ADVB协议同步
  • 破界出海:HR SaaS平台的全球化实践与组织效能跃升
  • 基于ssm的共享型汽车租赁管理系统(源码+数据库+万字文档+ppt)
  • cat查看当前目录下所有文件内容
  • 河北省大数据应用创新大赛样题
  • C++----模拟实现string
  • 力扣-234.回文链表
  • Linux查看可用端口号码命令
  • SIEMENS PLC程序解读 ST 语言 车型识别
  • PHP框架在微服务迁移中能发挥什么作用?
  • 【C/C++】从源码到执行:程序运行的完整生命周期解析
  • 神奇PG SQL数据库,配合简单代码就能巧妙实现复杂的功能
  • 专家系统的知识获取、检测与组织管理——基于《人工智能原理与方法》的深度解析
  • 别学了,打会王者吧
  • tcp 和http 网络知识
  • 七、web自动化测试03
  • 大模型时代的深度学习框架
  • C语言里位操作的应用
  • 前端让一个div的高度为屏幕的高度减去其他所有元素的高度(包括它们的margin和padding),并自适应。
  • Python笔记:VS2013编译Python-3.5.10
  • 芯岭技术XL32F003单片机 32位Cortex M0+ MCU简单介绍 性能优异
  • 面向智能家居安全的异常行为识别与应急联动关键技术研究与系统实现(源码+论文+部署讲解等)
  • 软考【网络工程师】2023年5月上午题答案解析
  • dedecms织梦arclist标签noflag属性过滤多个参数
  • 2025年GPLT团体程序设计天梯赛L1-L2
  • RPCRT4!NdrPointerUnmarshall函数之ADVAPI32!LsarQueryInformationPolicy函数调用的一个例子
  • 【ESP32-IDF笔记】20-配置以太网网络(W5500)