Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

ANKIT CHOUDHARY作者吴金笛校对张睿毅翻译

使用Python的OpenAI Gym对Deep Q-Learning的实操介绍(附学习资源)

本文作者通过实战介绍了Deep Q-Learning的概念。

导言

我一直对游戏着迷。在紧凑的时间线下执行一个动作似乎有无限的选择——这是一个令人兴奋的体验。没有什么比这更好的了。

所以当我读到DeepMind提出的不可思议的算法(如AlphaGo和AlphaStar)时,我被吸引了。我想学习如何在我自己的机器上制造这些系统。这让我进入了深度强化学习(Deep RL)的世界。

即使你不喜欢玩游戏,深度强化学习也很重要。只用看当前使用深度强化学习进行研究的各种功能就知道了:

那工业级应用程序呢?这里有两个最常见的深度强化学习用例:

  • 谷歌云自动机器学习(Google’s Cloud AutoML)

  • 脸书Horizon平台(Facebook's Horizon Platform)

深度强化学习的范围是巨大的。现在是一个进入这个领域并并以此作为职业的好时机。

在这篇文章中,我的目标是帮助您迈出第一步,进入深度强化学习的世界。我们将使用强化学习中最流行的算法之一,Deep Q-Learning,来了解强化学习是怎样工作的。锦上添花的是什么呢?我们将使用python在一个很棒的案例研究中实现我们的所有学习。

目录

一、Q-Learning之路

二、为什么要做“深度”Q-Learning?

三、Deep Q-Learning的简介

四、与深度学习相比,深度强化学习面临的挑战

    4.1 目标网络

    4.2 经验回放

五、使用Keras & Gym 在Python中实现Deep Q-Learning

一、Q-Learning之路

在正式深度强化学习之前,您应该了解一些概念。别担心,我已经为你安排好了。

我以前写过很多关于强化学习的文章,介绍了多臂抽奖问题、动态编程、蒙特卡罗学习和时间差分等概念。我建议按以下顺序浏览这些指南:

  • 强化学习的基础学习:使用动态编程的基于模型的规划

    https://www.analyticsvidhya.com/blog/2018/09/reinforcement-learning-model-based-planning-dynamic-programming/ 

  • 强化学习指南:从零开始用Python解决多臂抽奖问题

    https://www.analyticsvidhya.com/blog/2018/09/reinforcement-multi-armed-bandit-scratch-python/?utm_source=blog&utm_medium=introduction-deep-q-learning-python

  • 强化学习:通过OpenAI GymToolkit介绍蒙特卡洛学习

    https://www.analyticsvidhya.com/blog/2018/11/reinforcement-learning-introduction-monte-carlo-learning-openai-gym/?utm_source=blog&utm_medium=introduction-deep-q-learning-python 

  • 蒙特卡罗树搜索简介:DeepMind的AlphaGo背后的游戏改变算法

    https://www.analyticsvidhya.com/blog/2019/01/monte-carlo-tree-search-introduction-algorithm-deepmind-alphago/ 

  • 强化学习的基础:时间差(TD)学习介绍

    https://www.analyticsvidhya.com/blog/2019/03/reinforcement-learning-temporal-difference-learning/?utm_source=blog&utm_medium=introduction-deep-q-learning-python

这些文章足以从一开始就获得基本强化学习的详细概述。

但是,请注意,以上链接的文章绝不是读者理解Deep Q-Learning的先决条件。在探究什么是Deep Q-Learning及其实现细节之前,我们将快速回顾一下基本的强化学习概念。

  • 强化学习代理环境

强化学习任务是训练与环境交互的代理。代理通过执行操作到达不同的场景,称为状态。行动会带来正面和负面的回报。

代理只有一个目的,那就是最大限度地提高一段经历的总回报。这个经历是环境中第一个状态和最后一个或最终状态之间发生的任何事情。我们加强了代理的学习,以经验来执行最佳的行动。这是战略或原则。

让我们举一个非常流行的PubG游戏的例子:

  • 士兵是这里与环境互动的代理;

  • 状态就是我们在屏幕上看到的内容;

  • 一段经历是一个完整的游戏;

  • 动作包括向前、向后、向左、向右、跳跃、躲避、射击等;

  • 奖励是根据这些行动的结果确定的。如果士兵能够杀死敌人,那就获得一个正面的回报,而被敌人射杀是一个负面的回报。

现在,为了杀死敌人或得到正面的回报,需要一系列的行动。这就是延迟或延迟奖励的概念开始发挥作用的地方。强化学习的关键是学习执行这些序列并最大化回报。

  • 马尔科夫决策过程(MDP)

需要注意的一点是,环境中的每个状态都是其先前状态的结果,而先前状态又是其先前状态的结果。然而,存储所有这些信息,即使是在短时间的经历中,也变得不可行。

为了解决这一问题,我们假设每个状态都遵循马尔可夫属性,即每个状态仅依赖于先前的状态以及从该状态到当前状态的转换。看看下面的迷宫,以更好地了解这项工作背后的思想:

现在,有两个场景具有两个不同的起点,代理通过不同的路径到达相同的倒数第二状态。现在,不管代理通过什么路径到达红色状态。走出迷宫并到达最后一个状态的下一步是向右走。显然,我们只需要红色/倒数第二状态的信息就可以找到下一个最佳的行为,这正是马尔可夫属性所暗示的。

  • Q 学习

假设我们知道每一步行动的预期回报。这基本上就像是给代理的一张备忘单!我们的代理会确切知道该采取什么行动。

它将执行最终产生最大总奖励的动作序列。总回报也称为Q值,我们将把我们的策略公式化为:

上述方程表明,在状态s和执行动作a产生的Q值是立即奖励r(s, a)加上下一状态s’ 可能的最高Q值。这里的gamma是折现系数,它控制着未来奖励的贡献。

q(s’, a)又取决于q(s”, a),该q(s”, a)将具有伽马平方系数。因此,Q值取决于未来状态的Q值,如下所示:

调整gamma的值将减少或增加未来奖励的贡献。

由于这是一个递归方程,我们可以从对所有Q值进行任意假设开始。根据经验,它将收敛到最优策略。在实际情况下,这是作为更新实现的:

其中alpha是学习速率或步长。这就决定了新获取的信息在多大程度上会覆盖旧信息。

二、为什么选择“深度”Q-Learning

Q-Learning是一个简单但功能强大的算法,可以为我们的代理提供一个备忘单,有助于代理准确地确定要执行的操作。

但如果这张备忘单太长怎么办?设想一个有10000个状态的环境,每个状态有1000个行动。这将创建一个包含1000万个单元格的表。事情很快就会失控!

很明显,我们不能从已经探索过的状态中推断出新状态的Q值。这有两个问题:

  • 首先,保存和更新该表所需的内存量将随着状态数的增加而增加。

  • 第二,探索每个状态创建所需Q表所需的时间量是不现实的。

这里有一个想法——如果我们用机器学习模型(比如神经网络)来估计这些Q值会怎么样?好吧,这就是DeepMind算法背后的想法,它使得谷歌以5亿美元收购DeepMind! 

三、Deep Q-Learning的简介

深度Q学习中,我们使用神经网络来近似Q值函数。状态作为输入,所有可能动作的Q值作为输出生成。Q-Learning和深度Q-Learning之间的比较如下:

那么,使用深度Q学习网络(DQNs)强化学习的步骤是什么?

  1. 所有过去的经验都由用户存储在内存中。

  2. 下一步动作由Q网络的最大输出决定。

  3. 这里的损失函数是预测的Q值和目标Q值–Q*的均方误差。

这基本上是一个回归问题。然而,我们不知道这里的目标或实际价值,因为我们正在处理一个强化学习问题。回到由贝尔曼方程导出的Q值更新方程。我们有:

绿色部分表示目标。我们可以说,它是在预测自己的价值,但由于R是无偏的真实回报,网络将使用反向传播更新其梯度,最终收敛

四、与深度学习相比,深度强化学习面临的挑战

到目前为止,这一切看起来都很棒。我们了解了神经网络如何帮助代理学习最佳行动。然而,当我们将深度强化学习深度学习(DL)进行比较时,存在一个挑战:

  • 非固定或不稳定目标

让我们回到深度Q学习伪代码

正如您在上面的代码中看到的,目标在每次迭代中都在不断地变化。在深度学习中,目标变量不变,因此训练是稳定的,这对强化学习来说则不然。

综上所述,我们经常依赖于政策或价值函数来加强学习,以获取行动样本。然而,随着我们不断学习要探索什么,这种情况经常发生变化。当我们玩游戏时,我们会更多地了解状态和行为的基本真值,因此输出也在变化。

因此,我们尝试学习映射不断变化的输入和输出。但是解决办法是什么呢?

4.1 目标网络

由于同一个网络正在计算预测值和目标值,这两者之间可能存在很大的差异。因此,我们可以使用两个神经网络来代替使用1个神经网络来学习。

我们可以使用单独的网络来估计目标。该目标网络与函数逼近器具有相同的结构,但参数是固定的。对于每个C迭代(超参数),预测网络中的参数都会复制到目标网络中。这将导致更稳定的训练,因为它保持目标功能不变(在一段时间之内):

4.2 经验回放

要执行经验回放,我们存储代理的经验 – et=(st,at,rt,st+1)

上面的陈述是什么意思?在模拟或实际经验中,系统不会在状态/动作对上运行Q-Learning,而是将为[状态、动作、奖励、下一个状态]发现的数据存储在一个大表中。

让我们用一个例子来理解这一点。

假设我们试图构建一个视频游戏机器人,其中游戏的每一帧表示不同的状态。在训练过程中,我们可以从最后100000帧中随机抽取64帧来训练我们的网络。这将使我们得到一个子集,其中样本之间的相关性较低,也将提供更好的采样效率。

  • 结合到一起

到目前为止我们学到的概念是什么?它们结合在一起,形成了用于在Atari游戏中实现人类级性能的深度Q学习算法(仅使用游戏的视频帧)。

我在下面列出了Deep Q-Network(DQN)中涉及的步骤:

  1. 对游戏画面(状态S)进行预处理并反馈给DQN,DQN将返回状态下所有可能动作的Q值

  2. 使用epsilon贪婪策略选择操作。用概率epsilon,我们选择一个随机动作a并且概率为1-epsilon,我们选择一个最大Q值的动作,例如a=argmax(Q(s, a, w))

  3. 在s状态下执行此操作并移动到新的s状态以获得奖励。此状态s'是下一个游戏屏幕的预处理图像。我们将此转换存储在重播缓冲区中,如<s, a, r, s'>

  4. 接下来,从重放缓冲区中随机抽取若干批转换并计算损失。

  5. 已知:,即目标Q与预测Q的平方差。

  6. 根据我们的实际网络参数进行梯度下降,以尽量减少损失。

  7. 每次C迭代后,将我们的实际网络权重复制到目标网络权重

  8. 对m个经历重复这些步骤

五、使用Keras & OpenAI Gym 通过Python实现Deep Q-Learning

好吧,这样我们对深度Q学习的理论方面有了很好的了解。现在就开始行动怎么样?没错——让我们启动我们的python notebook吧!

我们会创造一个可以玩CartPole的代理。我们也可以使用Atari游戏,但是训练一个代理来玩需要一段时间(从几个小时到一天)。我们的方法背后的思想将保持不变,所以你可以在你的机器上的Atari游戏上尝试这个。

CartPole是OpenAI gym(游戏模拟器)中最简单的环境之一。正如你在上面的动画中看到的,CartPole的目标是平衡一个杆,这个杆与一个运动车顶部的接合处相连。

这里有四种由状态给出的信息(如杆的角度和推车的位置),而不是像素信息。代理可以通过执行一系列0或1操作来移动车,将车向左或向右推。

我们将在这里使用Keras-rl库,它允许我们实现深度Q学习

第一步:安装keras-rl库

从终端运行以下代码块:

git clone https://github.com/matthiasplappert/keras-rl.git

cd keras-rl

python setup.py install

第二步: 安装Cartpole环境的依赖项

假设你已安装pip,你需要安装以下库:

pip install h5py

pip install gym

第三步:开始吧!

首先,我们导入必需的模块:

import numpy as np

import gym


from keras.models import Sequential

from keras.layers import Dense, Activation, Flatten

from keras.optimizers import Adam

from rl.agents.dqn import DQNAgent

from rl.policy import EpsGreedyQPolicy

from rl.memory import SequentialMemory

之后,设置相关参数

ENV_NAME = 'CartPole-v0'

# Get the environment and extract the number of actions available in the Cartpole problem

env = gym.make(ENV_NAME)

np.random.seed(123)

env.seed(123)

nb_actions = env.action_space.n

下一步,我们构造一个非常简单的单一隐含层神经网络模型:

model = Sequential()

model.add(Flatten(input_shape=(1,) + env.observation_space.shape))

model.add(Dense(16))

model.add(Activation('relu'))

model.add(Dense(nb_actions))

model.add(Activation('linear'))

print(model.summary())

现在,配置和编译我们的代理。我们将把我们的策略设置为epsilon greedy,把我们的内存设置为顺序内存,因为我们希望存储我们所执行的操作的结果以及每个操作获得的奖励。

policy = EpsGreedyQPolicy()

memory = SequentialMemory(limit=50000, window_length=1)

dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10,

target_model_update=1e-2, policy=policy)

