问题描述
考虑如下一个学习问题,重复地在k个选项或动作中进行选择,每次做出选择后,你都会得到一定数值的收益。收益由所选择动作决定的平稳概率分布产生。问题目标是在最大化某段时间内(1000次选择或1000时刻后)获得的总收益。
在k臂赌博机问题中,每个动作在被选择时都有一个期望或平均收益,该期望被称为这个动作的价值。记时刻ttt选择的动作为AtA_tAt,并将对应的收益记为RtR_tRt。任一动作aaa对应的价值记作q∗(a)q_\ast(a)q∗(a),即给定动作aaa时收益的期望为:
q∗(a)=E[Rt∣At=a]
q_*(a)=\mathbb{E} [R_t|A_t=a]
q∗(a)=E[Rt∣At=a]
如果知道每个动作的价值,k臂赌博机的解法就可以简单地为:每次都选择价值最高的动作 。假设不能确切地知道动作的价值,但可以对该价值进行估计。对动作aaa在时刻ttt的价值q∗(a)q_*(a)q∗(a)的估计值记为Qt(a)Q_t(a)Qt(a),那么它越接近于q∗(a)q_*(a)q∗(a)对解决该问题是越有利的。如果持续地对动作的价值进行估计,那么在任一时刻都至少会有一个动作的估计价值是最高的,我们将这些估计价值最高对应的动作称为贪心的动作,选择贪心的动作称为开发(exploitation, 也有文献称为利用)。如果选择的是非贪心的动作,我们称此为探索(exploration),因为采取非贪心的动作可以改善对非贪心动作价值的估计。
“开发”对最大化当前时刻的期望收益是正确的做法,但从长远来看,“探索”可能会带来总体收益的最大化。比如说,一个贪心的动作的估计价值是确切知道的,其估计价值在当前所有动作的估计价值中最高,而其他几个动作的估计价值略低但仍有很大的不确定性,这些不确定性足以使得至少有一个动作实际上价值高于贪心动作,那么"探索"行为或许能发现哪一个动作实际上是价值高于当前贪心动作的。即一直保持"开发",容易陷入到贪心解法的局部最优内。 显然,在同一次动作选择中,开发和探索是不可能同时进行的,这种情况就是经常提到的开发和探索之间的冲突。在一个具体案例中,到底是选择开发还是探索,取决于我们得到的函数估计,不确定性和剩余时刻等指标,开发和探索的平衡是强化学习的一个重要问题。
动作-价值方法
使用价值q∗(a)q_*(a)q∗(a)的估计值Qt(a)Q_t(a)Qt(a)来选择动作的方法统称为动作-价值方法(Action-Value Based)。如上所述,动作的价值的真实值q∗(a)q_*(a)q∗(a)是选择这个动作时的期望收益。因此一种自然的方式是通过计算实际收益的平均值来估计动作的价值,即动作a在时刻t的估计价值为:
Qt(a)=t时刻前通过执行动作a获得的收益总和t时刻前执行动作a的次数=∑i=1t−1Ri⋅1Ai=a∑i=1t−11Ai=a
Q_t(a)=\frac{t时刻前通过执行动作a获得的收益总和}{t时刻前执行动作a的次数}=\frac{\sum_{i=1}^{t-1}R_i\cdot \mathbb{1}_{A_i=a} }{\sum_{i=1}^{t-1}\mathbb{1}_{A_i=a}}
Qt(a)=t时刻前执行动作a的次数t时刻前通过执行动作a获得的收益总和=∑i=1t−11Ai=a∑i=1t−1Ri⋅1Ai=a
其中1predicate\mathbb{1} _{predicate}1predicate表示指示函数,当predicatepredicatepredicate为真时函数值为1,反之为0。当分母为0时,Qt(a)Q_t(a)Qt(a)置为某个默认值。当分母趋向无穷大时,根据大数定律,Qt(a)Q_t(a)Qt(a)会收敛到q∗(a)q_*(a)q∗(a)。我们将这种估计动作价值的方法称之为采样平均方法,当然这只是一种动作价值的估计方法,且不一定是最好的方法。
用以上方法得到动作的估计价值后,如何使用估计值来选择动作呢?最简单的动作选择规则就是,选择具有最高估计价值的动作(即贪心动作)。贪心策略还有一种简单的替代策略为ϵ−greedy\epsilon-greedyϵ−greedy策略,即有1−ϵ1-\epsilon1−ϵ的概率选择贪心动作,有ϵ\epsilonϵ的概率从所有动作中等概率选择(随机探索)。该策略的优点是如果时间无限长,则每个动作都会被无限采样,从而确保所有的Qt(a)Q_t(a)Qt(a)都收敛到q∗(a)q_*(a)q∗(a)。
动作-价值方法的增量式实现
令RiR_iRi表示这一动作被选择iii次后获得的收益,QnQ_nQn表示被选择n−1n-1n−1次后它的估计的动作价值,即:
Qn=R1+R2+...+Rn−1n−1
Q_n=\frac{R_1+R_2+...+R_{n-1}}{n-1}
Qn=n−1R1+R2+...+Rn−1
然而这种方式需要记录每一次收益RRR,随着记录的次数越多,内存和计算量也会随时间增长。为了解决这个问题就有了以增量式的公式来计算平均值:
Qn+1=1n∑i=1nRi=1n(Rn+∑i=1n−1Ri)=1n(Rn+(n−1)1n−1∑i−1n−1Ri)=1n(Rn+(n−1)Qn)=1n(Rn+nQn−Qn)=Qn+1n(Rn−Qn)
Q_{n+1} = \frac{1}{n} \sum_{i=1}^{n}R_i\\
=\frac{1}{n}(R_n + \sum_{i=1}^{n-1}R_i)\\
=\frac{1}{n}(R_n + (n-1)\frac{1}{n-1} \sum_{i-1}^{n-1}R_i)\\
=\frac{1}{n}(R_n + (n-1)Q_n)\\
=\frac{1}{n}(R_n + nQ_n-Q_n)\\
=Q_n + \frac{1}{n}(R_n-Q_n)
Qn+1=n1i=1∑nRi=n1(Rn+i=1∑n−1Ri)=n1(Rn+(n−1)n−11i−1∑n−1Ri)=n1(Rn+(n−1)Qn)=n1(Rn+nQn−Qn)=Qn+n1(Rn−Qn)
注意上述公式极为重要,其一般的形式是:
新估计值⟵旧估计值+步长×(目标−旧估计值)
新估计值 \longleftarrow 旧估计值+步长 \times (目标-旧估计值)
新估计值⟵旧估计值+步长×(目标−旧估计值)
其中(目标−旧估计值)(目标-旧估计值)(目标−旧估计值)为估计值的误差,误差会随着向“目标靠近的每一步而减少”。