专栏首页相约机器人从头开始编写一个强化学习足球经纪人!

从头开始编写一个强化学习足球经纪人!

作者 | Chintan Trivedi

来源 | Medium

编辑 | 代码医生团队

欢迎来到数学和代码turorial系列的第一部分。展示如何实施一种称为近端策略优化(PPO)的强化学习算法,用于教授AI代理如何踢足球/足球。在本教程结束时,将了解如何在演员评论框架中应用on-policy学习方法,以便学习导航任何游戏环境。将在PPO算法的上下文中看到这些术语的含义,并在Keras的帮助下在Python中实现它们。所以首先开始安装游戏环境。

注意:此整个系列的代码可在下面链接的GitHub存储库中找到。

https://github.com/ChintanTrivedi/rl-bot-football?source=post_page-----d53f9afffbf6----------------------

设置Google Football Environment

谷歌足球环境发布RL研究

在本教程中使用Google Football Environment,但可以使用任何游戏环境,只需确保它在python中支持OpenAI的Gym API。请注意在编写本教程时,足球环境目前仅支持Linux平台。

https://github.com/google-research/football

首先创建一个名为footballenv并激活它的虚拟环境。

virtualenv footballenv
source footballenv / bin / activate

现在安装此项目所需的系统依赖项和python包。确保选择适合系统的正确的gfootball CPU / GPU版本。

sudo apt-get install git cmake build-essential libgl1-mesa-dev
libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-gfx-dev libboost-all-dev libdirectfb-dev libst-dev mesa-utils xvfb x11vnc libsqlite3-dev glee-dev libsdl-sge-dev python3-pip
pip3 install gfootball [tf_gpu] == 1.0
pip3 install keras

运行足球环境

现在安装了游戏,尝试测试它是否在系统上正确运行。

典型的强化学习设置通过让AI代理与我们的环境进行交互来实现。代理商观察state环境的当前状况,并根据一些人policy做出决定采取特定措施action。然后将此动作转发回向前移动的环境step。这生成一个reward指示在正在播放的游戏的上下文中所采取的动作是正面还是负面的。使用此奖励作为反馈,代理人试图找出如何修改其现有政策以便在将来获得更好的奖励。

典型的RL代理

现在继续实施这个,以便与这个足球环境进行交互的随机动作AI代理。创建一个名为的新python文件,train.py并使用之前创建的虚拟环境执行以下操作。

import gfootball.env as football_env


env = football_env.create_environment(env_name='academy_empty_goal', representation='pixels', render=True)


state = env.reset()


while True:
  observation, reward, done, info = env.step(env.action_space.sample())
  if done:
    env.reset()

这env为academy_empty_goal玩家在半线产生并且必须在右侧的空目标中得分的场景创建了一个环境对象。representation='pixels'意味着代理将观察到的状态是在屏幕上呈现的帧的RGB图像的形式。如果看到屏幕上的玩家在游戏中采取随机动作,恭喜,一切都设置正确,可以开始实施PPO算法了!

以下是视频格式中的相同安装步骤,如果您更喜欢的话。

近端策略优化(PPO)

PPO算法由OpenAI团队在2017年引入,并迅速成为篡夺Deep-Q学习方法的最流行的RL方法之一。它涉及收集与环境相互作用的一小批经验,并使用该批次更新其决策政策。使用此批处理更新策略后,将丢弃体验并使用新更新的策略收集较新的批处理。这就是为什么它是一种“政策上学习”方法,其中收集的经验样本仅对更新当前政策一次有用。

PPO的关键贡献是确保政策的新更新不会像以前的政策那样改变太多。这导致训练的差异较小,但代价是偏差,但确保训练更顺畅,并确保代理人不会走上一条无法恢复的道路,采取毫无意义的行动。因此,让我们继续将我们的AI代理分解为更多细节,并了解它如何定义和更新其策略。

Actor-Critic方法

将对PPO代理使用Actor-Critic方法。它使用两种模型,包括Deep Neural Nets,一种叫做Actor,另一种叫做Critic。

PPO代理

Actor model

在Actor model执行学习采取什么行动环境的特定状态观察下的任务。在例子中,它将游戏的RGB图像作为输入,并提供特定的动作,如拍摄或传递作为输出。

Actor model

先实现这一点。

