在随机环境中 Q 学习的良好收敛标准是什么?

人工智能 强化学习 训练 q学习 马尔可夫决策过程
2021-10-20 04:14:32

我有一个随机环境,我正在为环境中发生的学习实施一个 Q 表。代码如下所示。简而言之,有十种状态(0、1、2、...、9),以及三个动作:0、1 和 2。动作 0 什么都不做,动作 1 以 0.7 的概率减去 1,动作2 以 0.7 的概率加 1。当我们处于状态 5 时,我们得到 1 的奖励,否则为 0。

import numpy as np
import matplotlib.pyplot as plt

def reward(s_dash):
    if s_dash == 5:
        return 1
    else: 
        return 0
states = range(10)
Q = np.zeros((len(states),3))
Q_previous = np.zeros((len(states),3))
episodes = 2000
trials = 100
alpha = 0.1
decay = 0.995
gamma = 0.9
ls_av = []
ls = []
for episode in range(episodes):
    print(episode)
    s = np.random.choice(states)
    eps = 1
    for i in range(trials):
        eps *= decay
        p = np.random.random()
        if p < eps:
            a = np.random.randint(0,3)
        else:
            a = np.argmax(Q[s, :])

        if a == 0:
            s_dash = s
        elif a == 1:
            if p >= 0.7:
                s_dash = max(s-1, 0)
            else:
                s_dash = s
        else:
            if p >= 0.7:
                s_dash = min(s+1, 9)
            else:
                s_dash = s
        r = reward(s_dash)
        Q[s][a] = (1-alpha)*Q[s][a] + alpha*(r + gamma*np.max(Q[s_dash]))
        s = s_dash
    ls.append(np.max(abs(Q - Q_previous)))
    Q_previous = np.copy(Q)
print(Q)
for i in range(10):
    print(i, np.argmax(Q[i, :]))
plt.plot(ls)
plt.show()

当我在每集结束时绘制 Q 表中最大变化的绝对值时,我得到以下信息,这表明 Q 表正在不断更新。

Q 表中最大变化绝对值随情节变化的图

但是,我看到当我打印出每个状态的最大 Q 值的动作时,它显示了我期望的最优策略。对于每个状态,最佳动作如下所示:

(0, 2)
(1, 2)
(2, 2)
(3, 2)
(4, 2)
(5, 0)
(6, 1)
(7, 1)
(8, 1)
(9, 1)

我的问题是:为什么我在 Q 表中没有收敛?如果我有一个随机环境,我事先不知道最佳策略是什么,当 Q 表不收敛时,我如何判断是否需要停止训练?

1个回答

要获得 Q 表值的收敛保证,您需要衰减学习率,α,以适当的速度。太快和收敛将是不准确的值。太慢和收敛永远不会发生。

为了坚持理论保证,学习率衰减过程通常应遵循以下规则:tαt=tαt2- 执行此操作的学习率计划的示例是αt=1t,尽管在实践中,特定的选择可能会导致收敛速度非常慢。

选择一个好的开始α一个好的衰减时间表将取决于问题,您可能希望以类似问题的经验为基础。然而,在基于价值的强化学习中,需要保证行动价值的收敛并不常见。在控制问题中,您通常更关心找到最优策略,而不是完全准确的动作值。此外,许多有趣的控制问题过于复杂,无法以表格形式完美解决,因此您需要一些近似值。仅仅为问题选择一个学习率并坚持下去似乎是相对常见的。

如果你降低学习率,Q 表将收敛到更稳定的 Q 值,但可能会花费更长的时间来收敛到最优策略。