Project Icon

rliable

提升强化学习和机器学习评估可靠性的Python库

rliable是一个开源Python库,旨在提高强化学习和机器学习基准测试的评估可靠性。该库支持分层自举置信区间、性能曲线和聚合指标等功能,即使在数据有限的情况下也能得出可靠结论。rliable提供交互式Colab演示和多个主流基准测试数据,致力于克服现有评估方法的局限性,增强结果的可重复性和统计稳健性。

在 Colab 中打开 网站 博客

rliable 是一个开源 Python 库,用于对强化学习和机器学习基准进行可靠评估,即使只有少量运行结果。

要求当前评估方法我们的建议
总体性能的不确定性点估计:
  • 忽视统计不确定性
  • 阻碍结果可重复性
使用分层自助抽样置信区间 (CI) 的区间估计
跨任务和运行的性能变异性任务平均分数表:
  • 超过几个任务后难以理解
  • 经常省略标准差
  • 对多峰和重尾分布的描述不完整
分数分布 (性能曲线):
  • 显示跨任务所有运行的分数尾部分布
  • 允许定性比较
  • 易于读取任何分数百分位
总结基准性能的汇总指标均值:
  • 通常被异常任务的性能主导
  中位数:
  • 统计效率低(需要大量运行才能声称有改进)
  • 整体性能指标不佳:近一半任务得分为 0 也不会改变
所有运行的四分位均值 (IQM):
  • 中间 50% 组合运行的性能
  • 对异常分数稳健,但统计效率高于中位数
为展示性能提升的其他方面,报告改进概率最优性差距

rliable 提供以下支持:

  • 分层自助抽样置信区间 (CI)
  • 性能曲线(带绘图功能)
  • 汇总指标
    • 所有运行的四分位均值 (IQM)
    • 最优性差距
    • 改进概率

交互式 Colab

我们在 bit.ly/statistical_precipice_colab 提供了一个 Colab,展示了如何使用该库,并提供了在广泛使用的基准(包括 Atari 100k、ALE、DM Control 和 Procgen)上发布算法的示例。

Atari 100k、ALE、DM Control 和 Procgen 的单次运行数据

您可以通过此公共 GCP 存储桶访问单次运行的数据(您可能需要使用 Gmail 账户登录才能使用 Gcloud):https://console.cloud.google.com/storage/browser/rl-benchmark-data。 上述交互式 Colab 还允许您以编程方式访问数据。

论文

欲了解更多详情,请参阅随附的 NeurIPS 2021 论文(杰出论文奖): Deep Reinforcement Learning at the Edge of the Statistical Precipice

安装

要安装 rliable,请运行:

pip install -U rliable

要安装 rliable 的最新版本作为包,请运行:

pip install git+https://github.com/google-research/rliable

要导入 rliable,我们建议:

from rliable import library as rly
from rliable import metrics
from rliable import plot_utils

带有 95% 分层自助抽样置信区间的汇总指标

IQM、最优性差距、中位数、均值
algorithms = ['DQN (Nature)', 'DQN (Adam)', 'C51', 'REM', 'Rainbow',
              'IQN', 'M-IQN', 'DreamerV2']
# 加载 ALE 分数作为字典,将算法映射到其人类归一化
# 分数矩阵,每个矩阵的大小为 `(运行次数 x 游戏数)`。
atari_200m_normalized_score_dict = ...
aggregate_func = lambda x: np.array([
  metrics.aggregate_median(x),
  metrics.aggregate_iqm(x),
  metrics.aggregate_mean(x),
  metrics.aggregate_optimality_gap(x)])
aggregate_scores, aggregate_score_cis = rly.get_interval_estimates(
  atari_200m_normalized_score_dict, aggregate_func, reps=50000)
fig, axes = plot_utils.plot_interval_estimates(
  aggregate_scores, aggregate_score_cis,
  metric_names=['中位数', 'IQM', '均值', '最优性差距'],
  algorithms=algorithms, xlabel='人类归一化分数')
改进概率
# 将ProcGen分数加载为包含我们想要比较的算法对归一化分数矩阵对的字典
procgen_algorithm_pairs = {.. , 'x,y': (score_x, score_y), ..}
average_probabilities, average_prob_cis = rly.get_interval_estimates(
  procgen_algorithm_pairs, metrics.probability_of_improvement, reps=2000)
plot_utils.plot_probability_of_improvement(average_probabilities, average_prob_cis)

样本效率曲线

algorithms = ['DQN (Nature)', 'DQN (Adam)', 'C51', 'REM', 'Rainbow',
              'IQN', 'M-IQN', 'DreamerV2']
# 将ALE分数加载为字典,将算法映射到其在所有2亿帧中的人类归一化分数矩阵,
# 每个矩阵大小为`(运行次数 x 游戏数量 x 200)`,其中每百万帧记录一次分数。
ale_all_frames_scores_dict = ...
frames = np.array([1, 10, 25, 50, 75, 100, 125, 150, 175, 200]) - 1
ale_frames_scores_dict = {algorithm: score[:, :, frames] for algorithm, score
                          in ale_all_frames_scores_dict.items()}
iqm = lambda scores: np.array([metrics.aggregate_iqm(scores[..., frame])
                               for frame in range(scores.shape[-1])])
iqm_scores, iqm_cis = rly.get_interval_estimates(
  ale_frames_scores_dict, iqm, reps=50000)
plot_utils.plot_sample_efficiency_curve(
    frames+1, iqm_scores, iqm_cis, algorithms=algorithms,
    xlabel=r'帧数(百万)',
    ylabel='IQM人类归一化分数')

性能剖面

# 将ALE分数加载为字典,将算法映射到其人类归一化分数矩阵,
# 每个矩阵大小为`(运行次数 x 游戏数量)`。
atari_200m_normalized_score_dict = ...
# 人类归一化分数阈值
atari_200m_thresholds = np.linspace(0.0, 8.0, 81)
score_distributions, score_distributions_cis = rly.create_performance_profile(
    atari_200m_normalized_score_dict, atari_200m_thresholds)
# 绘制分数分布
fig, ax = plt.subplots(ncols=1, figsize=(7, 5))
plot_utils.plot_performance_profiles(
  score_distributions, atari_200m_thresholds,
  performance_profile_cis=score_distributions_cis,
  colors=dict(zip(algorithms, sns.color_palette('colorblind'))),
  xlabel=r'人类归一化分数 $(\tau)$',
  ax=ax)

上述剖面也可以使用非线性缩放进行绘制,如下所示:

plot_utils.plot_performance_profiles(
  perf_prof_atari_200m, atari_200m_tau,
  performance_profile_cis=perf_prof_atari_200m_cis,
  use_non_linear_scaling=True,
  xticks = [0.0, 0.5, 1.0, 2.0, 4.0, 8.0]
  colors=dict(zip(algorithms, sns.color_palette('colorblind'))),
  xlabel=r'人类归一化分数 $(\tau)$',
  ax=ax)

依赖项

代码在Python>=3.7下测试,并使用以下包:

  • arch == 5.3.0
  • scipy >= 1.7.0
  • numpy >= 0.9.0
  • absl-py >= 1.16.4
  • seaborn >= 0.11.2

引用

如果您发现这个开源发布有用,请在您的论文中引用:

@article{agarwal2021deep,
  title={Deep Reinforcement Learning at the Edge of the Statistical Precipice},
  author={Agarwal, Rishabh and Schwarzer, Max and Castro, Pablo Samuel
          and Courville, Aaron and Bellemare, Marc G},
  journal={Advances in Neural Information Processing Systems},
  year={2021}
}

免责声明:这不是谷歌的官方产品。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号