深度强化学习之 PPO 算法
- 强化学习原理
- 马尔科夫决策过程
- 学习策略 = 基于行为价值 & 基于行为概率
- 策略梯度算法:计算状态下所有行为的概率
- 演员 - 评论家算法:一半基于行为价值,一半基于行为概率
- DQN 算法(深度Q网络)
- Q-Learning(Q 值和Q表格)
- 为什么要引入神经网络?
- 实现 Q-Learning
- 实现 DQN 算法
- PPO 算法 = DQN算法 + 演员-评论家算法 + 策略梯度算法
- 实现 PPO
- 用深度强化学习玩动作类游戏
强化学习原理
机器学习是把带标签的数据训练模型,使得预测值尽可能接近真实值。
强化学习是通过和环境交互,奖励来训练模型,使得最后获取的奖励最大期望值。
在强化学习中,机器基于环境做出行为,正确的行为能够获得奖励。以获得更多奖励为目标,实现机器与环境的最优互动。
如教狗子握手的时候,如果狗子正确握手,就能得到骨头奖励,不握手就没有。如果咬了主人一口,还会受到惩罚。
长此以往,狗子为了得到更多骨头,就能学会握手这个技能。
- 编程开发三要素:数据结构 + 传统算法 = 程序
- 机器学习三要素:数据 + 学习算法 = 模型
- 强化学习六要素:环境、决策模型、状态、行为、奖励、评论家
如在对弈的环境中,决策模型根据棋盘上的状态,做出落子行为,然后每盘棋的胜负获得奖励。模拟足够多棋局后,评论家就可以通过计算预测出每步棋对整盘棋的价值,为其打分。
马尔科夫决策过程
狭义决策过程:观测->策略->动作
广义决策过程:七元组
- S 状态空间
- O 观测空间
- A 动作空间
- R(s, a) 状态s下a动作的奖励函数
- T(s’ | s, a) 是状态转移函数,描述了在给定当前状态 s 和采取动作 a 后,系统转移到下一个状态 s’ 的概率。它表示了在某个状态下采取某个动作后,下一个状态的分布情况。
(o|s,a) 是观测函数,描述了在给定当前状态 s 和采取动作 a 后,观测到某个观测 o 的概率。它表示了在某个状态下采取某个动作后,观测到某个观测的分布情况。观测可以是对环境的感知或者是系统反馈的信息。
学习策略 = 基于行为价值 & 基于行为概率
通过不断训练,机器以赢更多局棋为目标,不断更新优化,成为一个围棋大师。
可以将学习的场景分为两类:
- 离散场景:机器行为的有限的,如动作类游戏。只有向上、向下、向左、向右这 4 个动作,移动也只能一格一格地走。
可以把每个状态下的所有行为列举出来,用评论家为每个行为打分,通过选择最高分的行为实现最优互动。
因为需要评估每个行为的价值,所以这种学习方法被称为基于行为价值的方法。 - 连续场景:机器的行为是连贯的,如赛车的方向盘转动角度可以在一定区间内任意取值,角度之间可以无限分割。
还有基于行为概率的方法,无需根据每个行为的价值来打分,可以很好地胜任连续场景。
基于值的方法需要根据每个行为的价值进行打分,选出价值最高的行为。由于要穷举出所有行为,因此它只适用于离散场景。
- Q-Learning 和 DQN 算法,都属于基于值的强化学习方法。
基于价值的方法无法应对连续场景。只能应用在不连续的、离散的环境下(如围棋或动作类游戏)。
对于动作集合规模庞大、动作连续的场景(如机器人控制领域),其很难学习到较好的结果。
基于价值(Value-Based)的思路是:通过计算行为的价值(Value)来训练模型。
棋盘上一共只有 361 个点位,基于值的方法可以计算出棋子落在每个点位的价值,并进行打分,帮助机器选出最优点位。
好处:基于值的方法能实时反馈。可以根据每个行为的价值进行打分,这个分数就相当于每个行为的实时反馈。但不能应用连续场景上。
而基于策略(Policy-Based)的方法并不需要考虑行为的价值,而是反应调整。
机器会在训练过程中随机抽取一些行为,与环境互动。如果行为获得了奖励,就会提高选择它的概率。以后遇到同样的状态时,有更高的概率再次做出这个行为。
相反,如果未获得奖励,或者受到了惩罚,就保持或者降低该行为的概率。
经过大量训练,最终会得出连续行为的概率分布。
基于这样的原理,一个行为能获得越多奖励,被选择的概率就越大,从而实现机器和环境的最优化互动。
好处:基于策略的方法能应用连续场景上。但不能实时反馈。
策略梯度算法:计算状态下所有行为的概率
基于策略的方法,它的原理是根据行为的概率来训练模型。
实现方式:策略梯度算法引入了一个神经网络,输入层是状态(s),经过隐藏层的分析和计算,输出该状态下每个行为的概率.
策略梯度算法在训练过程中经常遇到一个难题:机器在与环境互动时,难以得到实时反馈,往往要在整个回合结束后才能获得奖励。
如赢一盘棋是正向奖励,输一盘棋是负面奖励,但棋局中某一颗棋子的价值很难即时评估。
想要提高学习效率,就必须想办法提供实时反馈。
有没有办法可以将基于策略在应对连续场景上的优点,和基于值在实时反馈上的优点进行结合呢?
那就是演员-评论家算法。
演员 - 评论家算法:一半基于行为价值,一半基于行为概率
演员-评论家算法就是将基于策略和基于值两个方法相结合的产物。
这个算法分成两半,一半是演员,另一半是评论家。
- 演员:这一半基于策略,策略梯度算法。它有一个神经网络,可以根据行为的概率,选出行为。
- 评论家:这一半基于价值,DQN 算法。它有一个神经网络,可以根据行为的价值进行打分。
将基于策略和基于值的方法相结合,由基于策略的策略网络在连续场景中选出行为,由基于值的价值网络给行为提供实时反馈。
策略网络就像写作业的学生,价值网络就像批改作业的老师。二者结合,反复地写作业、改作业,对比方法,找出最好的方法。
DQN 算法(深度Q网络)
DQN 算法全称 深度Q网络,以 Q-Learning 算法为基础,融合了神经网络。
Q-Learning(Q 值和Q表格)
Q-Learning 有一个 Q 值(评论家),一个行为的 Q 值越高,表示该行为能带来的奖励越多,越应该被选择。
Q-learning 算法需要知道每个状态下,所有行为的 Q 值。
让机器在每个状态下都能做出 Q 值最大的行为(a)。
因为计算每一个Q值,需要同时记录同一个状态下所有行为。
行 S 是动作、A 是状态。
更新方法:
- 在公式中,Q表示一个函数,它把状态和行动映射到一个值。这个值表示在某个状态下选择某个行动的预期回报。
和
- α 是学习率,它决定了在更新 Q 值时,我们对新的观察结果给予多大的权重。学习率越高,我们对新观察结果的权重越大。
是在执行行动
即时奖励就是指在每个时刻,当你的角色采取一个行动后,系统会立即给出一个奖励。
比如,当你的角色向上移动时,如果它走进了一个陷阱,那么你可能会得到一个负的即时奖励,表示这个行动是不好的。
相反,如果你的角色移动到了宝藏所在的位置,你可能会得到一个正的即时奖励,表示这个行动是好的。- γ 是折扣因子,它决定了我们对未来奖励的重视程度。
γ 越大,我们对未来奖励的重视程度越高。
较低的折扣因子则更关注即时奖励。
是短期收益和长期收益的平衡。这个参数都是实验出来的。 表示在下一个状态
现在,我们来看一下公式的拆解:
- 首先,我们计算出在当前状态和行动下的Q值:
。
当我们说衰减因子用于减小当前Q值的影响时,意味着我们希望新的观察结果对Q值的更新有更大的影响,而不是完全依赖于之前的Q值。衰减因子决定了新的观察结果对Q值更新的权重。
假设机器人在某个状态下选择向右移动,并且根据之前的经验,这个行动的Q值为10。然后,机器人根据新的观察结果,发现向右移动并没有获得期望的回报。新的观察结果给出了一个负的即时奖励。
在这种情况下,衰减因子的作用就体现出来了。假设我们设置衰减因子为0.5。当我们根据新的观察结果来更新Q值时,衰减因子会将之前的Q值减半,而不是完全保留之前的Q值。这样做的目的是让机器人更加快速地调整策略,不过分依赖之前的经验。- 接下来,我们将即时奖励
和未来奖励
- 最后,我们将期望的总回报和更新后的Q值相加,得到最新的Q值:
。
为什么要引入神经网络?
Q-Learning 就是用 Q表格 计算 Q 值。
当状态和行为的数量非常庞大时,储存所有数据的 Q 表格会占用非常多的资源。
使用神经网络可以直接学习状态、行为、Q值的关系,输入状态,就能得到每个行为的Q值。
神经网络在这的功能:从存储 3 个值的排列组合,到只存储状态。
实现 Q-Learning
实现 DQN 算法
PPO 算法 = DQN算法 + 演员-评论家算法 + 策略梯度算法
PPO 算法沿用了 AC 算法的整体框架。
就是调整学习率。学习率表示向前的步长。
步长太大,尽管学得快,但会导致后期无法收敛于最优解;步长太小,则会导致学得很慢,学到黄花菜都凉了。
在训练过程中,当模型的更新幅度过大时,会调整更新幅度。
但是进行了这样的调整:机器每向前更新一步,就会与更新前作比较,如果这一步“迈”得太大,就会调整这次更新的幅度。
实现 PPO
用深度强化学习玩动作类游戏