CS285-Deep Reinforcement learning-Homework

project

  1. https://github.com/igormolybog/cs285-project # Reward function adaptation: maze env
  2. https://github.com/xd00099/CS285-DeepReinforcementLearning-Berkeley 作业答案
  3. https://github.com/xd00099/RL-Final-Project 强化学习 课设
  4. https://github.com/FelipeMarcelino/CS285-Berkeley-Reinforcement-Learning?tab=readme-ov-file
  5. https://github.com/bri25yu/rl
  6. https://github.com/bowieshi/UCB_CS285?tab=readme-ov-file
  7. https://gitee.com/kin-zhang/drl-hwprogramm/blob/solution/hw2/solution.md
  8. https://github.com/oldboy818/CS285
  9. https://github.com/Gkbinqi/CS106L
  10. https://github.com/Light-yzc/CS285-Fall23
  11. https://github.com/Bubble252/CS85_hw 有答案
    image-10.png|550

HW1

python cs285/scripts/run_hw1.py --expert_policy_file cs285/policies/experts/Ant.pkl --env_name Ant-v4 --exp_name bc_ant --n_iter 1 --expert_data cs285/expert_data/expert_data_Ant-v4.pkl --video_log_freq -1

Q1

主要是上课讲的 行为克隆的误差
file-20251110000441020.png

Q1.1

file-20251110000503724.png|575
file-20251110000522907.png|600

Q1.2

Q3

1. Analysis 理论题(写在报告里)

问题场景:离散 MDP,horizon 为 T,有 expert policy π*,你学到一个模仿策略 π_θ。
他们给了一个条件:在 expert 访问到的状态分布下,模仿策略出错的概率(选到和 expert 不同的 action)平均不超过 ε。

你要证明两件事:

(1) 证明状态分布的差异界

因为你在 expert 的状态分布上出错概率最多 ε,所以整个 rollout 过程中,自己的状态分布和 expert 的状态分布不会差太多,差距在 O(Tε) 量级。

Hints 里说了:

这部分是推导过程 + 最后不等式,写在报告里。

(2) 证明回报差距的量级

定义了回报:

[
J(\pi) = \sum_{t=1}^T \mathbb{E}{s_t \sim p\pi} [r(s_t)], \quad |r(s_t)| \le R_{\max}
]

你要分两种情况讨论:

  1. (a) 奖励只在最后一步有(t < T 时 r(s_t)=0)
    证明:
    [
    J(\pi^*) - J(\pi_\theta) = O(T\varepsilon)
    ]

    直觉:前面时间步错一点会影响到最后的状态分布,但整体差距仍是 O(Tε)。

  2. (b) 奖励每一步都可能有
    证明:
    [
    J(\pi^*) - J(\pi_\theta) = O(T^2\varepsilon)
    ]

    直觉:

    • 每一步状态分布都有 O(tε) 级别的误差;

    • 把所有时间步累加,会出现 T²。

👉 这部分是纯理论推导题,写数学步骤和结论在报告中。


2. Editing Code 要改哪些代码(你基本已经做完了)

作业要求:把带 TODO 的地方补完,主要是这三个文件:

  1. scripts/run_hw1.py

    • run_training_loop 里 BC 和 DAgger 的逻辑(你已经有了):

      • 迭代训练循环

      • 第 0 轮用专家数据(BC)

      • 后面几轮用环境 rollouts + expert relabel(DAgger)

      • 从 replay buffer 里 sample batch 做训练

      • logging(Eval_AverageReturn 等)

  2. policies/MLP_policy.py

    • 实现:

      • forward:给定 obs 输出一个 Normal(mean, std) 的分布(你已经写成了 mean_net + logstd)

      • update:做 supervised learning,用 expert 的 (s, a) 数据最大化 log π(a|s)(你用的是 -log_prob 的 sum)

      • 额外你补的 get_action:从分布中 sample 动作,用在 sample_trajectory 里。

  3. infrastructure/utils.py

    • 实现 sample_trajectory

      • reset env

      • 循环:

        • policy.get_action(ob) 得到 action

        • env.step(ac) 得到 next_ob, reward, done

        • 存进 list(obs, acs, rewards, next_obs, terminals, image_obs)

        • 到 done 或到 max_path_length 就结束

    • 这个你也已经写了。

你现在代码能成功跑 Ant-v4 BC,说明「Editing Code」这一步 已经基本完成


3. Behavioral Cloning(实验 + 报告)

