AlphaGen RL 训练参数说明
  PandaAI官方 10天前 105 0

AlphaGen RL 训练参数说明

概述

scripts/rl.py 是 AlphaGen 项目的核心训练脚本,使用强化学习(RL)和大语言模型(LLM)来自动发现和优化 Alpha 因子。本文档详细说明了 main 函数的所有参数。

参数详解

1. random_seeds

  • 类型: Union[int, Tuple[int]]
  • 默认值: 0
  • 作用: 设置随机种子,确保实验的可重现性
# 单个种子 python scripts/rl.py --random_seeds 42 # 多个种子(会依次运行多个实验) python scripts/rl.py --random_seeds "(0,1,2,3,4)"

说明:

  • 控制所有随机过程(PyTorch、NumPy、Python random)
  • 使用多个种子可以进行统计显著性测试
  • 建议生产环境使用多个种子来评估模型稳定性

2. pool_capacity

  • 类型: int
  • 默认值: 10
  • 作用: Alpha 池的最大容量,即同时保持的 Alpha 因子数量
python scripts/rl.py --pool_capacity 20

建议值:

  • 小规模实验: 5-10(快速测试)
  • 中等规模: 20-50(平衡性能和复杂度)
  • 大规模: 50-100(追求最佳性能)

影响:

  • 容量越大,模型越复杂,表达能力更强
  • 但也更容易过拟合,训练时间更长
  • 内存和计算资源需求随容量增加

3. instruments

  • 类型: str
  • 默认值: "csi300"
  • 作用: 指定股票数据集/指数
python scripts/rl.py --instruments "csi500"

可选值:

  • "csi300": 沪深300指数成分股
  • "csi500": 中证500指数成分股
  • "csi1000": 中证1000指数成分股
  • 其他自定义数据集名称

说明:

  • 不同指数的股票特征和市值分布不同
  • 建议根据投资策略选择合适的股票池

4. alphagpt_init

  • 类型: bool
  • 默认值: False
  • 作用: 是否使用预生成的 LLM Alpha 因子作为初始池
python scripts/rl.py --alphagpt_init True

说明:

  • 启用时会从 ./out/llm-tests/interaction 目录加载预生成的因子
  • 可以提供更好的初始化,加速训练收敛
  • 需要事先运行 LLM 生成初始因子池

使用场景:

  • 有预训练的 LLM 因子时
  • 希望在已有基础上进一步优化时

5. use_llm

  • 类型: bool
  • 默认值: True(注意:代码中默认为 True)
  • 作用: 是否在训练过程中使用 LLM 生成新的 Alpha 因子
python scripts/rl.py --use_llm True

说明:

  • 启用后会定期调用 LLM 生成新因子来替换表现差的因子
  • 结合了 RL 的优化能力和 LLM 的创造力
  • 需要配置 OpenAI API 或其他 LLM 服务

优势:

  • 能够发现 RL 难以探索到的新颖因子
  • 提高因子多样性
  • 可能获得更好的最终性能

6. drop_rl_n

  • 类型: int
  • 默认值: 10
  • 作用: 调用 LLM 前丢弃的最差 Alpha 因子数量
python scripts/rl.py --use_llm True --drop_rl_n 5

说明:

  • 只在 use_llm=True 时生效
  • 保留表现最好的因子,用 LLM 生成的新因子替换最差的
  • 值应该小于 pool_capacity

建议设置:

  • pool_capacity=10: drop_rl_n=3-5
  • pool_capacity=20: drop_rl_n=5-8
  • pool_capacity=50: drop_rl_n=10-15

7. steps

  • 类型: Optional[int]
  • 默认值: None(根据 pool_capacity 自动设置)
  • 作用: 总训练步数
python scripts/rl.py --steps 50000

自动设置规则:

  • pool_capacity=10200,000
  • pool_capacity=20250,000
  • pool_capacity=50300,000
  • pool_capacity=100350,000

建议:

  • 快速测试: 5,000-10,000 步
  • 开发调试: 20,000-50,000 步
  • 正式训练: 100,000-500,000 步

8. llm_every_n_steps

  • 类型: int
  • 默认值: 25000
  • 作用: 每隔多少步调用一次 LLM
python scripts/rl.py --use_llm True --llm_every_n_steps 10000

说明:

  • 只在 use_llm=True 时生效
  • 频率影响 LLM 参与程度和计算成本
  • 过于频繁可能导致训练不稳定

建议设置:

  • 高频调用: 5,000-10,000 步(更多 LLM 参与)
  • 中频调用: 15,000-25,000 步(平衡性能和成本)
  • 低频调用: 30,000-50,000 步(主要依赖 RL)

常用参数组合

🚀 快速测试

python scripts/rl.py \ --pool_capacity 5 \ --steps 5000 \ --use_llm False

🔬 开发调试

python scripts/rl.py \ --pool_capacity 10 \ --steps 20000 \ --use_llm True \ --llm_every_n_steps 5000

🎯 标准训练

python scripts/rl.py \ --pool_capacity 20 \ --use_llm True \ --llm_every_n_steps 15000 \ --drop_rl_n 8

🏆 高性能训练

python scripts/rl.py \ --pool_capacity 50 \ --steps 300000 \ --use_llm True \ --llm_every_n_steps 20000 \ --drop_rl_n 15

📊 多种子实验

python scripts/rl.py \ --random_seeds "(0,1,2,3,4)" \ --pool_capacity 20 \ --steps 100000 \ --use_llm True

🔄 LLM 初始化训练

python scripts/rl.py \ --alphagpt_init True \ --pool_capacity 15 \ --steps 150000 \ --use_llm True

输出文件说明

训练完成后,会在 ./out/results/{experiment_name}/ 目录下生成:

  • training_curves.png: 训练过程可视化图表
  • training_history.json: 完整训练历史数据
  • {steps}_steps.zip: 模型检查点
  • {steps}_steps_pool.json: Alpha 池状态
  • llm.log: LLM 调用日志(如果使用 LLM)

性能优化建议

内存优化

  • 减少 pool_capacity
  • 使用较小的 batch_size
  • 启用梯度检查点

速度优化

  • 使用 GPU 训练
  • 减少 llm_every_n_steps 频率
  • 并行运行多个实验

效果优化

  • 使用多个随机种子
  • 调整 L1 正则化系数
  • 尝试不同的 drop_rl_n 设置

故障排除

常见问题

  1. 内存不足

    • 减少 pool_capacity
    • 减少 batch_size
  2. 训练不收敛

    • 检查数据质量
    • 调整学习率
    • 增加训练步数
  3. LLM 调用失败

    • 检查 API 密钥
    • 确认网络连接
    • 查看 llm.log 日志
  4. IC 下降

    • 增加正则化
    • 减少训练步数
    • 检查数据泄露

最佳实践

  1. 从简单开始: 先用小的 pool_capacitysteps 测试
  2. 监控训练: 定期查看生成的图表和日志
  3. 多次实验: 使用不同随机种子验证结果稳定性
  4. 参数调优: 根据结果逐步调整参数
  5. 资源管理: 合理分配计算资源,避免过度使用

最后一次编辑于 10天前 0

暂无评论

推荐阅读