强化学习相关算法—初学者友好版
- Q-Learning
- PPO 未完更新中……
最近在学习基于强化学习(Reinforce Learning,RL)的算法改进论文,对相关的算法进行记录,以便查阅。其中许多公式的细节理解是通过案例学习总结得出的,如有不妥之处,敬请指正。
Q-Learning
Q-learning 是一种无模型、基于价值的强化学习算法,它通过让智能体(Agent)在环境中通过试错不断更新一张“状态-动作”价值表格(Q-table),从而学会在什么情况下采取什么行动会有最大的奖励值。(另一博主对Q-learning也做了很详细的介绍,也可参考:https://blog.csdn.net/qq_30615903/article/details/80739243?fromshare=blogdetail&sharetype=blogdetail&sharerId=80739243&sharerefer=PC&sharesource=weixin_55920505&sharefrom=from_link
一.核心概念
Q值(Quality):指智能体在某一特定状态(State)下采取某个动作(Action)后,能够获得的长期收益期望值。
Q表(Q-table):由行(状态)和列(动作)组成的表格,记录了每个状态下各个动作的 Q 值。
无模型(Model-free):算法不需要提前知道环境的具体规则或转移概率,只需通过与环境交互收集经验。
离策略(Off-policy):智能体在学习最优策略的同时,可以采用另一种行为策略(如 ε-贪婪策略)来探索环境。也就是说,用于产生数据的策略与最终要优化的目标策略可以不同,这使得算法在探索与利用之间取得更好的平衡。
时序差分(Temporal Difference,TD):Q-learning 的核心学习机制。它通过「当前奖励 + 下一状态的最大 Q 值」与「当前 Q 值」之间的差值(即 TD 误差)来逐步修正估计,使价值估计不断逼近真实期望。
探索与利用(Exploration & Exploitation):智能体需要在「尝试未知动作以获取新信息」与「选择当前已知最优动作以获取高回报」之间权衡。常用的 ε-贪婪策略以较小概率 ε 随机探索,以大概率 1-ε 选择当前最优动作。
二.核心算法公式(更新公式)
Q-learning 的核心更新公式如下:
Q ( s , a ) ← Q ( s , a ) + α [ r + γ max a ′ Q ( s ′ , a ′ ) − Q ( s , a ) ] Q(s, a) \leftarrow Q(s, a) + \alpha \left[ r + \gamma \max_{a'} Q(s', a') - Q(s, a) \right]Q(s,a)←Q(s,a)+α[r+γa′maxQ(s′,a′)−Q(s,a)]
其中:
- Q ( s , a ) Q(s, a)Q(s,a):当前状态s ss下采取动作a aa的 Q 值;
- α \alphaα:学习率(Learning Rate),控制新信息对旧 Q 值的更新幅度,取值范围为0 < α ≤ 1 0 < \alpha \le 10<α≤1;
- r rr:执行动作a aa后获得的即时奖励(Reward);
- γ \gammaγ:折扣因子(Discount Factor),衡量未来奖励的重要性,取值范围为0 ≤ γ < 1 0 \le \gamma < 10≤γ<1;
- s ′ s's′:执行动作a aa后转移到的下一个状态;
- max a ′ Q ( s ′ , a ′ ) \max_{a'} Q(s', a')maxa′Q(s′,a′):下一状态s ′ s's′中所有可能动作的最大 Q 值,代表对未来最优收益的估计。
该公式的核心思想是:用「即时奖励 + 折扣后的未来最优收益」作为目标值,与当前 Q 值作差得到时序差分误差(TD Error),再以学习率α \alphaα逐步修正 Q 表,使估计值不断逼近真实收益期望。
从直观上理解,更新过程可以拆解为以下几步:
- 观察当前状态s ss,依据当前策略(如 ε-贪婪)选择一个动作a aa并执行; ε-贪婪的常用值为0.1,即以10%的概率随机探索,以90%的概率选择当前Q表中的最优动作,即Q值最大的动作。
- 环境反馈:获得即时奖励r rr,并转移到下一个状态s ′ s's′;需要注意的是,r rr是提前定义好的常值,如:X状态下做出b动作,则r rr=5,或者是无论在何种状态下,只要做出b动作,r rr=5。
- 计算目标值:r + γ max a ′ Q ( s ′ , a ′ ) r + \gamma \max_{a'} Q(s', a')r+γmaxa′Q(s′,a′),即「即时奖励 + 对未来最优收益的折扣估计」;需要注意的是m a x a ′ Q ( s ′ , a ′ ) max_{a'} Q(s', a')maxa′Q(s′,a′)是新状态下最优动作所对应的值,即最大Q值。
- 计算 TD 误差:目标值与当前 Q 值之差,反映当前估计与理想值之间的偏差;
- 更新 Q 表:以学习率α \alphaα按误差方向修正Q ( s , a ) Q(s, a)Q(s,a),使估计逐步收敛。
当学习率α \alphaα较大时,新经验对 Q 值的修正更剧烈,收敛更快但可能不稳定;当α \alphaα较小时,更新更平稳但收敛较慢。折扣因子γ \gammaγ越接近 1,智能体越重视远期收益;越接近 0,则越关注眼前利益。通过反复迭代上述过程,Q 表最终会收敛到最优价值函数,从而得到最优策略π ∗ ( s ) = arg max a Q ∗ ( s , a ) \pi^*(s) = \arg\max_a Q^*(s, a)π∗(s)=argmaxaQ∗(s,a)。
注意关于两种不同的更新策略:①直接查找Q表找最优值 和 ②使用 ε-贪婪策略,区别在仅于 在原始S状态下的动作选择。法①是查找Q表中S状态下Q值最大的那个动作,再去执行;而法②是随机选择一个动作去执行,可能其对应的Q值是最大的,也可能不是。
无论用哪种方法,一旦选择了这个动作,就获得对应的即时奖励r rr;进入状态s ′ s's′,此时再找s ′ s's′下的最大Q值,即公式中对应的m a x Q ( s ′ , a ′ ) maxQ(s', a')maxQ(s′,a′)。
这也对应前面的**“离策略”off-policy**:用于产生数据的策略与最终要优化的目标策略可以不同,这使得算法在探索与利用之间取得更好的平衡:更新的第一步 如果 选用法①时是找的最大Q对应的动作,而选用法②时,就是随机选一个动作了。
三.实战理解——“老鼠走迷宫”
1、规则
构建了一个一字排开的 3 格小迷宫:[ 老鼠 (状态0) ] ── [ 空地 (状态1) ] ── [ 奶酪 (状态2) ]。老鼠在任意状态下可选择左移或右移。游戏以老鼠吃到奶酪(到达状态 2)为胜利并结束,可获得 +100 分即时奖励;若撞墙(在状态 0 向左或状态 2 向右)则扣 -10 分并弹回原格;走普通空地(在状态 0 向右,或在状态 1 向左)则扣 -1 分作为时间成本。算法采用核心超参数:折扣因子 γ = 0.9(重视未来)、学习率 α = 0.5(吸收新知)以及探索率 ε = 0.1(即 90% 情况查表利用,10% 情况随机探索)。
游戏开始前的初始 Q 表 (Initial Q-Table)
在游戏开始前,这是一只刚出生的“萌新老鼠”,脑海中一片空白,所有状!态下的动作 Q 值全部初始化为 0.0:
2、游戏开始
第一回合模拟演练 (Episode 1)
老鼠出生在 状态 0。假设前两步都触发了随机策略(或由于初始值均为 0 导致等概率盲选):
🐾 步骤 1:老鼠在状态 0,选择【右移】
• 即时奖励 R = -1(走到普通空地)
• 新状态 S’ = 1
• 新状态未来最大期望
max a Q ( 1 , a ) = max ( Q ( 1 , 左 ) , Q ( 1 , 右 ) ) = max ( 0.0 , 0.0 ) = 0.0 \max_{a} Q(1, a) = \max(Q(1, \text{左}), Q(1, \text{右})) = \max(0.0, 0.0) = 0.0maxaQ(1,a)=max(Q(1,左),Q(1,右))=max(0.0,0.0)=0.0
• 代入公式计算:
Q ( 0 , 右 ) ← 0.0 + 0.5 × [ − 1 + 0.9 × 0.0 − 0.0 ] = − 0.5 Q(0, \text{右}) \leftarrow 0.0 + 0.5 \times [-1 + 0.9 \times 0.0 - 0.0] = \mathbf{-0.5}Q(0,右)←0.0+0.5×[−1+0.9×0.0−0.0]=−0.5
🐾 步骤 2:老鼠在状态 1,选择【右移】(吃到奶酪!)
• 即时奖励 R = +100(吃到奶酪,胜利!)
• 新状态 S’ = 2(终止状态,未来期望固定为 0)
• 代入公式计算:
Q ( 1 , 右 ) ← 0.0 + 0.5 × [ 100 + 0.9 × 0 − 0.0 ] = + 50.0 Q(1, \text{右}) \leftarrow 0.0 + 0.5 \times [100 + 0.9 \times 0 - 0.0] = \mathbf{+50.0}Q(1,右)←0.0+0.5×[100+0.9×0−0.0]=+50.0
• 游戏处理:本回合结束,游戏重置,老鼠回到状态 0。
第一回合结束后的 Q 表
第二回合模拟演练 (Episode 2)
游戏重置,老鼠重新回到 状态 0。这次它使用 90% 查表法 进行决策:
🐾 步骤 1:老鼠在状态 0,选择【左移】(撞墙)
• 决策原因:查表发现状态 0 【右移】是 -0.5,【左移】是 0.0。为了追求大值,它会尝试选择【左移】。
• 即时奖励 R = -10(撞墙惩罚)
• 新状态 S’ = 0(被墙弹回,仍在状态 0)
• 新状态未来最大期望max a Q ( 0 , a ) = max ( 0.0 , − 0.5 ) = 0.0 \max_{a} Q(0, a) = \max(0.0, -0.5) = 0.0maxaQ(0,a)=max(0.0,−0.5)=0.0
• 代入公式计算:
Q ( 0 , 左 ) ← 0.0 + 0.5 × [ − 10 + 0.9 × 0.0 − 0.0 ] = − 5.0 Q(0, \text{左}) \leftarrow 0.0 + 0.5 \times [-10 + 0.9 \times 0.0 - 0.0] = \mathbf{-5.0}Q(0,左)←0.0+0.5×[−10+0.9×0.0−0.0]=−5.0
🐾 步骤 2:老鼠仍在状态 0,选择【右移】
• 决策原因:再次决策。此时查表:【左移】-5.0,【右移】-0.5。由于 -0.5 > -5.0,老鼠选择【右移】。
• 即时奖励 R = -1(走普通空地)
• 新状态 S’ = 1
• 新状态未来最大期望max a Q ( 1 , a ) = max ( 0.0 , 50.0 ) = 50.0 \max_{a} Q(1, a) = \max(0.0, 50.0) = 50.0maxaQ(1,a)=max(0.0,50.0)=50.0
• 代入公式计算:
Q ( 0 , 右 ) ← − 0.5 + 0.5 × [ − 1 + 0.9 × 50.0 − ( − 0.5 ) ] = − 0.5 + 0.5 × [ 44.5 ] = + 21.75 Q(0, \text{右}) \leftarrow -0.5 + 0.5 \times [-1 + 0.9 \times 50.0 - (-0.5)] = -0.5 + 0.5 \times [44.5] = \mathbf{+21.75}Q(0,右)←−0.5+0.5×[−1+0.9×50.0−(−0.5)]=−0.5+0.5×[44.5]=+21.75
🐾 步骤 3:老鼠在状态 1,选择【右移】(再次吃到奶酪!)
• 决策原因:查表:【左移】0.0,【右移】+50.0。选择【右移】。
• 即时奖励 R = +100
• 新状态 S’ = 2(未来期望为 0)
• 代入公式计算:
Q ( 1 , 右 ) ← 50.0 + 0.5 × [ 100 + 0.9 × 0 − 50.0 ] = 50.0 + 25.0 = + 75.0 Q(1, \text{右}) \leftarrow 50.0 + 0.5 \times [100 + 0.9 \times 0 - 50.0] = 50.0 + 25.0 = \mathbf{+75.0}Q(1,右)←50.0+0.5×[100+0.9×0−50.0]=50.0+25.0=+75.0
• 游戏处理:第二回合结束。
第二回合结束后的最终 Q 表
💡复盘与感悟
- 为什么老鼠会具备“远见”?
在第二回合步骤 2 中,虽然老鼠往右走这一步要遭受 R = -1 的即时惩罚,但因为公式里引入了新状态下的未来巨大潜力( max Q ( 1 ) = 50.0 ) (\max Q(1) = 50.0)(maxQ(1)=50.0),使得起点的右移价值从负数一跃飙升到了 +21.75。这就是强化学习中价值反向传播的奥秘。 - 探索率 (ε) 的不可或缺性
在这个简单的迷宫里老鼠很容易找到最优解。但在庞大且复杂的未知环境中,必须保留一定比例的“随机策略(探索)”,才能防止老鼠在尝到微小的甜头后固步自封,从而有几率发现隐藏得更深的“超级奶酪大奖”。