从零开始搭建Unity机器学习环境—Chapter1:常用训练参数解析

本文主要是介绍从零开始搭建Unity机器学习环境—Chapter1:常用训练参数解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  Unity官方机器学习官方库(ML-Agents)组件为游戏开发者及研究人员提供了一整套易集成、所见即所得的机器学习框架。在Unity环境中,Agent智能体的学习、训练参数主要通过yaml文件进行配置,如图1所示。本文将对ML-Agents所涉及到的机器学习配置参数进行简单介绍,水平有限,如有错误敬请见谅。Github原文链接详见文章末尾。

图1 yaml文件内容示例

常用训练配置参数(Common Trainer Configurations)

1.1 trainer_type:训练器类型,默认为ppo,另有sac及poca可选。

1.2 summary_freq:默认为50000,定义每次生成、显示训练统计数据之间需要收集的训练结果数量。该参数也决定了 Tensorboard 中图表的粒度(注:ML-Agents训练进度可通过cmd窗口查看,后续将详细介绍)。

1.3 time_horizon:介于32 ~ 2048,默认为64。将Agent添加到经验缓冲区之前,所必须经历的训练步的数量。当在场景(用户自定义的训练场景,episode)结束之前达到此限制时,将使用价值估计来预测智能体当前状态的总体预期奖励。因此,该参数在偏差较小但方差较高的估计(长期)和偏差较大但变化较小的估计(短期)之间进行权衡。 在场景中经常有奖励的情况下,或者场景非常大的情况下,建议选较小的数字。通常, 这个数字应该足够大,以捕获Agent动作序列中的所有重要行为。

1.4 max_steps:介于5E5 ~ 1E7,默认5E5。在场景中结束训练之前,必须在场景中(如果并行使用多个,则为在所有环境中)进行的仿真步数。

1.5 keep_checkpoints:默认为5,要保留的模型检查点的最大数量。 在checkpoint_interval选项指定的步数之后保存检查点。 一旦达到最大检查点数,保存新检查点时将删除最旧的检查点。

1.6 checkpoint_interval:Trainer在每个检查点之间收集的经验数量。在删除旧的检查点之前,最多保存keep_checkpoints个检查点(注:1.5中已经提到,这两部分顺序换一下更合理)。每个检查点都将.onnx 文件保存在 results/ 文件夹中(注:如果顺利进行训练,则路径为ProjectName/results/...)。

1.7 init_path:从既有的模型初始化Trainer,默认为空(不可用)。之前的运行模型应该使用与当前运行的模型使用相同的Trainer配置,并使用相同版本的 ML-Agents 保存。ML-Agents不同版本之间的差异往往会导致Editor报错,应谨慎使用。

1.8 threaded:在更新模型时允许环境步进,默认为false。 这可能会导致训练加速,尤其是在使用 sac时。为获得最佳性能,请在使用自玩游戏时将设置保留为 false。

1.9 hyperparameters -> learning_rate:梯度下降的初始学习率,介于1E-5 ~ 1E-3,默认为3E-4。 对应于每个梯度下降更新步骤的强度。 如果训练不稳定并且奖励不会持续增加,则通常应该减少此值。

1.10 hyperparameters -> batch_size:梯度下降每次迭代的经验数。应确保该值总是比 buffer_size小几倍。 在使用连续动作的情况下,该值应该很大(≈1000s),若只使用离散动作,该值应该更小(≈10s)。常用取值范围:Continuous - PPO,512 ~ 5120;Continuous - SAC,128 ~ 1024;Discrete, PPO & SAC,32 ~ 512。

1.11.1 hyperparameters -> buffer_size (PPO):在更新策略模型之前要收集的经验数量,介于2048 ~ 409600默认值10240。对应于在我们对模型进行任何学习或更新之前至少应该收集的经验数量。 这应该比 batch_size 大几倍(1.10中已经提到)。较大的 buffer_size对应于更稳定的训练更新。

1.11.2 hyperparameters -> buffer_size(SAC):经验缓冲区的最大大小,介于50000 ~ 1000000,默认值为50000。以便 SAC 可以从旧经验和新经验中学习。

1.12.1 hyperparameters -> learning_rate_schedule(PPO):确定学习率如何随时间变化,默认值为linear。对于 PPO而言,将学习率衰减至到 max_steps能够使学习更稳定地收敛。 但是,对于某些特殊情况(如训练时间未知),可以禁用此功能。

1.12.2 hyperparameters -> learning_rate_schedule(SAC):确定学习率如何随时间变化,默认值为constant。对于 SAC而言,建议保持学习率不变,以便Agent可以继续学习,直到其 Q 函数自然收敛。注:linear表示learning_rate在学习过程中线性衰减,在 max_steps 处达到 0,而若选择 constant ,在整个训练过程中learning_rate恒定。

1.13 network_settings -> hidden_units:神经网络隐藏层中的单元数,介于32 ~ 512,默认值为128。对应于神经网络的每个全连接层中有多少个单元。 对于正确操作是观察输入的直接组合的简单问题,应设置较小数值。 对于动作是观察变量之间非常复杂的相互作用的问题,应设置较大数值。

1.14 network_settings -> num_layers:神经网络中隐藏层的数量,介于 1 ~ 3 ,默认值为2。对应于观察输入后或视觉观察的CNN 编码后存在多少隐藏层。对于简单的问题,较少的层数可能训练得更快、更有效。对于更复杂的控制问题,则需要更多的层。

1.15 network_settings -> normalize:是否对向量观察输入应用归一化,默认值为false。 这种归一化基于矢量观察的运行平均值和方差。 归一化在具有复杂连续控制问题的情况下可能很有帮助,但对于更简单的离散控制问题可能适得其反。

1.16 network_settings -> vis_encode_type:用于编码视觉观察的编码器类型,默认值为simple。simple使用由两个卷积层组成的简单编码器,nature_cnn使用由Mnih等人提出的CNN实现,由三个卷积层组成,resnet 使用由三个堆叠层组成的IMPALA Resnet,每个层有两个残差块,形成比其他两个更大的网络。match3 是一个较小的CNN(Gudmundsoon 等人提出),可以捕获更精细的空间关系,并针对棋盘游戏进行了优化。fully_connected 使用单个完全连接的密集层作为编码器,没有任何卷积层。由于卷积核的大小,每种编码器类型可以处理的最小观察大小限制(simple:20x20,nature_cnn:36x36,resnet:15 x 15,match3:5x5)。 fully_connected 没有卷积层,因此没有大小限制,但由于它的表示能力较小,因此应该为非常小的输入保留。应注意的是,使用具有非常大的视觉输入的match3 CNN可能会导致大量的观察编码,从而可能会减慢训练速度或导致内存问题。

1.17 network_settings -> conditioning_type:使用目标观察的策略的条件类型,默认值为hyper。none将目标观察视为常规观察,hyper(默认值)使用带有目标观察的超网络作为输入来生成策略的一些权重。应注意的是,当选择 hyper 时,网络的参数数量会大大增加,因此建议同时减少hidden_units的数量。

Github参考:ml-agents/Training-Configuration-File.md at release_19_docs · Unity-Technologies/ml-agents · GitHub

这篇关于从零开始搭建Unity机器学习环境—Chapter1:常用训练参数解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394312

相关文章

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.