def get_model_actor_image(input_dims, output_dims):
    state_input = Input(shape=input_dims)
    n_actions = output_dims
    
    # Use MobileNet feature extractor to process input image
    feature_extractor = MobileNetV2(include_top=False, weights='imagenet')
    for layer in feature_extractor.layers:
        layer.trainable = False
 
    # Classification block
    x = Flatten(name='flatten')(feature_extractor(state_input))
    x = Dense(1024, activation='relu', name='fc1')(x)
    out_actions = Dense(, activation='softmax', name='predictions')(x)
 
    # Define model
    model = Model(inputs=[state_input],outputs=[out_actions])
    model.compile(optimizer=Adam(lr=1e-4), loss='mse')
    
return model

在这里,首先定义state_input神经网络的输入形状,这是RGB图像的形状。n_actions是在这个足球环境中可用的动作总数,它将是神经网络的输出节点总数。

正在使用预训练的MobileNet CNN的前几层来处理输入图像。也正在使这些图层的参数不可训练,因为不想改变它们的权重。仅训练添加在此特征提取器顶部的分类层以预测正确的动作。将这些层组合为Keras Model并使用均方误差丢失进行编译(目前,这将在本教程后面更改为自定义PPO丢失)。

Critic model

将演员预测的动作发送到足球环境并观察比赛中发生的事情。如果由于行动而发生积极的事情,比如对目标进行评分,那么环境会以奖励的形式发回积极的回应。如果由于行为而发生了自己的目标,那么会得到负面的回报。这个奖励是由Critic model。

Critic model

Critic模型的工作是学习评估Actor采取的行动是否导致环境处于更好的状态,并将其反馈给Actor,因此得名。它输出一个实数,表示在先前状态下采取的动作的等级(Q值)。通过比较从评论家获得的评级,演员可以将其当前政策与新政策进行比较,并决定如何改进自己以采取更好的行动。

实施批评家。

def get_model_critic_image(input_dims):
    state_input = Input(shape=input_dims)
  
    # Use MobileNet feature extractor to process input image
    feature_extractor = MobileNetV2(include_top=False, weights='imagenet')
    for layer in feature_extractor.layers:
        layer.trainable = False
 
    # Classification block
    x = Flatten(name='flatten')(feature_extractor(state_input))
    x = Dense(1024, activation='relu', name='fc1')(x)
    out_actions = Dense(1, activation='tanh')(x)
  
    # Define model
    model = Model(inputs=[state_input], outputs=[out_actions])
    model.compile(optimizer=Adam(lr=1e-4), loss='mse')
    
    return model

如您所见,Critic神经网络的结构几乎与Actor相同。唯一的主要区别是,Critic的最后一层输出一个实数。因此,使用的激活是tanh,softmax因为不需要像Actor这样的概率分布。

现在,PPO算法中的一个重要步骤是使用两个模型贯穿整个循环,执行固定数量的步骤,称为PPO步骤。基本上,正在与environemt进行一定数量的步骤互动,并收集将用于训练的状态,行动,奖励等。

把它们捆绑在一起

现在已经定义了两个模型,可以使用它们与足球环境进行交互,以获得固定数量的步骤并收集经验。在拥有足够大量的此类样本后,这些经验将用于更新模型的政策。这是如何实现循环收集这样的样本体验。

import gfootball.env as football_env
import numpy as np
import keras.backend as K
from keras.layers import Input, Dense, Flatten
from keras.models import Model
from keras.optimizers import Adam
from keras.applications.mobilenet_v2 import MobileNetV2
 
 
def get_model_actor_image(input_dims):
    state_input = Input(shape=input_dims)
 
    feature_extractor = MobileNetV2(weights='imagenet', include_top=False)
 
    for layer in feature_extractor.layers:
        layer.trainable = False
 
    x = Flatten(name='flatten')(feature_extractor(state_input))
    x = Dense(1024, activation='relu', name='fc1')(x)
    out_actions = Dense(n_actions, activation='softmax', name='predictions')(x)
 
    model = Model(inputs=[state_input], outputs=[out_actions])
    model.compile(optimizer=Adam(lr=1e-4), loss='mse')
 
    return model
 
 
def get_model_critic_image(input_dims):
    state_input = Input(shape=input_dims)
 
    feature_extractor = MobileNetV2(weights='imagenet', include_top=False)
 
    for layer in feature_extractor.layers:
        layer.trainable = False
 
    x = Flatten(name='flatten')(feature_extractor(state_input))
    x = Dense(1024, activation='relu', name='fc1')(x)
    out_actions = Dense(1, activation='tanh', name='predictions')(x)
 
    model = Model(inputs=[state_input], outputs=[out_actions])
    model.compile(optimizer=Adam(lr=1e-4), loss='mse')
 
    return model
 
 
