首页 > 编程语言 >python DeepRacer超参

python DeepRacer超参

时间:2022-10-20 10:46:29浏览次数:77  
标签:经验 权重 训练 python 更新 超参 奖励 缓冲区 DeepRacer

超级参数(Hyperparameters)

参考了这篇文章https://rambo.blog.csdn.net/article/details/120643653

训练的过程:
1、小车根据经验操作或者随机操作,跑出界或者跑完一圈后为一个episode。小车是根据经验还是随机,与Entropy有关,这个值越大越随机。
2、经过Number of experience episodes后,采集了N个episode数据,把这些数据放入经验缓冲区。
3、采集完数据后,从经验缓冲区取数据,进行训练。每次随机的从经验缓冲区取Batch size个数据,训练Number of epochs次。
4、每次训练的时候都会更新CNN神经网络的的权重,更新的比例为learning rate

梯度下降批量大小(Gradient descent batch size)

从经验缓冲区中随机采样的近期车辆经验数量,用于更新底层深度学习神经网络权重。随机抽样有助于减少输入数据中固有的相关性。使用更大的批量大小来促进对神经网络权重的更稳定和平滑的更新,但要注意训练时间可能更长或更慢的可能性。

该批次是体验缓冲区的子集,由安装在 AWS DeepRacer 车辆上的摄像头捕获的图像和车辆采取的操作组成。(转换为了一系列参数,即reward_function的入参),这个肯定是选大的好,只是越大学习慢,训练时间长

时代数 (Number of epochs)

在梯度下降期间通过训练数据更新神经网络权重的次数。训练数据对应于经验缓冲区中的随机样本。使用更多的 epoch 来促进更稳定的更新,但预计训练速度会更慢。当批量较小时,您可以使用较少数量的 epoch。

这个值跟batch size一样,当然是越大越好,只是训练时间长

学习率(Learning rate)

在每次更新期间,新权重的一部分可以来自梯度下降(或上升)贡献,其余来自现有权重值。学习率控制梯度下降(或上升)更新对网络权重的贡献。使用更高的学习率来包括更多的梯度下降贡献以加快训练速度,但要注意如果学习率太大,预期奖励可能不会收敛。
学习率是用来控制学习的步长,太大时在最终可能出现抖动,建议首次迭代可以选择大一点,便于使损失函数快速降低,后面选择小一点,便于收敛

熵(Entropy)

用于确定何时向策略分布添加随机性的不确定性程度。增加的不确定性有助于 AWS DeepRacer 车辆更广泛地探索行动空间。更大的熵值鼓励车辆更彻底地探索动作空间。
这个值到了后期可以加大点,以便提高随机性,避免收敛到局部最优

折扣系数(Discount factor)

折扣因子确定在计算给定状态的奖励时对未来奖励的折扣程度,作为所有未来状态的平均奖励。折扣因子 0 表示当前状态与未来步骤无关,而折扣因子 1 表示包括所有未来步骤的贡献。折扣因子为 0.9 时,给定步骤的预期奖励包括来自未来 10 个步骤的奖励。使用 0.999 的折扣因子,预期奖励包括来自 1000 个未来步骤的奖励。

这个折扣系数感觉可以调成0-0.9,后面跑的好跟前面关系不大吧,打0.999的折扣因子,表示当前reward=当前reward值\*0.001+未来1000个点的reward和\*0.999。折扣因子表示的是为了reward影响现有reward的比例。

损失类型(Loss type)

更新网络权重的目标函数的类型。一个好的训练算法应该对车辆的策略进行增量更改,使其逐渐从采取随机行动过渡到采取战略行动以增加奖励。但是如果改变太大,那么训练就会变得不稳定,代理最终不会学习。 Huber 和均方误差损失类型对于小更新的行为类似。但是随着更新变大,与均方误差损失相比,Huber 损失的增量更小。当您遇到收敛问题时,请使用 Huber 损失类型。当收敛良好并且您想更快地训练时,请使用均方误差损失类型。

每次策略更新迭代之间的经验集数(Number of experience episodes between each policy-updating iteration)

用于从学习策略网络权重中提取训练数据的经验缓冲区的大小。情节是车辆从给定起点开始并最终完成轨道或离开轨道的时期。不同的情节可以有不同的长度。对于简单的强化学习问题,一个小的经验缓冲区可能就足够了,学习会很快。对于具有更多局部最大值的更复杂问题,需要更大的经验缓冲区来提供更多不相关的数据点。在这种情况下,训练会更慢但更稳定。推荐值为 10、20 和 40。

这个理论上也是越大越好

SAC α (α) 值 (SAC alpha (α) value)

