强化学习是人工智能领域中最酷的一个分支。它已经证明了自己的实力:在国际象棋、围棋甚至DotA 2等游戏中击败了世界冠军。本文将介绍一个基础的算法,并展示即使这样的算法也能在某些游戏中达到超人水平的表现。
强化学习涉及设计“智能体”,这些智能体与“环境”互动,并通过系统的试错学习如何“解决”环境。环境可以是象棋或赛车游戏,也可以是解决迷宫或实现目标的任务。智能体是执行活动的机器人。
智能体通过与环境互动获得“奖励”。智能体学习执行所需的“动作”,以最大化从环境中获得的奖励。如果智能体累积了某个预定义的奖励阈值,就认为环境被解决了。这种技术教会了机器人如何下超人类的国际象棋或双足机器人如何行走。
REINFORCE属于一类特殊的强化学习算法,称为策略梯度算法。这个算法的简单实现涉及创建一个“策略”:一个模型,它接受状态作为输入,并生成采取行动的概率作为输出。策略本质上是指导或作弊表,告诉智能体在每个状态下应该采取什么行动。然后,策略在每一步都会被迭代和微调,直到得到一个解决环境的策略。
策略通常是一个神经网络,它接受状态作为输入,并生成动作空间上的概率分布作为输出。策略的目标是最大化“期望奖励”。每个策略都会在环境中的每个状态下生成采取行动的概率。
智能体从这些概率中采样,并选择在环境中执行的动作。在一个阶段结束时,知道如果遵循该策略,智能体可以获得的总奖励。通过智能体采取的路径反向传播奖励,以估计给定策略下每个状态下的“期望奖励”。
这里的折扣奖励是智能体在未来收到的所有奖励的总和,由一个因子Gamma折扣。任何阶段的折扣奖励是智能体在下一步收到的奖励加上智能体在未来收到的所有奖励的折扣总和。
折扣因子是通过反向传播奖励为每个状态计算的。对于上述方程,这样计算期望奖励的:根据REINFORCE算法的原始实现,期望奖励是概率对数和折扣奖励的乘积之和。
实现REINFORCE涉及以下步骤:
在Pytorch上实现了这个算法,可以在上查看。
在Pong、CartPole和Lunar Lander上测试了这个算法。在云GPU上训练Pong和Lunar Lander需要超过96小时。这个算法有几个更新可以使其更快地收敛,在这里没有讨论或实现。如果对进一步学习感兴趣,可以查看Actor-Critic模型和近端策略优化。
状态:水平位置、水平速度、杆的角度、杆的角速度
动作:向左推车、向右推车
随机策略游戏:总奖励18
用REINFORCE训练的智能体:总奖励434
状态:状态是一个8向量的数组。不确定它们代表什么。
动作:0: 无操作,1: 启动左引擎,2: 启动下引擎,3: 启动右引擎
用REINFORCE训练的智能体:Lunar Lander用REINFORCE训练
训练这个要难得多。在GPU云服务器上训练了几天。
状态:图像
动作:向左移动拍子、向右移动拍子