dqn.compile(Adam(lr=1e-3), metrics=['mae'])

#好吧,现在该学点东西了!我们把这里的训练具象化展示出来,但这会大大降低训练的速度。 

dqn.fit(env, nb_steps=5000, visualize=True, verbose=2)

测试我们的强化学习模型:

dqn.test(env, nb_episodes=5, visualize=True)

这将是我们模型的输出:

不错!祝贺您建立了第一个深度Q学习模型。

最后几点

Openai Gym提供了几种将DQN融合到Atari游戏中的环境。那些处理过计算机视觉问题的人可能会直观地理解这一点,因为这些问题的输入在每个时间步骤都是游戏的直接帧,因此该模型由基于卷积神经网络的体系结构组成。

有一些更先进的深度强化学习技术,如双DQN网络,双DQN和优先经验回放,可以进一步改善学习过程。这些技巧让我们用更少的片段获得更好的分数。我将在以后的文章中介绍这些概念。

我建议您在Cartpole之外的至少一个环境中尝试DQN算法,以练习和理解如何调整模型以获得最佳结果。

原文标题:

A Hands-On Introduction to Deep Q-Learning using OpenAI Gym in Python

原文链接:https://www.analyticsvidhya.com/blog/2019/04/introduction-deep-q-learning-python/ 

