关于SAC算法训练和测试的区别

以下内容均为本人在实际项目中遇到问题后的思考和总结,可能对于和我一样的SAC算法新手来说会有帮助,对于已经完成过多个完整项目的老手来说其实可以直接pass,仅供参老,请酌情观看,如有问题请指出。

前言

SAC(Soft Actor-Critic)Method是一种强化学习算法,在使用策略梯度算法的同时,也考虑了最大熵原理,鼓励学习的策略在追求最大的优化值(即reward)的同时,也考虑了增加执行动作action时的探索性。

训练和测试则是强化学习中的两个关键步骤,在写测试的代码的时候,发现了SAC算法在测试时需要更改的几个要点。在此记录。
部分内容由ChatGPT4协助润色。


一、SAC算法训练和测试分别在做什么?

训练 (Training)

在训练阶段,SAC算法试图学习一个策略,在我们确定并且初始化了网络结构之后,使用网络结构对于我们的目标进行训练。该策略能使得从环境中获得的预期奖励最大化,同时保持策略的熵也尽可能大。训练阶段的主要目标是通过调整算法的参数使其学习到一个最优策略。
在SAC中,训练涉及到样本的收集、利用收集的样本来更新策略和价值网络。在整个过程中,SAC会尝试不断地调整其策略,以在环境中探索并获得更高的奖励。
在训练结束后,我们会保存agent在训练过程中所得到的最优模型,此模型会用于训练。

测试 (Testing)

测试阶段的主要目标是验证训练得到的策略是否能在新的、未曾见过的环境中表现得很好。在测试阶段,不再进行任何学习或参数更新,只是将训练阶段得到的策略应用于测试环境。

在SAC中,测试主要涉及到执行已经训练好的策略,并收集测试期间的奖励以评估策略的性能。测试阶段的关键在于看训练得到的策略是否能够泛化到新的环境中。

二、SAC算法训练和测试的区别是什么?

区别代码角度的比较/更改
训练和更新的过程在训练的过程中,SAC神经网络需要在训练的过程中更新神经网络的各项参数,因此在这个过程中,梯度的更新是打开的。但是在测试中,因为我们的模型已经训练完毕,因此梯度更新应当关闭,以供使用最新的模型进行测试。
探索过程训练过程会为测试过程探索并确认最佳的模型状态。因此,测试过程agent不需要再进行探索。
环境的重置训练过程会有多轮的循环,但是测试的过程有且仅有一轮循环测试模型的结果。
表现(reward)的记录训练个测试都需要记录表现,查看reward数值的变化。
模型的使用和保存使用同样的算法,最优模型进行测试。

三、通过部分代码说明我们提到的要点

其实可以通过搜索detach()的方法来搜索一个算法中哪些函数的设计是使用已经更新完的模型的。因为detach()方法就是关闭梯度,我们梯度训练完后,不再需要更新。所以会看到action.detach()方法。

import gym

env = gym.make("Pendulum-v1") #测试在环境下的性能

state = env.reset()#初始化
cum_reward = 0
frames = []
for t in range(50000): #持续5000步循环
    frames.append(env.render(mode='rgb_array'))
    action = policy_net.get_action(state) #使用训练好的策略网络根据当前状态生成动作
    state, reward, done, info = env.step(action.detach().numpy())  # detach and convert to numpy这里的detach()方法就是关闭梯度,因为我们梯度训练完后,不再需要更新
    reward = reward.item()  # convert reward from torch.Tensor to a float number
    cum_reward += reward
    if done:
        break
env.close()
display_frames_as_gif(frames)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值