[深度强化学习] blog翻译-使用Keras与Gym仿真环境进

作者: 互联网资讯  发布:2019-12-01

3、强化学习

·epsilon exploration rate,这个比率表征一个agent随机选择行为的程度

2、无监督学习

batches = min(batch_size, len(self.memory))
batches = np.random.choice(len(self.memory), batches)

本文将简单介绍这篇论文的核心内容,并着重介绍关于游戏 AI 中深度学习技术历史演化的部分。

“remember()”只是简单的存储上述这些数据:

4、终身适应

 

上图显示了各种深度学习方法以及它们之间互相影响的示意图(下面的部分相当于对此图的长篇解读)。图中的每一种方法都被着色了,以显示出用于对比的游戏基准。

有一些超参数是强化学习agent所必需的,你会在下面一次又一次的看到这些参数。

当玩家总是在 FPS 地图中的相同位置遭伏击时,人类玩家可以快速改变其行为;然而当前的大多数智能体则需要昂贵的再训练才能适应这种情况以及它们在训练期间未遇到的其他不可预见的情况。

算法会经过多个阶段训练agent

RNN 通常应用于时间序列数据,其中网络的输出取决于先前时间步骤的激活。除了网络的先前隐藏状态与下一个输入一起反馈给网络外,RNN 的训练过程类似于前馈网络。这就允许网络通过记忆先前的激活而变得具有上下文感知,这在那种单个观察不代表完整状态的游戏中是非常有用的。对于 shi'pi 视频游戏,通常使用一堆卷积层,然后是循环层和完全连接的前馈层。

 

深度学习方法的快速发展无疑受益于公开数据集上的评测。游戏 AI 也是类似,一个游戏 AI 算法的好坏完全由游戏中得分多少或者能否赢得比赛而决定。像 IEEE 计算智能和游戏大会(IEEE Conference on Computational Intelligence and Games)这样的会议在各种游戏环境中进行了广泛的比赛。

 agent如何选择行为?

金沙澳门官网dkk 1

金沙澳门官网dkk 2

金沙澳门官网dkk 3

我将会解释一切,不需要你对强化学习有任何的先决知识。

解决单个问题并不智能,如何设计能够玩所有视频游戏的通用游戏 AI agent,是一个重要的挑战。

上面的代码将打乱memory中的bathces的索引数。举个例子,如果batchce为[1,5,2,7],每个数据代表在memory中的索引数1,5,2,7。

金沙澳门官网dkk 4

model.fit(state, target_f, nb_epoch=1, verbose=0)

7、处理极大的决策空间

对于DQN来说一个挑战就是运用在算法中的神经网络区域通过覆盖掉先前学习的经验来遗忘它们。所以我们需要记录下先前的经验与观察值以便再用这些先前数据训练模型。我们将调用代表经验的数组数据“memory”和“remember()”函数来添加状态,回报,和下次状态到“memory”中。

本文为机器之心编译,转载请联系本公众号获得授权。

·epsilon_decay上述参数的衰减率。我们希望随着agent更擅长游戏的同时减少它探索的次数。

DL技术历史沿革

我在上面分别描述了agent算法的每一部分。下面的代码实现了上述讨论的一切并编写了一个整洁的类,叫做“DQNAgent”

Montezuma's Revenge 等以稀疏奖励为特征的游戏仍然是大多数深度强化学习方法的挑战;虽然最近将 DQN 与内在动机或专家演示相结合的进步可以提供帮助,但是对于当前深度 RL 方法而言,具有稀疏奖励的游戏仍然是一个挑战。

 

参与:Geek AI、贾伟

强化学习是一种允许你创造能从环境中交互学习的AI agent 的机器学习算法。就跟我们学习骑自行车一样,这种类型的AI通过试错来学习。如上图所示,大脑代表AI agent并在环境中活动。当每次行动过后,agent接收到环境反馈。反馈包括回报(reward)和环境的下个状态(state)。回报由模型设计者定义。如果类比人类学习自行车,我们会将车从起始点到当前位置的距离定义为回报。

金沙澳门官网dkk 5

  