THU数据派
THU数据派

THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。

工程Python强化学习深度Q学习OpenAIGym
6
相关数据
DeepMind机构

DeepMind是一家英国的人工智能公司。公司创建于2010年,最初名称是DeepMind科技(DeepMind Technologies Limited),在2014年被谷歌收购。在2010年由杰米斯·哈萨比斯,谢恩·列格和穆斯塔法·苏莱曼成立创业公司。继AlphaGo之后,Google DeepMind首席执行官杰米斯·哈萨比斯表示将研究用人工智能与人类玩其他游戏,例如即时战略游戏《星际争霸II》(StarCraft II)。深度AI如果能直接使用在其他各种不同领域,除了未来能玩不同的游戏外,例如自动驾驶、投资顾问、音乐评论、甚至司法判决等等目前需要人脑才能处理的工作,基本上也可以直接使用相同的神经网上去学而习得与人类相同的思考力。

https://deepmind.com/
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

深度强化学习技术

强化学习(Reinforcement Learning)是主体(agent)通过与周围环境的交互来进行学习。强化学习主体(RL agent)每采取一次动作(action)就会得到一个相应的数值奖励(numerical reward),这个奖励表示此次动作的好坏。通过与环境的交互,综合考虑过去的经验(exploitation)和未知的探索(exploration),强化学习主体通过试错的方式(trial and error)学会如何采取下一步的动作,而无需人类显性地告诉它该采取哪个动作。强化学习主体的目标是学习通过执行一系列的动作来最大化累积的奖励(accumulated reward)。 一般来说,真实世界中的强化学习问题包括巨大的状态空间(state spaces)和动作空间(action spaces),传统的强化学习方法会受限于维数灾难(curse of dimensionality)。借助于深度学习中的神经网络,强化学习主体可以直接从原始输入数据(如游戏图像)中提取和学习特征知识,然后根据提取出的特征信息再利用传统的强化学习算法(如TD Learning,SARSA,Q-Learnin)学习控制策略(如游戏策略),而无需人工提取或启发式学习特征。这种结合了深度学习的强化学习方法称为深度强化学习。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

