使用 Python 实现人工智能 – 强化学习

在本章中,您将详细了解使用 Python 实现人工智能的强化学习概念。

强化学习基础知识

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

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

强化学习基础

构建模块:环境和代理

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

代理

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

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

  • 机器人代理用摄像头和红外测距仪代替传感器,用各种电机和执行器代替效应器。

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

代理术语

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

  • 代理的性能衡量标准 − 它是决定代理成功程度的标准。

  • 代理的行为 − 它是代理在任何给定的感知序列之后执行的操作。

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

  • 感知序列 − 它是代理迄今为止所感知到的所有事物的历史记录。

  • 代理功能 −它是从指令序列到动作的映射。

环境

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

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

例如,一个旨在扫描客户在线偏好并向客户展示有趣项目的软机器人可以在真实人工环境中工作。

环境属性

环境具有如下所述的多种属性 −

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

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

  • 静态/动态 − 如果代理在行动时环境没有变化,则该环境是静态的;否则该环境是动态的。

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

  • 可访问/不可访问 − 如果代理的感官器官可以访问环境的完整状态,则该代理可以访问该环境;否则无法访问。

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

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

环境属性

使用 Python 构建环境

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

pip install gym

OpenAI gym 中有各种环境,可用于各种目的。其中一些是 Cartpole-v0、Hopper-v1MsPacman-v0。它们需要不同的引擎。

以下代码显示了 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 构建学习代理

观察推杆可以自行保持平衡。