强化学习(Reinforcement Learning, RL)是人工智能(Artificial Intelligence, AI)的一支分支学科,专注于通过与环境的互动进行训练,以最大化累积回报。与监督学习(通过从标注的示例中学习)或无监督学习(基于数据模式的学习)不同,RL处理的是一个自主智能体,该智能体必须做出直观的决策并通过与环境的互动进行学习。因此,RL的核心思想是通过试错探索,学习世界是如何运作的(例如,哪个动作会获得正向奖励,哪个不会),以最大化累积奖励。RL涉及多个关键概念:状态(States)、动作(Actions)、策略(Policy)、奖励(Rewards)、转移动态(Transition Dynamics)(概率)、环境模型(Environment Model)。
- 状态( s ∈ S s \in S s∈S)表示在给定时刻智能体感知到的环境的特定状态或配置。状态为智能体提供了进行决策和选择动作的依据。例如,在国际象棋中,一个状态可能是棋盘上一个特定位置的布局,智能体可以通过观察这些布局来做出决策。状态可以是离散的(例如给定的棋盘布局)或连续的(例如机器人的位置,可以通过 x x x 和 y y y 坐标表示)。
- 动作( a ∈ A a \in A a∈A)是智能体在与环境交互时可以选择的可能动作集。一个被选择的动作是智能体根据当前状态和策略作出的决策的一部分。例如,在国际象棋中,将棋子从一个位置移动到另一个位置是一个动作。类似于状态,动作也可以是离散的或连续的。举例来说,给定的国际象棋示例中,动作集是离散的(移动棋子),而在机器人例子中,动作集可能是连续的(例如,改变机器人的位置和速度)。
- 策略( π \pi π)指导智能体根据其当前状态和观察到的环境来选择动作。策略可以是一个简单的函数、查找表,或通过复杂的计算实现,通常通过神经网络来近似。策略可以是随机的( π ( a ∣ s ) \pi(a|s) π(a∣s)定义了给定状态下不同动作的概率分布)。在这种情况下,智能体选择的不是一个单一的动作,而是基于概率进行选择。
样本动作是根据策略定义的概率进行选择的。另一方面,确定性策略( π ( s ) \pi(s) π(s))直接将一个状态映射到一个特定的动作。在给定状态下,动作是固定的,不涉及任何随机性。在国际象棋游戏中,智能体的策略决定了它在给定棋盘状态下做出什么样的动作。假设一个智能体的策略为:它为每个合法的棋步分配概率。例如, π ( a 1 ∣ s ) = 0.5 \pi(a_1|s) = 0.5 π(a1∣s)=0.5, π ( a 2 ∣ s ) = 0.3 \pi(a_2|s) = 0.3 π(a2∣s)=0.3, π ( a 3 ∣ s ) = 0.2 \pi(a_3|s) = 0.2 π(a3∣s)=0.2。这里, a 1 a_1 a1, a 2 a_2 a2, a 3 a_3 a3是可能的动作,而策略为每个动作分配50%的选择概率、30%和20%的选择概率。智能体根据从这个分布中采样的结果来选择它的动作。这种方法在决策中引入了多样性,尤其是在探索新策略或与不确定的对手对抗时非常有用。相反,确定性策略总是将当前状态 s s s映射到一个特定的动作 a a a(例如, π ( s ) = a 1 \pi(s) = a_1 π(s)=a1)。在这种情况下,智能体总是选择 a 1 a_1 a1(例如,将皇后移动到特定的位置)。确定性策略在高效且可预测的情境中表现优异,尤其是在智能体已经学习了最佳动作时。
奖励( r ∈ R r \in R r∈R)是RL中的一个关键因素,它定义了智能体在每个时间步内要达到的目标,定义了局部和全局目标,智能体旨在随时间优化这些目标。奖励将积极的结果与消极的结果区分开来,并帮助根据环境和动作的状态更新策略。例如,在国际象棋的场景中,赢得比赛会得到一个正向奖励,而输掉比赛会得到负向奖励。另外,游戏最终可能会以平局结束,在这种情况下,不会得到奖励。奖励函数定义了当智能体在状态 s s s采取动作 a a a时所获得的即时奖励。奖励函数可以是确定性的( R ( s , a ) = r R(s, a) = r R(s,a)=r)或随机的( P ( r ∣ s , a ) P(r|s, a) P(r∣s,a))。
转移动态(Transition Dynamics)函数定义了在给定当前状态 s s s和动作 a a a的情况下,获得新状态 s ′ s' s′的概率。它可以数学表示为 P ( s ′ ∣ s , a ) P(s'|s, a) P(s′∣s,a)。
环境模型(Environment Model)根据状态和动作的输入,预测环境的未来情况(例如,智能体下一步将会进入的状态)。这些模型通过识别应该采取的动作来帮助规划可能的未来情境。依赖这些模型的强化学习方法称为基于模型的学习(model-based),而那些依赖试错学习的强化学习方法称为无模型学习(model-free)。模型在选择适当算法时起着重要作用,它有助于为问题选择合适的强化学习算法。
这些元素共同构成了马尔可夫决策过程(MDP):
M = ( S , A , P , R , γ ) M = (S, A, P, R, \gamma) M=(S,A,P,R,γ)
其中 S S S是状态空间, A A A是动作空间, P ( s ′ ∣ s , a ) P(s'|s, a) P(s′∣s,a)是转移动态, R ( s , a ) R(s, a) R(s,a)是奖励函数, γ ∈ [ 0 , 1 ] \gamma \in [0, 1] γ∈[0,1]是折扣因子,决定了奖励的重要性与即时奖励的比较。
图1展示了RL智能体与环境的关系。智能体观察当前状态( S t S_t St),选择动作( A t A_t At)并根据策略( π \pi π)获得奖励。基于奖励反馈,智能体更新其策略,以最大化累积奖励。
2. 背景与关键概念
理解强化学习(RL)需要扎实掌握其基础原则和指导智能体与环境交互的数学框架。本节介绍了RL的基本构建模块,从最简单的不确定性决策形式——多臂老虎机问题(Multi-Armed Bandit)开始。这为理解智能体如何通过评估反馈学习提供了直观的途径。在此基础上,我们深入探讨了马尔可夫决策过程(MDPs),它通过平衡即时奖励和未来奖励来规范化序列决策。最后,我们讨论了关键的RL度量指标,如价值函数和策略,这些构成了RL的核心框架。
2.1 多臂老虎机问题
多臂老虎机问题作为理解强化学习(RL)的基础性示例,代表了一个简化的决策场景,智能体在其中反复选择 K K K个动作(或称为臂)中的一个,以最大化累积回报。每个动作都与一个未知的奖励分布相关,要求智能体平衡探索(收集关于所有动作的信息)和利用(最大化即时奖励)。与监督学习不同,后者的反馈明确指出正确的动作,RL通常涉及评估反馈,这种反馈仅指出所选动作的质量,且智能体可能无法在没有与环境广泛互动的情况下发现有效策略。
在 K K K臂老虎机问题中,每个动作 a ∈ { a 1 , a 2 , … , a K } a \in \{a_1, a_2, \dots, a_K\} a∈{a1,a2,…,aK}产生一个从平稳概率分布中抽取的奖励。平稳假设意味着奖励概率随着时间推移保持不变。对于 K K K个可用动作中的每一个 k k k,都有一个预期的平均奖励,称为该动作的真实价值 q ∗ ( a ) q^*(a) q∗(a),通过采取该动作获得的预期奖励可以表示为:
q ∗ ( a ) = E [ R t ∣ A t = a ] (1) q^*(a) = \mathbb{E}[R_t | A_t = a] \tag{1} q∗(a)=E[Rt∣At=a](1)
如果 q ∗ ( a ) q^*(a) q∗(a)对于所有动作已知,那么问题就会变得简单:智能体将总是选择具有最高 q ∗ ( a ) q^*(a) q∗(a)的动作。然而,在实际应用中,奖励概率是未知的,需要通过与环境的互动来估计动作的价值。在估计动作值后,至少会有一个动作具有最高的估计值,这些动作称为贪婪动作。选择贪婪动作利用已知的即时奖励,而选择非贪婪动作则会探索其他可能性以改进估计。平衡探索与利用在RL中至关重要。选择利用动作可以最大化即时奖励,而选择探索动作有助于改进估计。估计动作值时,常常采用一个称为样本均值的方法。
以下是基于样本均值的更新规则,用于更新动作值:
Q t ( a ) = ∑ i = 1 t − 1 R i ⋅ 1 { A i = a } ∑ i = 1 t − 1 1 { A i = a } (2) Q_t(a) = \frac{\sum_{i=1}^{t-1} R_i \cdot 1\{A_i = a\}}{\sum_{i=1}^{t-1} 1\{A_i = a\}} \tag{2} Qt(a)=∑i=1t−11{Ai=a}∑i=1t−1Ri⋅1{Ai=a}(2)
其中, Q t ( a ) Q_t(a) Qt(a)表示动作 a a a在时间 t t t时的估计值, R i R_i Ri表示时间步骤 i i i的奖励, 1 { A i = a } 1\{A_i = a\} 1{Ai=a}是指示函数,表示在时间步骤 i i i时,动作 A i A_i Ai是否等于动作 a a a。
其中 1 { A t = a } 1\{A_t = a\} 1{At=a}是指示函数,当动作 a a a在步骤 t t t时被选择时其值为1,否则为0。随着时间的推移, Q t ( a ) Q_t(a) Qt(a)根据大数法则收敛到 q ∗ ( a ) q^*(a) q∗(a),前提是所有动作都被充分采样。
方程(2)可以以另一种方式表示,其中 Q t ( a ) Q_t(a) Qt(a)表示动作 a a a在步骤 t t t时的估计值,奖励 R t R_t Rt是从该动作中收到的奖励:
Q t ( a ) = ∑ 奖励 action a 被选择的次数 选择动作 a 的次数 (4) Q_t(a) = \frac{\sum \text{奖励}{\text{action $a$ 被选择的次数}}} {\text{选择动作$a$的次数}} \tag{4} Qt(a)=选择动作a的次数∑奖励action a 被选择的次数(4)
为了迭代地改进 Q t ( a ) Q_t(a) Qt(a),我们使用公式(5),即增量更新规则,其中 Q t + 1 Q_{t+1} Qt+1是更新后的动作价值估计值, R t R_t Rt是观察到的奖励值, α \alpha α是学习率。该更新规则根据接收到的奖励与当前估计之间的差异来逐步调整动作价值。具体公式为:
Q t + 1 = Q t + α ( R t − Q t ) (5) Q_{t+1} = Q_t + \alpha(R_t - Q_t) \tag{5} Qt+1=Qt+α(Rt−Qt)(5)
其中, Q t Q_t Qt是上一个时间步的动作价值, R t R_t Rt是当前时间步的奖励, α \alpha α是学习率,用于控制更新步长。
在解决多臂老虎机问题时,其中一个关键的挑战是如何平衡探索与利用。探索(exploration)指的是尝试所有可能的动作,以便获得更多的信息,而利用(exploitation)指的是选择当前已知最优的动作。RL中,探索和利用的平衡通常通过贪婪策略( A t = arg max a Q t ( a ) A_t = \arg\max_a Q_t(a) At=argmaxaQt(a))来实现。一些常见的策略包括 ϵ \epsilon ϵ-贪婪策略、Upper Confidence Bound(UCB)等。贪婪策略通过选择估计最好的动作来进行利用,而 ϵ \epsilon ϵ-贪婪策略则偶尔选择随机动作进行探索。
UCB方法通过引入不确定性来平衡探索与利用:
A t = arg max a [ Q t ( a ) + c ⋅ ln t N t ( a ) ] (6) A_t = \arg\max_a \left[ Q_t(a) + c \cdot \sqrt{\frac{\ln t}{N_t(a)}} \right] \tag{6} At=argamax[Qt(a)+c⋅Nt(a)lnt](6)
其中, N t ( a ) N_t(a) Nt(a)是动作 a a a被选择的次数, c > 0 c > 0 c>0控制探索度。该方法确保所有动作都能被采样,但优先选择当前估计不确定的动作进行探索。
为了平衡探索与利用,RL还引入了如乐观初始化等方法,来鼓励初期探索所有可能的动作。例如,可以通过初始化 Q 1 ( a ) Q_1(a) Q1(a)为一个较大的值(例如+5)来促使智能体尽早探索所有动作。
我们可以递归地表达动作选择的更新规则:
Q t + 1 ( a ) = Q t ( a ) + 1 N t ( a ) ( R t − Q t ( a ) ) (7) Q_{t+1}(a) = Q_t(a) + \frac{1}{N_t(a)}(R_t - Q_t(a)) \tag{7} Qt+1(a)=Qt(a)+Nt(a)1(Rt−Qt(a))(7)
此递归更新规则仅需要 Q t ( a ) Q_t(a) Qt(a)的当前估计,而无需进行额外的计算。样本均值方法适用于平稳问题,但在非平稳环境中,近期奖励对动作值估计有较大影响,因此需要采用衰减的学习率。
为了应对非平稳问题,可以使用如乐观初始化、探索度控制等方法。针对不稳定的环境,衰减学习率或其他适应性方法可以减少这些问题的影响。
算法 1 简单的多臂老虎机算法
- 初始化:
- 对于 a = 1 a = 1 a=1到 k k k,执行以下操作:
- Q ( a ) ← 0 Q(a) \leftarrow 0 Q(a)←0
- N ( a ) ← 0 N(a) \leftarrow 0 N(a)←0
- 结束
- 永久循环:
- A ← { arg max a Q ( a ) 以概率 1 − ϵ 随机动作 以概率 ϵ A \leftarrow \begin{cases} \arg\max_a Q(a) & \text{以概率} 1 - \epsilon \\ \text{随机动作} & \text{以概率} \epsilon \end{cases} A←{argmaxaQ(a)随机动作以概率1−ϵ以概率ϵ
- R ← bandit ( A ) R \leftarrow \text{bandit}(A) R←bandit(A)
- N ( A ) ← N ( A ) + 1 N(A) \leftarrow N(A) + 1 N(A)←N(A)+1
- Q ( A ) ← Q ( A ) + 1 N ( A ) [ R − Q ( A ) ] Q(A) \leftarrow Q(A) + \frac{1}{N(A)}[R - Q(A)] Q(A)←Q(A)+N(A)1[R−Q(A)]
import numpy as np
import random
# 设置随机数种子,确保结果可重复
np.random.seed(42)
class MultiArmedBandit:
def __init__(self, k):
"""
初始化多臂老虎机问题,k为臂的数量
每个臂的奖励分布为均匀分布
"""
self.k = k
self.q_star = np.random.normal(0, 1, k) # 每个臂的真实奖励期望值
self.n = np.zeros(k) # 每个臂被选择的次数
self.q_est = np.zeros(k) # 每个臂的估计奖励
def step(self, action):
"""
执行一个动作并返回奖励
"""
reward = np.random.normal(self.q_star[action], 1) # 奖励是根据真实的奖励期望值加上噪声
return reward
def reset(self):
"""
重置状态
"""
self.q_est = np.zeros(self.k)
self.n = np.zeros(self.k)
def epsilon_greedy(bandit, epsilon=0.1):
"""
epsilon-贪婪策略
以概率epsilon选择随机动作,否则选择当前估计值最大的动作
"""
if random.random() < epsilon:
return random.randint(0, bandit.k - 1) # 随机选择一个动作
else:
return np.argmax(bandit.q_est) # 选择估计奖励最大的动作
def run_bandit(k=10, episodes=1000, epsilon=0.1):
"""
运行多臂老虎机问题
"""
bandit = MultiArmedBandit(k)
total_rewards = 0
for episode in range(episodes):
action = epsilon_greedy(bandit, epsilon) # 选择动作
reward = bandit.step(action) # 获取奖励
bandit.n[action] += 1 # 更新该动作的选择次数
bandit.q_est[action] += (reward - bandit.q_est[action]) / bandit.n[action] # 更新动作的估计奖励
total_rewards += reward
average_reward = total_rewards / episodes
print(f"平均奖励: {average_reward}")
print(f"每个臂的真实奖励期望值: {bandit.q_star}")
print(f"每个臂的估计奖励: {bandit.q_est}")
# 执行多臂老虎机问题
run_bandit(k=10, episodes=1000, epsilon=0.1)
通过设置乐观的初始值(例如,+5),智能体被鼓励探索更多的动作,从而提高探索的多样性。这是因为初始的乐观假设使得未尝试的动作显得更具吸引力,促使智能体在使用贪婪策略时也进行更多的探索。该方法有助于确保智能体在收敛到最终策略之前,能够充分地调查动作空间。然而,这种策略要求在定义初始值时要特别小心,而这些初始值在标准实践中通常被设置为零。初始值的选择应当反映出对潜在奖励的估计和猜测,过于乐观的初始值可能会导致智能体的学习效率降低,尤其是在没有妥善管理的情况下。总体而言,乐观的初始值可以作为平衡RL中的探索和利用的有效技术,鼓励智能体更广泛地进行探索,并潜在地促使其找到更优的长期策略。
参考文献:https://arxiv.org/pdf/2408.07712
仅供学习使用,如有侵权,联系删除