Q值技术

Q值是原子核物理学及核化学中的名词,核反应的Q值是指核反应所产生的能量: Q=E(Reactants)-E(Products), Q值为正的核反应是放热反应,Q值为负的核反应是吸热反应 Q值也用在粒子物理学中,例如萨晋定律(Sargent's rule)中提到弱相互作用的反应速度和Q值的五次方成正比。Q值是静止的粒子衰变时产生的动能,例如中子的衰变: Q=(m_n - m_p - m_v - m_e)c^2 其中m_n是中子的质量,m_p是质子的质量,m_ν是电中微子的质量,m_e是电子的质量

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

规划技术

人工智能领域的「规划」通常是指智能体执行的任务/动作的自动规划和调度,其目的是进行资源的优化。常见的规划方法包括经典规划(Classical Planning)、分层任务网络(HTN)和 logistics 规划。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

伪代码技术

伪代码,又称为虚拟代码,是高层次描述算法的一种方法。它不是一种现实存在的编程语言;它可能综合使用多种编程语言的语法、保留字,甚至会用到自然语言。 它以编程语言的书写形式指明算法的职能。相比于程序语言它更类似自然语言。它是半形式化、不标准的语言。

蒙特卡罗树搜索技术

蒙特卡洛树搜索(英语:Monte Carlo tree search;简称:MCTS)是一种用于某些决策过程的启发式搜索算法,最引人注目的是在游戏中的使用。一个主要例子是电脑围棋程序,它也用于其他棋盘游戏、即时电子游戏以及不确定性游戏。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

深度Q学习技术

Q学习是一种无模型(model-free)的强化学习方法,学习如何在给定(有限)马尔可夫决策过程(MDP)找到最优的动作选择策略。Q学习算法的核心是根据旧的Q值和新的Q值估计进行权重平均的一个值迭代更新(value iteration update)迭代更新的Q函数最终给出了主体在给定状态下采取给定行动的预期效用,当这种行动价值函数被学习时,主体可通过简单地选择在每个状态中具有最高价值的行为来构建最优策略(optimal policy)。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

贝尔曼方程技术

“贝尔曼方程(Bellman Equation)”也被称作“动态规划方程(Dynamic Programming Equation)”,由理查·贝尔曼(Richard Bellman)发现。贝尔曼方程是动态规划(Dynamic Programming)这种数学最佳化方法能够达到最佳化的必要条件。此方程将“决策问题在特定时间点的值”以“来自初始选择的报酬 及 由初始选择衍生的决策问题的值”的形式表示。藉这个方式将动态最佳化问题变成较简单的子问题,而这些子问题遵守由贝尔曼所提出的“最佳化原理”。

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

AlphaStar技术

AlphaStar是2019年1月DeepMind推出的打星际争霸2的AI系统。在1月的首次亮相中,DeepMind播放的比赛视频显示AlphaStar击败了两名人类职业选手TOL与MaNa,引起了业内极大的关注。DeepMind 官方博客介绍,AlphaStar 的行为是由一种深度神经网络生成的,该网络从原数据界面(单位列表与它们的特性)接收输入数据,输出构成游戏内行为的指令序列。具体来说,该神经网络使用了一个 transformer 作为躯干,结合了一个深度 LSTM 核、一个带有 pointer 网络的自动回归策略 head 以及一个中心价值基线。

推荐文章
暂无评论
暂无评论~