这一节是「只用 expert 数据做监督学习」的实验部分。

3.1 运行 BC,并比较两个任务

要求你:

  1. 选择两个环境

    • 一个环境上,BC 能达到 expert 性能的 ≥30%

    • 另一个环境上,BC 效果明显差(比如远低于 expert)。

    官方示例命令(Ant)是:

    python cs285/scripts/run_hw1.py \
      --expert_policy_file cs285/policies/experts/Ant.pkl \
      --env_name Ant-v4 --exp_name bc_ant --n_iter 1 \
      --expert_data cs285/expert_data/expert_data_Ant-v4.pkl \
      --video_log_freq -1
    
  2. 设置 eval 批量

    • 要让 eval_batch_size > ep_len,这样每次 eval 会收集多条轨迹,而不是只 1 条。

    • 比如 ep_len=1000, eval_batch_size=5000,那么 Eval_AverageReturn/StdReturn 就是约 5 条 traj 的均值和标准差。

  3. 跑实验,记录结果

    • 对每个环境:

      • 训练一次 BC(可能可以换多种种子,取平均更稳)

      • 从 log/TensorBoard 里拿 Eval_AverageReturnEval_StdReturn

    • 把结果整理成一个表格(Table 1),写在报告里:

      • 列:环境名、Expert 回报、BC 回报均值、BC Std、ep_len、eval_batch_size、网络结构(n_layers, size)、训练步数等。
  4. 在文字里简要说明

    • 哪个任务 BC 有效、哪个任务不行;

    • 同样的超参下,对比它们表现差异。


3.2 调一个超参数并画性能曲线

你要选 一个会影响 BC 性能的超参数,例如:

然后:

  1. 固定一个环境(比如 Ant-v4 或者作业要求中的某个),只改变这一个超参数。

  2. 对每个超参数取值:

    • 跑一遍 BC

    • 记录 Eval_AverageReturn,StdReturn

  3. 在报告里画一张图(Figure 1):

    • x 轴:超参数的不同取值(比如数据量、训练轮数)

    • y 轴:BC 的平均回报(可以加误差棒显示 Std)

  4. 图的 caption 里写明:

    • 选的是哪个超参数

    • 选择它的理由

    • 其他超参大致保持一致


4. DAgger(实验 + 学习曲线)

这一节是基于你同一套代码,通过改参数开启 DAgger。

4.1 运行 DAgger

给了一个示例命令:

python cs285/scripts/run_hw1.py \
  --expert_policy_file cs285/policies/experts/Ant.pkl \
  --env_name Ant-v4 --exp_name dagger_ant --n_iter 10 \
  --do_dagger --expert_data cs285/expert_data/expert_data_Ant-v4.pkl \
  --video_log_freq -1

关键区别:

你要对之前 BC 用过的两个环境都跑 DAgger

4.2 画 DAgger 的学习曲线

对每个环境,你要画一张图(Figure 2),横轴是 DAgger 的 iteration:

并且在图上画三条 “横线” 作为对比:

  1. Expert 的平均回报(可以用给你的 expert policy 直接跑几条轨迹估一下)

  2. 纯 BC 的平均回报(只训练初始 BC,不做 DAgger)

  3. 每一轮 DAgger 后 policy 的平均回报(点 / 线)

图的 caption 里说明:


5. Extra Credit: SwitchDAgger(可选加分)

这一部分是理论题拓展,不是代码。你可以做也可以不做:

如果你做了,要把推导写在报告里,对应 5.1–5.4。


6. Discussion(几句就行)

简单回答两个问题(写在报告末尾):

  1. 每一部分大概花了多少时间(代码、理论、跑实验……可以概略写)。

  2. 对作业的反馈:难/易、哪里不清楚、哪里可以改进等等。


7. Turning it in 提交方式

你要提交两样东西:

7.1 报告 PDF

内容包括:

7.2 代码 + log(zip)

作业希望你的 submit.zip 结构大概是:

submit.zip
  run_logs/
    q1_...   # BC 的实验日志文件夹(例如 q1_bc_ant_...)
    q2_...   # DAgger 的实验日志文件夹
  cs285/     # 全部 .py 代码(你填好的)
  README.md  # 写清楚怎么运行你的实验命令

注意:


如果你想要我帮你做的下一步

我可以帮你:

你可以直接跟我说:

帮我选环境 + 写一个表格/图该怎么组织

我就按你现在已经跑通的 Ant-v4 帮你搭好一整套框架。