Gorila 是第一个基于 DQN 建立的异步方法,接着是 A3C 方法,它为 actor-critic 方法使用了多个异步智能体。2016 年底,UNREAL 进一步扩展了这一概念,它将已有的工作与辅助学习(auxiliary learning)结合起来,从而应对稀疏反馈环境。从那时起,出现了许多对 A3C 技术额外的扩展。IMPALA 通过重点关注一个被训练能够玩所有 Atari 游戏的智能体,对此进行了进一步的扩展。2018 年,随着 Ape-X 的诞生,大规模分布式学习在此领域的研究也得以继续发展。

# Neural Net for Deep Q Learning

# Sequential() creates the foundation of the layers.
model = Sequential()

# Dense is the basic form of a neural network layer
# Input Layer 4 and Hidden Layer with 128 nodes
model.add(Dense(64, input_dim=4, activation='tanh')) 
# Hidden layer with 128 nodes
model.add(Dense(128, activation='tanh'))
# Hidden layer with 128 nodes
model.add(Dense(128, activation='tanh'))
# Output Layer with 2 nodes
model.add(Dense(2, activation='linear'))

# Create the model based on the information above
model.compile(loss='mse',
              optimizer=RMSprop(lr=self.learning_rate))

目前几乎所有关于 DL 玩游戏的研究都旨在创造尽可能获得高分的智能体。但出于游戏测试、创建教程和演示游戏的目的,能够创建具有特定技能水平的智能体可能很重要。

CartPole是OpenAI gym中最简单的一个环境。正如你在文章一开始看到的那个gif一样,CartPole的目的就是杆子平衡在移动的小车上。除了像素信息,还有四种信息可以用作状态,像是,杆子的角度和车在滑轨的位置。agent可以通过施加左(0)或右(1)的动作,使小车移动。

1、监督学习

# Deep-Q learning Agent
class DQNAgent:
    def __init__(self, env):
        self.env = env
        self.memory = []
        self.gamma = 0.9  # decay rate
        self.epsilon = 1  # exploration
        self.epsilon_decay = .995
        self.epsilon_min = 0.1
        self.learning_rate = 0.0001
        self._build_model()

    def _build_model(self):
        model = Sequential()
        model.add(Dense(128, input_dim=4, activation='tanh'))
        model.add(Dense(128, activation='tanh'))
        model.add(Dense(128, activation='tanh'))
        model.add(Dense(2, activation='linear'))
        model.compile(loss='mse',
                      optimizer=RMSprop(lr=self.learning_rate))
        self.model = model

    def remember(self, state, action, reward, next_state, done):
        self.memory.append((state, action, reward, next_state, done))

    def act(self, state):
        if np.random.rand() <= self.epsilon:
            return env.action_space.sample()
        act_values = self.model.predict(state)
        return np.argmax(act_values[0])  # returns action

    def replay(self, batch_size):
        batches = min(batch_size, len(self.memory))
        batches = np.random.choice(len(self.memory), batches)
        for i in batches:
            state, action, reward, next_state, done = self.memory[i]
            target = reward
            if not done:
              target = reward + self.gamma * 
                       np.amax(self.model.predict(next_state)[0])
            target_f = self.model.predict(state)
            target_f[0][action] = target
            self.model.fit(state, target_f, nb_epoch=1, verbose=0)
        if self.epsilon > self.epsilon_min:
            self.epsilon *= self.epsilon_decay

金沙澳门官网dkk 6

·learning_rata 这个参数决定了神经网络在每次迭代时的学习率(学习程度)。

金沙澳门官网dkk 7

"replay()"从存储在“memory”中的数据(经验)中训练神经网络。首先,我们从“memory”中抽出部分数据并叫他们“bathces”

虽然现有数据可以让 agent 快速地学习到最佳实践,但由此获得的模型往往也是脆弱的;可用的数据生产成本可能很高,并且可能缺少 agent 应该处理的关键方案。对于游戏的玩法,算法也仅限于数据中可用的策略,而不能自行探索新算法。因此,在游戏中监督算法通常通过与强化学习算法及一些额外训练相结合来使用。

