Stable Baselines/RL算法/A2C

本文档介绍了Stable Baselines库中的A2C(Asynchronous Advantage Actor Critic)算法,它是一个同步、确定性的A3C变体,通过多进程避免使用重播缓存。A2C适用于迭代策略和多进程环境,如Atari游戏和Mujoco环境。内容包括A2C模型的参数、方法和训练过程,如learn()、predict()等,并提供了预训练和加载模型的说明。
Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

Stable Baselines官方文档中文版 Github 优快云
尝试翻译官方文档,水平有限,如有错误万望指正

Asynchronous Advantage Actor Critic (A3C)的同步、确定性变体。它使用多个workers来避免使用重播缓存。

  • 要点核心

  • 适用情况

    • 迭代策略:✔️

    • 多进程:✔️

    • Gym空间:

      SpaceActionObservation
      Discrete✔️✔️
      Box✔️✔️
      MultiDiscrete✔️✔️
      MultiBinary✔️✔️
  • 案例

    用4进程在CartPole-v1上训练A2C agent

    import gym
    
    from stable_baselines.common.policies import MlpPolicy
    from stable_baselines.common.vec_env import SubprocVecEnv
    from stable_baselines import A2C
    
    # multiprocess environment
    n_cpu = 4
    env = SubprocVecEnv([lambda: gym.make('CartPole-v1') for i in range(n_cpu)])
    
    model = A2C(MlpPolicy, env, verbose=1)
    model.learn(total_timesteps=25000)
    model.save("a2c_cartpole")
    
    del model # remove to demonstrate saving and loading
    
    model = A2C.load("a2c_cartpole")
    
    obs = env.reset()
    while True:
        action, _states = model.predict(obs)
        obs, rewards, dones, info = env.step(action)
        env.render()
    
  • 参数

    stable_baselines.a2c.A2C(policy, env, gamma=0.99, n_steps=5, vf_coef=0.25, ent_coef=0.01, max_grad_norm=0.5, learning_rate=0.0007, alpha=0.99, epsilon=1e-05, lr_schedule='constant', verbose=0, tensorboard_log=None, _init_setup_model=True, policy_kwargs=None, full_tensorboard_log=False)
    

    A2C(Adavantage Actor Critic)模型类, https://arxiv.org/abs/1602.01783

    参数数据类型意义
    policyActorCriticPolicy or str所用策略模型(MlpPolicy, CnnPolicy, CnnLstmPolicy, …)
    envGym environment or str学习所用环境(如果注册在Gym,可以是str)
    gammafloat贴现因子
    n_stepsint运行环境每次更新所用时间步(例如:当n_env是同时运行的环境副本数量时,batch=n_steps*n_env)
    vf_coeffloat用于损失函数的价值函数系数
    ent_coeffloat损失函数的信息熵系数
    max_grad_normfloat梯度裁剪的最大值
    learning_ratefloat学习率
    alphafloatRMSProp衰减参数(默认:0.99)
    epsilonfloatRMSProp epsilon(稳定RMSProp更新中分母的平方根计算)(默认1e-5)
    lr_schedulestr更新学习率的调度程序类型(‘linear’, ‘constant’, ‘double_linear_con’, ‘middle_drop’ or ‘double_middle_drop’)
    verboseint日志信息级别:0None;1训练信息;2tensorflow调试
    tensorboard_logstrtensorboard的日志位置(如果时None,没有日志)
    _init_setup_modelbool实例化创建过程中是否建立网络(只用于载入)
    policy_kwargsdict创建过程中传递给策略的额外参数
    full_tensorboard_logbool当使用tensorboard时,是否记录额外日志(这个日志会占用大量空间)
    • action_probability(observation, state=None, mask=None, actions=None, logp=False)

      如果actionsNone,那么从给定观测中获取模型的行动概率分布。

      输出取决于行动空间:

      • 离散:每个可能行动的概率
      • Box:行动输出的均值和标准差

      然而,如果actions不是None,这个函数会返回给定行动与参数(观测,状态,…)用于此模型的概率。对于离散行动空间,它返回概率密度;对于连续行动空间,则是概率密度。这是因为在连续空间,概率密度总是0,更详细的解释见 http://blog.christianperone.com/2019/01/

      参数数据类型意义
      observationnp.ndarray输入观测
      statenp.ndarray最新状态(可以时None,用于迭代策略)
      masknp.ndarray最新掩码(可以时None,用于迭代策略)
      actionsnp.ndarray(可选参数)为计算模型为每个给定参数选择给定行动的似然。行动和观测必须具有相同数目(None返回完全动作分布概率)
      logpbool(可选参数)当指定行动,返回log空间的概率。如果action是None,则此参数无效

      返回:np.ndarray)模型的(log)行动概率

    • get_env()

      返回当前环境(如果没有定义可以是None

      返回:Gym Environment)当前环境

    • get_parameter_list()

      获取模型参数的tensorflow变量

      包含连续训练(保存/载入)所用的所有必要变量

      返回:listtensorflow变量列表

    • get_parameters()

      获取当前模型参数作为变量名字典 -> ndarray

      返回:(OrderedDict)变量名字典 -> 模型参数的ndarray

    • learn(total_timesteps, callback=None, seed=None, log_interval=100, tb_log_name=‘A2C’, reset_num_timesteps=True)

      返回一个训练好的模型

      参数数据类型意义
      total_timestepsint训练用样本总数
      seedint训练用初始值,如果None:保持当前种子
      callbackfunction (dict, dict)与算法状态的每步调用的布尔函数。采用局部或全局变量。如果它返回false,训练被终止
      log_intervalint记录日志之前的时间步数
      tb_log_namestr运行tensorboard日志的名称
      reset_num_timestepsbool是否重置当前时间步数(日志中使用)

      返回:(BaseRLModel) 训练好的模型

    • **classmethod load(load_path, env=None, kwargs)

      从文件中载入模型

      参数数据类型意义
      load_pathstr or file-like文件路径
      envGym Envrionment载入模型运行的新环境(如果你只是从训练好的模型来做预测可以是None)
      kwargs载入过程中能改变模型的额外
    • load_parameters(load_path_or_dict, exact_match=True)

      从文件或字典中载入模型参数

      字典关键字是tensorflow变量名,可以用get_parameters函数获取。如果exact_matchTrue,字典应该包含所有模型参数的关键字,否则报错RunTimeError。如果是False,只有字典包含的变量会被更新。

      此函数并不载入agent的超参数

      警告:

      此函数不更新训练器/优化器的变量(例如:momentum)。因为使用此函数的这种训练可能会导致低优化结果

      参数数据类型意义
      load_path_or_dictstr or file-like保存参数或变量名字典位置->载入的是ndarrays
      exact_matchbool如果是True,期望载入关键字包含模型所有变量的字典;如果是False,只载入字典中提及的参数。默认True
    • predict(observation, state=None, mask=None, deterministic=False)

      获取从参数得到的模型行动

      参数数据类型意义
      observationnp.ndarray输入观测
      statenp.ndarray最新状态(可以时None,用于迭代策略)
      masknp.ndarray最新掩码(可以时None,用于迭代策略)
      deterministicbool是否返回确定性的行动

      返回:(np.ndarray, np.ndarray) 模型的行动和下一状态(用于迭代策略)

    • pretrain(dataset, n_epochs=10, learning_rate=0.0001, adam_epsilon=1e-08, val_interval=None)

      用行为克隆预训练一个模型:在给定专家数据集上的监督学习

      目前只支持Box和离散空间

      参数数据类型意义
      datasetExpertDataset数据集管理器
      n_epochsint训练集上的迭代次数
      learning_ratefloat学习率
      adam_epsilonfloatadam优化器的 ϵ \epsilon ϵ
      val_intervalint报告每代的训练和验证损失。默认最大纪元数的十分之一

      返回:(BaseRLModel) 预训练好的模型

    • save(save_path)

      保存当前参数到文件

      参数数据类型意义
      save_pathstr or file-like object保存位置
    • set_env(env)

      检查环境的有效性,如果是一致的,将其设置为当前环境

      参数数据类型意义
      envGym Environmentx学习一个策略的环境
    • setup_model()

      创建训练模型所必须的函数的tensorflow图表

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 使用 Stable Baselines3 进行量化投资中的强化学习应用 Stable Baselines3 是一种强大的 Python 库,专门用于简化强化学习的应用开发过程。它支持多种经典的强化学习算法,如 DQN、PPO 和 A2C 等,并提供了一个易于使用的接口来构建和测试强化学习模型[^1]。 #### 1. 定义环境 在量化投资场景下,定义一个合适的交易环境至关重要。通常情况下,该环境会模拟市场行为并允许智能体执行买入/卖出操作。可以利用 `gym` 或其扩展库(如 `stable-baselines3-contrib` 中的金融模块)创建自定义环境。以下是典型的投资交易环境设计要点: - **观察空间**: 包括历史价格序列、技术指标(如 RSI、MACD)、宏观经济变量等。 - **行动空间**: 可能包括持有、买入或卖出三种离散动作;也可以采用连续动作表示仓位比例调整。 - **奖励机制**: 设计合理的目标函数作为回报信号,比如累计收益增长率减去风险惩罚项。 ```python import gym from gym import spaces import numpy as np import pandas as pd class StockTradingEnv(gym.Env): metadata = {'render.modes': ['human']} def __init__(self, df): super(StockTradingEnv, self).__init__() # 数据准备 self.df = df # 动作空间:0=卖空,1=保持不变,2=做多 self.action_space = spaces.Discrete(3) # 观察空间:股票特征向量长度 self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(len(df.columns), ), dtype=np.float32) def step(self, action): ... def reset(self): ... def render(self, mode='human'): ... ``` 上述代码片段展示了如何基于 Pandas DataFrame 构建一个简单的股票交易环境类[^5]。 #### 2. 训练模型 一旦完成了环境设置,则可以选择适合当前任务需求的具体 RL 方法来进行训练。对于大多数高频交易问题而言,Proximal Policy Optimization (PPO) 往往表现良好因为它能够在保证稳定性的同时快速收敛到较优解。 下面是一个使用 PPO 对前述定制化股市交易器进行培训的例子: ```python from stable_baselines3 import PPO env = StockTradingEnv(dataframe_with_stock_prices_and_features) model = PPO('MlpPolicy', env, verbose=1) model.learn(total_timesteps=100_000) ``` 这里我们选择了 MLP 多层感知机网络结构作为策略近似架构,默认参数适用于许多标准情况但针对特定应用场景可能还需要进一步调参优化. #### 3. 测试与评估 完成初步的学习之后,应当在一个独立于训练样本之外的数据集上验证所得到政策的有效性和鲁棒性。这一步骤可以帮助识别过拟合现象以及改进整体系统性能。 除了传统的统计度量外,在金融市场背景下特别关注夏普比率之类的风险调整后的绩效指标也很重要[^2]: \[ SharpeRatio=\frac{\mu_r-\mu_f}{\sigma} \] 其中 \( r \) 表示资产组合收益率系列,\( f \) 则代表无风险利率水平而 σ 即为波动率衡量值. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值