使用 Python 进行 AI – 强化学习


在本章中,您将详细了解使用 Python 进行 AI 强化学习的概念。

强化学习基础知识

这种类型的学习用于基于批评信息来强化或强化网络。也就是说,在强化学习下训练的网络会从环境中接收一些反馈。然而,反馈是评估性的,而不是像监督学习那样具有指导性。根据此反馈,网络执行权重调整,以便将来获得更好的批评信息。

这个学习过程类似于监督学习,但我们的信息可能非常少。下图给出了强化学习的框图 -

强化学习基础知识

构建模块:环境和代理

环境和代理是人工智能强化学习的主要构建模块。本节详细讨论它们 -

代理人

代理是任何可以通过传感器感知其环境并通过效应器对该环境采取行动的东西。

  • 人类代理具有与传感器平行的感觉器官,例如眼睛、耳朵、鼻子、舌头和皮肤,以及其他器官,例如手、腿、嘴,作为效应器。

  • 机器人代理取代了传感器的摄像头和红外测距仪,以及效应器的各种电机和执行器。

  • 软件代理将位串编码为其程序和操作。

代理术语

以下术语在人工智能强化学习中更常用 -

  • 代理的绩效衡量标准- 它是决定代理成功程度的标准。

  • 代理的Behave- 这是代理在任何给定的感知序列之后执行的操作。

  • 感知- 它是代理在给定实例下的感知输入。

  • 感知序列- 这是迄今为止代理所感知的所有历史。

  • 代理功能- 它是从戒律序列到行动的映射。

环境

有些程序在完全人造的环境中运行,仅限于键盘输入、数据库、计算机文件系统和屏幕上的字符输出。

相比之下,一些软件代理,例如软件机器人或软机器人,存在于丰富且无限的软机器人领域中。该模拟器有一个非常详细复杂的环境。软件代理需要从大量的实时操作中进行选择。

例如,设计用于扫描客户的在线偏好并向客户展示感兴趣的商品的软机器人可以在真实人工环境中工作。

环境特性

环境具有多重属性,如下所述 -

  • 离散/连续- 如果环境的不同、明确定义的状态数量有限,则环境是离散的,否则是连续的。例如,国际象棋是离散环境,而驾驶是连续环境。

  • 可观察/部分可观察- 如果可以从感知中确定每个时间点环境的完整状态,则它是可观察的;否则只能部分观察到。

  • 静态/动态- 如果代理运行时环境没有改变,则它是静态的;否则它是动态的。

  • 单代理/多代理- 环境可能包含其他代理,这些代理可能与代理的类型相同或不同。

  • 可访问/不可访问- 如果代理的感觉装置可以访问环境的完整状态,则该代理可以访问该环境;否则无法访问。

  • 确定性/非确定性- 如果环境的下一个状态完全由当前状态和代理的动作决定,则环境是确定性的;否则它是不确定的。

  • 情景/非情景- 在情景环境中,每个情景都由代理感知然后采取行动组成。其动作的质量仅取决于剧集本身。后续剧集不依赖于前一剧集中的动作。情景环境要简单得多,因为代理不需要提前思考。

环境特性

使用Python构建环境

为了构建强化学习代理,我们将使用OpenAI Gym包,可以借助以下命令进行安装 -

pip install gym

OpenAI Gym 中有多种环境,可用于多种目的。其中很少有Cartpole-v0、Hopper-v1MsPacman-v0。它们需要不同的引擎。OpenAI Gym的详细文档可以在https://gym.openai.com/docs/#environments找到。

以下代码显示了 cartpole-v0 环境的 Python 代码示例 -

import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
   env.render()
   env.step(env.action_space.sample())
使用Python构建环境

您可以用类似的方式构建其他环境。

使用 Python 构建学习代理

为了构建强化学习代理,我们将使用OpenAI Gym包,如下所示 -

import gym
env = gym.make('CartPole-v0')
for _ in range(20):
   observation = env.reset()
   for i in range(100):
      env.render()
      print(observation)
      action = env.action_space.sample()
      observation, reward, done, info = env.step(action)
      if done:
         print("Episode finished after {} timesteps".format(i+1))
         break
使用 Python 构建学习代理

观察推车杆是否可以自行平衡。