在Q学习算法中,有一种函数被称为Q函数,它用来估计基于一个状态的回报。同样地,在DQN中,我们使用一个神经网络估计基于状态的回报函数。我们将在之后细致地讨论这一部分工作。

DQN 是一种影响巨大的算法,它将基于梯度的深度学习应用于基于像素的视频游戏中,其最初被应用于 Atari 基准测试。请注意,还存在一些更早的方法,但是都没有 DQN 成功。Double DQN 和 Dueling DQN 是使用多个网络改进估计过程的早期的对 DQN 的扩展。DRQN 则采用递归神经网络作为 Q 网络。Prioritized DQN 是另一种早期的扩展,它加入了改进后的经验回放采样技术。Boostrapped DQN 建立在 Double DQN 的基础上,采用不同的改进后的采样策略。在 Atari 游戏中对 DQN 的进一步改进包括:C51 算法,该算法基于 DQN,但改变了 Q 函数;使网络随机化从而帮助模型进行探索的 Noisy-Nets;同样从示例中学习的 DQfD;结合了许多最先进的技术的 Rainbow 模型。

综述

演化计算技术也见证了视频游戏的复兴。首先 Salimans 等人证明了进化策略在此领域可以与深度强化学习一争高下 [121]。随后,Uber AI 又发表了两篇论文:一篇表明不涉及求导的进化算法可以与深度强化学习相匹敌,另一篇是对进化策略的扩展。这些工作都得益于简单的并行化处理,并可能在探索过程中具有一定的优势。

Cartpole游戏

6、可调节的性能水平

记忆(remember)

人工神经网络的架构大致可分为两大类。一类是前馈和递归神经网络,前馈网络采用单个输入(例如游戏状态的表示),并输出每个可能动作的概率值。另一类是卷积神经网络,它由可训练的滤波器组成,适用于处理图像数据,例如来自视频游戏屏幕的像素。

keras库使基础神经网络的使用变得非常简单。下面的代码会生成一个空的神经网络模型。“activation”,“loss”与“optimizer”是定义神经网络特征的参数但我们不打算在这里讨论它们。

游戏类型和研究平台

结果

Doom 是 2016 年被使用的另一个新对比基准。在这款游戏上的大部分工作都是针对为 Atari 设计的方法的扩展,从而处理更丰富的数据。A3C +递进学习(curriculum learning)的方法提出将递进学习与 A3C 结合使用。DRQN +辅助学习的方法通过在训练过程中加入额外的奖励来扩展 DRQN。DQN + SLAM 融合了 DQN 与映射未知环境的技术。

回放(replay)

5、类人游戏

 

DFP 是唯一没有扩展在 Atari 使用过的技术的方法。正如 UCT 对 Atari 游戏的分类结果那样,他们将台球分类为以对象为中心的预测任务 [36],将赛车分类为直接感知任务,DFP 使用监督学习来对游戏进行学习。除了 UCT 的分类结果,所有这些技术都学着直接预测游戏的未来状态,并从这些信息中做出预测。这些不同年代的工作,没有任何工作之间是相互引用的。除了直接感知,在赛车游戏领域唯一独特的工作是 Deep DPG,它扩展了 DQN 将其用于连续控制。这项技术已经游戏中被扩展到机器人足球。

·gamma discount rate(折扣因子),以便计算未来的折扣回报。

金沙澳门官网dkk,我们感兴趣的是,在不存在前向模型的情况下,使用像素数据或特征向量,玩好一款特定的视频游戏(不同于围棋等棋盘游戏)的方法。

prediction = model.predict(state)

在引入 DQN 前后,在 Atari 游戏中被采用的另一种方法是置信域策略优化。该方法更新一个根据环境更新的替代目标函数。2017 年晚些时候,近端策略优化作为一种更鲁棒、更简单的替代优化方案被引入,它也借鉴了 A3C 的创新指出。有些扩展方法是专门为游戏「蒙特祖玛的复仇」(ALE 基准测试中的一款游戏)而开发的,但由于奖励信息稀疏和信息隐藏问题,这款游戏尤其困难。在蒙特祖玛的复仇中表现最好的算法是通过内在动机和层次学习扩展 DQN。吃豆人也是一款非常著名的 Atari 游戏,研究人员针对其不同的部分单独学习奖励函数,以使智能体对新环境更鲁棒。

