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=10
→200,000
步pool_capacity=20
→250,000
步pool_capacity=50
→300,000
步pool_capacity=100
→350,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
设置
故障排除
常见问题
-
内存不足
- 减少
pool_capacity
- 减少
batch_size
- 减少
-
训练不收敛
- 检查数据质量
- 调整学习率
- 增加训练步数
-
LLM 调用失败
- 检查 API 密钥
- 确认网络连接
- 查看
llm.log
日志
-
IC 下降
- 增加正则化
- 减少训练步数
- 检查数据泄露
最佳实践
- 从简单开始: 先用小的
pool_capacity
和steps
测试 - 监控训练: 定期查看生成的图表和日志
- 多次实验: 使用不同随机种子验证结果稳定性
- 参数调优: 根据结果逐步调整参数
- 资源管理: 合理分配计算资源,避免过度使用