env = football_env.create_environment(env_name='academy_empty_goal', representation='pixels', render=True)
 
state = env.reset()
 
state_dims = env.observation_space.shape
print(state_dims)
 
n_actions = env.action_space.n
print(n_actions)
 
ppo_steps = 128
 
states = []
actions = []
values = []
masks = []
rewards = []
actions_probs = []
actions_onehot = []
 
model_actor = get_model_actor_image(input_dims=state_dims)
model_critic = get_model_critic_image(input_dims=state_dims)
 
for itr in range(ppo_steps):
    state_input = K.expand_dims(state, 0)
    action_dist = model_actor.predict([state_input], steps=1)
    q_value = model_critic.predict([state_input], steps=1)
    action = np.random.choice(n_actions, p=action_dist[0, :])
    action_onehot = np.zeros(n_actions)
    action_onehot[action] = 1
 
    observation, reward, done, info = env.step(action)
    mask = not done
 
    states.append(state)
    actions.append(action)
    actions_onehot.append(action_onehot)
    values.append(q_value)
    masks.append(mask)
    rewards.append(reward)
    actions_probs.append(action_dist)
 
    state = observation
 
    if done:
        env.reset()
 
env.close()

正如在上面的代码中所看到的,已经定义了一些python列表对象,这些对象用于存储诸如观察状态,操作,奖励等信息,当与环境进行交互时ppo_steps。这给了一批128个样本经验,这些经验将在以后用于训练Actor和Critic神经网络。

以下两个视频逐行解释此代码,并在游戏屏幕上显示最终结果。

这就是本教程的这一部分。在Linux系统上安装了Google Football Environment,并实现了与此环境交互的基本框架。接下来,定义了Actor和Critic模型,并使用它们与此游戏进行交互并收集样本体验。

本文分享自微信公众号 - 相约机器人(xiangyuejiqiren),作者:代码医生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • TensorFlow 2.0入门

    谷歌于2019年3月6日和7日在其年度TensorFlow开发者峰会上发布了最新版本的TensorFlow机器学习框架。这一新版本使用TensorFlow的方式...

    代码医生工作室
  • TensorFlow与PyTorch — 线性回归

    如果是深度学习和神经网络的新手,那么一定遇到过“ TensorFlow ”和“ PyTorch ” 这两个术语。这是在数据科学领域中使用的两个流行的深度学习框架...

    代码医生工作室
  • 耳朵生物识别技术 - 机器学习更进一步

    像使用面部,虹膜和手指的其他生物识别一样,耳朵作为生物识别包含大量特定且独特的特征,允许人类识别。耳朵形态在10岁后略有变化,并且医学研究表明,耳朵形状的显着变...

    代码医生工作室
  • vi文本乱码

    今天在使用VI命令的时候出现了一个很诡异的现象:进入后不能正常使用快捷键I、Q、WQ等,而是出现如下的特殊字符:

    幽鸿
  • 如何做招聘完成率的数据预警

    在数据分析里 ,我们经常会听见一个专业术语叫做数据预警,这个功能是指对一些关键指标,我们会有一个最低的预警数据,当你的指标达到或者接近这个值的时候,数据就...

    王佩军
  • 【每天一个数据分析师】几乎任何一种分析,都可以用矩阵式分析来引出思路

    论坛君 “每天一个数据分析师”在第五期采访到的是一位萌妹子Yuki,她毕业于复旦大学,目前在上海从事互联网金融行业的数据分析,主要从事业务和用户方向的数据分析和...

    小莹莹
  • (转载)ubuntu 安装 dbgsym (debug-info)

    本文转载自:http://www.oolap.com/2015-11-07-ubuntu-install-dbgsym

    chudi
  • Linux 下设置SVN DIFF

    注:此文源于zhenzhen的帮助 vim ~/.subversion/config  在svn 的配置文件中添加一行 diff-cmd = /usr/loca...

    知然
  • 智能视频分析-工地安全帽识别

      安全生产一直是工地生产中很重要的一部分,只有保障了工人的安全,才能保证企业的利益。安全帽作为保护、防护的重要防范手段,一直是各大企业要求员工佩戴的,可还是发...

    倍特威视
  • 10年经验+20个数据管理项目,我总结出这4个用数据改变企业的精华

    提个问题:数据分析要发展到什么程度,才能渗透到企业的管理中?做了近十年的数据分析工作,也参与过大大小小20个企业的数据化管理项目,谈一谈我的看法:

    大数据分析不是事儿

扫码关注云+社区

领取腾讯云代金券