一、 Q-learning
Q-learning 是一种经典的**无模型(model-free)强化学习算法,基于时序差分(Temporal Difference, TD)**方法,通过更新 Q 值函数来学习最优策略。以下是 Q-learning 的更新公式及其详细解释。
1. Q-learning 的核心思想
Q-learning 的目标是学习一个 Q 值函数 Q(s, a) ,表示在状态 s 下执行动作 a 后,未来累积奖励的期望值。通过不断更新 Q 值函数,智能体可以找到最优策略。
Q-learning 的特点是:
- 离策略(off-policy):更新时使用最大 Q 值(贪婪策略),但实际动作选择可以是探索性的(如epsilon-贪婪策略)。
- 无模型:不需要知道环境的转移概率和奖励函数。
2. Q-learning 的更新公式
Q-learning 的更新公式如下:
Q(St,At)←Q(St,At)+α[rt+1+γmaxaQ(St+1,a)−Q(St,At)]
公式解析:
-
Q(s_t, a_t) :
- 当前状态 s_t 和动作 a_t 的 Q 值。
-
alpha :
- 学习率(learning rate),控制更新步长,取值范围为 [0, 1] 。
- 较大的alpha 表示更快的学习,但可能导致不稳定;较小的alpha 表示更稳定的学习,但收敛速度较慢。
-
r_t+1:
- 智能体在状态 s_t 执行动作 a_t 后获得的即时奖励。
-
gamma :
- 折扣因子(discount factor),取值范围为 [0, 1] 。
- 用于权衡当前奖励和未来奖励的重要性。gamma 越接近 1,表示越重视未来奖励。
-
maxa’} Q(s_t+1, a’) :
- 下一状态 s_t+1} 的最大 Q 值,表示对未来奖励的估计。
- 这是 Q-learning 的离策略特性体现,直接使用最大 Q 值更新当前 Q 值。
-
r_t+1 + gammamax_a’ Q(s_t+1, a’) :
- 目标 Q 值,表示对当前 Q 值的估计目标。
-
r_t+1 +gamma max_a’ Q(s_t+1, a’) - Q(s_t, a_t) :
- 时序差分误差(TD Error),表示目标 Q 值与当前 Q 值之间的差距。
- 更新公式:
- 通过将当前 Q 值向目标 Q 值调整,逐步优化 Q 值函数。
3. Q-learning 的算法流程
以下是 Q-learning 的伪代码:
# 初始化 Q 值表
Q = defaultdict(lambda: np.zeros(env.action_space.n))
# 超参数
alpha = 0.1 # 学习率
gamma = 0.99 # 折扣因子
epsilon = 0.1 # 探索率
# 训练循环
for episode in range(num_episodes):
state = env.reset() # 初始化状态
done = False
while not done:
# 选择动作(epsilon-贪婪策略)
if np.random.rand() < epsilon:
action = env.action_space.sample() # 随机探索
else:
action = np.argmax(Q[state]) # 选择最优动作
# 执行动作,获取环境反馈
next_state, reward, done, info = env.step(action)
# Q-learning 更新
td_target = reward + gamma * np.max(Q[next_state])
td_error = td_target - Q[state][action]
Q[state][action] += alpha * td_error
# 更新状态
state = next_state
4. Q-learning 的直观理解
- 探索与利用:
- 通过 epsilon-贪婪策略,智能体在探索(随机动作)和利用(选择最优动作)之间平衡。
- 离策略更新:
- 更新时使用最大 Q 值(贪婪策略),但实际动作选择可以是探索性的。
- 逐步优化:
- 通过不断更新 Q 值函数,智能体逐步逼近最优策略。
5. 总结
Q-learning 的更新公式其核心是通过时序差分误差(TD Error)逐步优化 Q 值函数,最终找到最优策略。Q-learning 是一种简单而强大的算法,适用于离散状态和动作空间的问题。