大多数算法的目标函数只关注最大化总回报。 SAC 的目标函数最大化熵(随机性)和总回报。这会鼓励您的智能体在寻找奖励的同时继续探索,这有助于它成为终身学习者并防止过度拟合。 alpha 值加权熵的重要性。较高的 α 值鼓励代理采取更随机的行动。

  1. Gradient descent batch size:从经验缓冲区中随机采样的最近车辆经验数,用于更新基础深度学习神经网络权重。

  2. Number of epochs:在梯度下降期间,遍历训练数据(经验缓冲区的随机样本)以更新神经网络权重的次数。

  3. Learning rate:更新权重时,新权重的占比。

  4. Entropy:不确定性概率,模型有一定概率选择随机探索。

  5. Discount factor:未来奖励对预期奖励的影响程度。

  6. Loss type:损失函数的类型。分为Mean squared error loss (均方误差损失) 和Huber loss (Huber 损失) 类型。

  7. Number of experience episodes between each policy-updating iteration:经验缓冲区的大小,用于记录过去的经验。
    根据以上超参数的定义,有如下调参建议:

  8. 如果奖励函数过于激进,导致模型不易收敛,可以尝试降低learning rate或选择huber loss,让学习的过程更加平滑;

  9. 如果模型在过弯时反应不够灵敏,或转弯时机总是比较晚,可以尝试提高discount factor,让模型更注重远期奖励;

  10. 反之,如果模型在过弯时过于灵敏,过早转弯,可以尝试降低discount factor,避免模型过于关注远期奖励,同时,也可以使用waypoints来解决;

  11. Reward的延迟也要在discount factor的设置中考虑,如果reward设置的的延迟较高时,可以适当提高discount factor值;而reward实时性较好时,可以降低discount factor值;

  12. Batch size与epoch越大,模型在训练的权重更新则越平滑。但如果batch size或epoch过大,会导致训练速度降低及收敛至局部最优,因此可以联合调试batch size和epoch的值;

  13. 适当增加经验缓冲区大小,会提升模型的收敛的稳定性,如果模型始终不收敛或性能震动较大,可以尝试适当增加经验缓冲区的大小;

  14. 与PPO模型相比,在使用SAC模型时,建议使用更高的epoch来缓解算法本身对超参数敏感的问题;

  15. 如果模型训练过程中的性能提升过于缓慢,可以适当增加entropy值,提升模型随机探索的可能性;

  16. 如果模型的性能提升过于缓慢或变动较小,可以适当增加entropy值;反之,如果模型在收敛过程中震荡较大,可以适当降低entropy值;

https://aws.amazon.com/cn/blogs/china/amazon-deepracer-model-training-guide-and-standard-hardware-configuration-process/

标签:经验,权重,训练,python,更新,超参,奖励,缓冲区,DeepRacer
From: https://www.cnblogs.com/yuandonghua/p/16779288.html

相关文章

  • python DeepRacer生成最优路径和速度
    DeepRacer生成最优路径和速度获取赛道数据从github下载:https://github.com/aws-deepracer-community/deepracer-race-dataraw_data里边就是赛道数据,reinvent2018:是rein......
  • python-opencv cv.imshow 错误
    本文平台windows报错信息: cv2.imshow('imshow',img))Thefunctionisnotimplemented.RebuildthelibrarywithWindows,GTK+2.xorCocoasupport.Ifyouare......
  • python实验报告(第六周)
    一、实验目的1.掌握如何创建并调用一个函数,以及如何进行参数传递和指定函数的返回值等。2.掌握变量的作用域和匿名函数。二、实验环境python版本:3.10(64-bit)三、实验内......
  • python使用selenium操作浏览器
    重复的操作令手工测试苦不堪言,于是自动化测试出现了!作为web应用里最出名的自动化测试工具,selenium让web应用的测试轻松了很多。今天我们就来简单的介绍一下一些简单的sele......
  • DAPR in Python
    最近在部署项目时,用到了DAPR,记录一下。一、安装     本地安装  https://docs.dapr.io/zh-hans/getting-started/install-dapr-cli/      docker内安......
  • 二、Python入门
    一、第一句Python代码编辑/scripts目录下编辑hello.py输入1print("hello,word")执行hello.py 即python3/scripts/hello.pypython内部执行过程如下: ......
  • 【Python】判断列表或字典中是否存在key值
    第一种in方法,即列出所有key值查询是否在里面a={"name":"1","value":"2"}if"name"ina.keys():print("存在")else:print("不存......
  • Python3中Super函数的使用
    Super函数用法主要用于调用父类函数代码演示classA:def__init__(self):self.n=2print('此时执行A的自定义函数,self的n值为',self.n)d......
  • 盘点一个Python自动化办公的实战案例(word文件处理)
    大家好,我是Python进阶者。一、前言前几天在Python铂金交流群【JethroShen】问了一个Python自动化办公的问题,提问截图如下:代码运行后的结果:他预期的效果是选项和答案......
  • python对列表里的元组,列表,字典进行排序
    python对列表里的元组,列表,字典进行排序其实很简单就是利用列表对象自带的sort方法和方法内的key关键字参数和lambda匿名函数搭配即可。若有:L=[('b',6),('a',1),('c',3)......