2.但是出界,游戏结束

虽然深度学习在视频游戏中取得了显着成效,但仍存在许多重要的开放性挑战。事实上,如果从未来十年或二十年来回顾现在的研究,我们很可能会将现在的研究看做重大研究的初期。在论文中,作者将当前游戏 AI 所面临的挑战分为四大类——代理模型属性、游戏产业、游戏中的学习模型、计算资源等,并做了详细分析。我们在此仅对「代理模型属性」的开放问题作以简单介绍。

Gym使游戏环境的交互非常方便:

游戏中的深度学习

·epsilon_min 这个参数是我们希望agent采取的最少的探索次数。

金沙澳门官网dkk 8

 

2015 年,DQN 被应用到了文本冒险游戏中。不久之后,它被修改为针对特定于语言的文字冒险游戏的架构,并使用「state-action」对的相关性作为 Q 值。关于这些游戏的大部分工作都重点关注显式的语言建模上。「golovin ai agent」和「Affordance Based Action Selection」都利用神经网络学习了语言模型,该语言模型为智能体玩游戏提供动作选择机制。最近,在 2018 年,研究人员再次将 DQN 与一个动作消融网络(Action Elimination Network)联合使用。

一个大师级CartPole玩家都诞生了。

论文中对各种与深度学习相关的流行游戏及研究平台的特征及面临的挑战做了详尽的介绍,这里不再一一赘述。

 

摘要:在本文中,我们将回顾近年来深度学习的进展,重点关注深度学习技术如何被用于玩不同类型的电子游戏,如第一人称射击游戏、街机游戏和实时策略游戏。我们分析了不同的游戏类型对深度学习系统的独特要求,并着重讨论了将这些机器学习方法应用于视频游戏时重要的开放性挑战(如通用的游戏玩法、应对巨大的决策空间和稀疏的奖励信号)。

2013年,在DeepMind 发表的著名论文Playing Atari with Deep Reinforcement Learning中,他们介绍了一种新算法,深度Q网络(DQN)。文章展示了AI agent如何在没有任何先验信息的情况下通过观察屏幕学习玩游戏。结果令人印象深刻。这篇文章开启了被我们成为“深度强化学习”的新时代。这种学习算法是混合了深度学习与强化学习的新算法。

大多数方法建模的智能体通常只考虑游戏分数。但如果期望人类在视频游戏中与基于人工智能的机器人对抗或合作,其他因素也会发挥作用。类人游戏是一个活跃的研究领域。

 

3、多智能体学习

编写深度Q学习agent的代码

论文标题:Deep Learning for Video Game Playing

·episodes 我们想让agent玩游戏的次数

金沙澳门官网dkk 9

def act(self, state):
    if np.random.rand() <= self.epsilon:
        # The agent acts randomly
        return env.action_space.sample()

    # Predict the reward value based on the given state
    act_values = self.model.predict(state)

    # Pick the action based on the predicted reward
    return np.argmax(act_values[0])

选自arXiv

深度强化学习

金沙澳门官网dkk 10

 

值得注意的是,尽管这篇文章收集并讨论了大量的游戏 AI,但还是有很多在本文中没有涉及到——游戏 AI 是一个广阔而多样的领域。这篇论文的重点在于深度学习方法如何更好地玩视频游戏,而关于如何以靠谱的、有趣的或与人类似的方式玩游戏的研究也有很多。人工智能技术也被用于对玩家的行为、经验或偏好建模,或被用于生成游戏内容(如游戏难度、贴图或规则)。深度学习并不是游戏中唯一使用的人工智能方法。其它比较著名的方法,例如还包括蒙特卡罗树搜索和演化计算。在接下来的内容中,读者需要记住,这篇综述论文涉及的范围还是很有限的。

参考

链接:https://arxiv.org/abs/1708.07902

def remember(self, state, action, reward, next_state, done):
    self.memory.append((state, action, reward, next_state, done))

本文由金沙澳门官网dkk发布于互联网资讯,转载请注明出处:[深度强化学习] blog翻译-使用Keras与Gym仿真环境进

关键词: