超级参数(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 值加权熵的重要性。较高的 α 值鼓励代理采取更随机的行动。
-
Gradient descent batch size:从经验缓冲区中随机采样的最近车辆经验数,用于更新基础深度学习神经网络权重。
-
Number of epochs:在梯度下降期间,遍历训练数据(经验缓冲区的随机样本)以更新神经网络权重的次数。
-
Learning rate:更新权重时,新权重的占比。
-
Entropy:不确定性概率,模型有一定概率选择随机探索。
-
Discount factor:未来奖励对预期奖励的影响程度。
-
Loss type:损失函数的类型。分为Mean squared error loss (均方误差损失) 和Huber loss (Huber 损失) 类型。
-
Number of experience episodes between each policy-updating iteration:经验缓冲区的大小,用于记录过去的经验。
根据以上超参数的定义,有如下调参建议: -
如果奖励函数过于激进,导致模型不易收敛,可以尝试降低learning rate或选择huber loss,让学习的过程更加平滑;
-
如果模型在过弯时反应不够灵敏,或转弯时机总是比较晚,可以尝试提高discount factor,让模型更注重远期奖励;
-
反之,如果模型在过弯时过于灵敏,过早转弯,可以尝试降低discount factor,避免模型过于关注远期奖励,同时,也可以使用waypoints来解决;
-
Reward的延迟也要在discount factor的设置中考虑,如果reward设置的的延迟较高时,可以适当提高discount factor值;而reward实时性较好时,可以降低discount factor值;
-
Batch size与epoch越大,模型在训练的权重更新则越平滑。但如果batch size或epoch过大,会导致训练速度降低及收敛至局部最优,因此可以联合调试batch size和epoch的值;
-
适当增加经验缓冲区大小,会提升模型的收敛的稳定性,如果模型始终不收敛或性能震动较大,可以尝试适当增加经验缓冲区的大小;
-
与PPO模型相比,在使用SAC模型时,建议使用更高的epoch来缓解算法本身对超参数敏感的问题;
-
如果模型训练过程中的性能提升过于缓慢,可以适当增加entropy值,提升模型随机探索的可能性;
-
如果模型的性能提升过于缓慢或变动较小,可以适当增加entropy值;反之,如果模型在收敛过程中震荡较大,可以适当降低entropy值;