Unity ML-agents 参数设置解明

2021-07-27  本文已影响0人  行者AI

本文首发于:行者AI

Unity 是全球最受欢迎的游戏开发引擎之一,有大量的游戏开发者在使用Unity开发他们的游戏。在这个AI、大数据等流行词遍布各行各业的时代,Unity也没有被潮流抛下,推出了他们自己的基于深度强化学习来训练游戏AI的工具包Unity ML-agents。这个工具包功能丰富,十分强大。可以帮助你在你的游戏内实现一个新的AI算法,并且快速的用到你的游戏当中。这么强大的工具包难以在一篇文章里面概括其所有功能。本文就先抛砖引玉,稍微讨论一下Unity ML-agents训练的时候需要用到的各种参数的意义,其常用的取值又是如何。

本文所有内容参考Unity ML-agents的官方文档(地址:https://github.com/Unity-Technologies/ml-agents/tree/main/docs

1. 训练参数设置

在你开始你的训练之前,你需要针对你的训练任务设定一个训练参数文件(一般是一个.yaml文件)。

接下来就简单介绍一下ml-agents环境里的参数设置概要。本文主要参考ml-agents最新版本关于参数设置的官方文档,做了一些概括性的翻译并加入一定个人理解。

具体文档地址:https://github.com/Unity-Technologies/ml-agents/blob/main/docs/Training-Configuration-File.md

训练参数主要分为常用训练参数(Common Trainer Configurations), 训练方式专用参数(Trainer-specific Configurations),超参数(hyper-parameters) ,奖励信号参数(Reward Signals), 行为克隆(Behavioral Cloning),使用RNN增强智能体记忆能力的参数(Memory-enhanced Agents using Recurrent Neural Networks),以及自我对抗训练参数(Self-Play)这几个大的模块。这几个模块下面又有一些小的模块,在后文会进一步说明,而且这些模块并不需要总是全都去设定。事实上,除了前三个模块是几乎每个环境训练必须的参数之外,其他的模块仅用在需要使用到对应功能的训练任务。接下来具体说明每个参数的含义。

2. 常用训练参数模块(Common Trainer Configurations)

3. 接下来是一些常见超参数(hyper-parameters)的详细设定

4. 接下来介绍一些常用的网络模型的超参数

5. Trainer-specific Configurations

接下来我们介绍一下针对不同训练算法的专门参数。

5.1 PPO-specific Configurations (PPO专门参数)

6. Reward Signals

奖励信号可分为两种,一种是外在的(extrinsic)来自于环境的奖励,一种是内在的(intrinsic)来自于内部的奖励(比如好奇心奖励等)。不管是内部还是外部奖励信号,都至少要设定两个参数,一个是信号强度(strength),一个是信号衰减率(gamma)。并且,你需要至少设定一种奖励,不然没办法训练。

6.1 Extrinsic Rewards

6.2 Intrinsic Reward

7. Memory-enhanced Agents Using Recurrent Neural Networks

7.1 可以通过增加记忆模块的办法来增加模型的表达能力。注意,memory section要加在network下面

7.2 使用记忆网络需要注意以下几点

8. Self Play 参数设置

self play 这个section只有在对抗性训练的时候需要使用,如果仅仅只有一个agent,或者多个agent中没有任何意义上的交互,则不需要设定这一个参数。Unity ml-agent也是利用self play参数的加入来启动它自带的对抗性训练模块。

参考(https://github.com/Unity-Technologies/ml-agents/blob/ddfe054e204415d76b39be93f5bcbec1b456d928/docs/Training-Configuration-File.md#self-play

behaviors:
  SoccerTwos: #游戏的名字
    trainer_type: ppo #选定使用何种训练算法
    hyperparameters: #PPO算法的超参数设置
      batch_size: 2048 
      buffer_size: 20480 # buffer大小必须是batch大小的整数倍,这里是十倍
      learning_rate: 0.0003
      beta: 0.005  #熵正则的超参数
      epsilon: 0.2 #PPO算法的clip范围
      lambd: 0.95  #GAE算法的lambda
      num_epoch: 8 #每次更新训练多少次
      learning_rate_schedule: linear #学习率衰减方式,这里是线性衰减
    network_settings: #处理observation信息的网络结构设置
      normalize: false 
      hidden_units: 256
      num_layers: 2
      vis_encode_type: simple 
    reward_signals: #奖励超参数设置
      extrinsic:
        gamma: 0.99
        strength: 1.0
    keep_checkpoints: 5 #一共保留最近的五个checkpoint
    checkpoint_interval: 100000 #每100000个timestep保存一个checkpoint
    max_steps: 50000000 #最多训练这么多不(注意,这是多个agent加起来的值)
    time_horizon: 1000
    summary_freq: 5000 
    threaded: false # 是否使用线程,在使用self-play功能时最好关掉
    self_play: #self-play相关参数设定
      save_steps: 50000
      team_change: 250000
      swap_steps: 2000
      window: 10 #一共保留十个过去过去的snapshot
      play_against_latest_model_ratio: 0.5
      initial_elo: 1200.0 
上一篇 下一篇

猜你喜欢

热点阅读