学习笔记--多臂老虎机(Multi-armed Bandits)--chapter2

区分增强学习(reinforcement learning)与其他类型的学习算法的一个最大的特征在于,增强学习评估(evaluates)采取的行动(actions),而非指示(instructs)通过给予正确的行动。通过学习最简单的多臂老虎机问题,来介绍数个基础学习算法,这些算法将在后续章节被运用于完整的增强学习问题。

1. 多臂老虎机问题

反复在k个不同选项、行动中进行选择,任意选项将返回一个符合稳定概率分布的奖励(reward),目标是将一段时间内的总奖励最大化。这就是多臂老虎机问题的原型,将k个不同选项具化为k个不同的拉杆,拉动拉杆将给与奖励,通过反复操作选择不同的行动来将奖励最大化。在我们定义的多臂老虎机问题中,k个行动中的任意行动有各自的期望、平均奖励,将这些固有未知量称为行动的值(value)。
如果我们已知所有行动下的返回的奖励的值,那么只需要在任何时候都选取奖励值最高的行动,即使我们可以推测这些值,但是我们无法获得确切的值,我们希望我们的推测与真实值尽可能接近。
持续对行动的值进行预测,那么在任意时间点至少有一个行动的值大于其余行动的值,我们称这些行动是贪婪的(greedy actions),当你执行任意一个贪婪行动时,可以理解为利用(exploiting)了当前对于行动的值的知识。相反,如果采取了非贪婪的行动,可以理解为在进行探索(exploring),因为这个行为可以帮助提高对于非贪婪行为奖励值的预测准确性。利用能够在当前获得最大的期望奖励,但是探索可能给予更长期的收益。在任意单一的行动下,无法同时进行利用和探索,这通常被称为利用与探索的冲突(conflict)。
本书不会介绍通过复杂方法来对利用与探索进行平衡,本章将通过数个简单的平衡方法来展示在多臂老虎机问题下,这些方法比一直利用要更优秀。

2. 行动-值函数(Action-value Methods)

之前提到过,行动的值是当行动被选择时的平均奖励,一个自然的方法来进行预测可以将一个行动所获取过的奖励取平均值。
Q t ( a ) = 过 去 t 时 间 内 行 动 a 被 选 取 所 得 奖 励 总 和 过 去 t 时 间 内 行 动 a 被 选 取 次 数 Q_t(a) = \frac{过去t时间内行动a被选取所得奖励总和}{过去t时间内行动a被选取次数} Qt(a)=tata
如果分母为0,即行动a从未被执行过,则将 Q t ( a ) Q_t(a) Qt(a)置为某个缺省值,比如0。当分母趋向于无穷, Q t ( a ) Q_t(a) Qt(a)将向期望值 q ∗ ( a ) q_*(a) q(a)收敛。我们称此方法为样本平均法(sample-average method),当然,样本平均法只是诸多预测行动值方法中的一种,也并不是最好的一个。

一个最简单的行动选择的方法就是选择拥有最高估计值的行动。
A t = a r g m a x a Q t ( a ) A_t = argmax_aQ_t(a) At=argmaxaQt(a)
A t A_t At为t时刻所选取的行动,上式可理解为,在t时刻选择的行动a满足条件 Q t ( a ) Q_t(a) Qt(a)大于或等于任意其他行动的值 Q t ( a ′ ) Q_t(a') Qt(a)
选择贪婪行动总是利用当前的知识来将即时奖励(immediate reward)最大化,尽管某些表面上较差的行动可能实际上更好。一个简单的替换方案是,在大多数情况下贪婪,但是每隔一段时间,或者说一个较小的概率 ϵ \epsilon ϵ,在这种情况下不选择贪婪,而是独立于行动值的估计,随机等概率地选择行动。我们称这种近似于贪婪方法的规则为 ϵ \epsilon ϵ贪婪方法( ϵ \epsilon ϵ-greedy methods)。

3. 10臂老虎机实验台

根据标准高斯分布(均值0,标准差1)生成10个行动值 q ∗ ( a ) q_*(a) q(a),a从1到10,假设这些值为行动对应的真实值,但是对于实验者来说这些值是未知的,实验开始时将对其进行初始化并在实验过程中进行预测与修正。实验过程中的奖励,根据以对应的 q ∗ ( a ) q_*(a) q(a)为均值,标准差为1的高斯分布来进行模拟,周期为1000个时间节点,即拉动遥感1000次,反复进行2000个独立的周期,取所有结果的平均值来对各算法进行衡量。
实验将采用三组不用的参数来进行对照,对应不同 ϵ \epsilon ϵ取值,0,0.1以及0.01。
哪种方法更优秀取决于任务的性质。比如,在这个实验中,假设奖励的标准差不是1而是10,当奖励有更多噪声时需要更多的探索才能找到最优的行动。相反,如果标准差为0,那么贪婪方法总是能很快找到最优的行动。在实际情况中,大多数问题是非静态的,好比在我们的实验中, q ∗ ( a ) q_*(a) q(a)并非是一成不变的,在这种情况下,非贪婪的行动也有可能在变化后给与更高的奖励。增强学习需要在利用与探索之间进行平衡。
后附实验在python下实现代码。

4. 增量方法(Incremental Implementation)

我们已经定义预测的行动值为某一行动所有已观测奖励的平均值,现在我们讨论如何更有效地计算。
根据定义,当第n次选择某一行动时,其行动值可通过以下公式计算:
Q n = R 1 + R 2 + ⋯ + R n − 1 n − 1 Q_n = \frac{R_1+R_2+\cdots+R_{n-1}}{n-1} Qn=n1R1+R2++Rn1
将所有历史奖励记录进行存储并在需要的时候进行读取是一个简单而又直观的实现方法,但是随着奖励数据的增长,对于内存的占用以及计算能力的需求将会提高。
一个简单的推导可以得到一个不需要存储所有历史奖励的公式,这种实现方法仅需要存储 Q n Q_n Qn和n。
Q n + 1 = 1 n ∑ i = 1 n R i = 1 n ( R n + ∑ i = 1 n − 1 R i ) = 1 n ( R n + ( n − 1 ) 1 n − 1 ∑ i = 1 n − 1 R i ) = 1 n ( R n + ( n − 1 ) Q n ) = 1 n ( R n + n Q n − Q n ) = Q n + 1 n [ R n − Q n ] \begin{aligned} 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] \end{aligned} Qn+1=n1i=1nRi=n1(Rn+i=1n1Ri)=n1(Rn+(n1)n11i=1n1Ri)=n1(Rn+(n1)Qn)=n1(Rn+nQnQn)=Qn+n1[RnQn]
表达式 [ R n − Q n ] [R_n-Q_n] [RnQn]可以理解为估计的误差。

import numpy as np
import matplotlib.pyplot as plt

def bandit(q, epsilon):
    Q, N= np.zeros(10), np.zeros(10)
    R_array = np.zeros(1000)
    R = 0
    for i in range(0,1000):
        if epsilon > np.random.rand():
            n = np.random.randint(0,10)
        else:
            n = np.argmax(Q)
        R_t = np.random.normal(loc=q[n], scale=1)
        R += R_t
        N[n] += 1
        Q[n] += (R_t-Q[n])/N[n]
        R_array[i] = R/(i+1)
    return R_array

t1 = np.zeros(1000)
t2 = np.zeros(1000)
t3 = np.zeros(1000)
for i in range(0,2000):
    q = [np.random.normal(loc=0, scale=1) for i in range(10)]
    t1 += bandit(q,0)
    t2 += bandit(q,0.01)
    t3 += bandit(q,0.1)
t1 /= 2000
t2 /= 2000
t3 /= 2000
plt.plot(t1,'g')
plt.plot(t2,'r')
plt.plot(t3,'b')
plt.show()

在这里插入图片描述

5. 非静态问题(Nonstationary Problem)

之前讨论的平均值方法对于静态老虎机问题是适用的,这种问题下奖励的概率分布不随时间变化而变化。我们同样也提到过更普遍的情况下,增强学习所处理的问题是非静态的,当奖励的概率分布随时间变化时,给与最新的奖励以更高的权重是一个合理的方案。一个很流行的方法是使用一个常量参数,步长(step-size)。比如在增量方法中,将误差的参数 1 n \frac{1}{n} n1改为 α \alpha α
Q n + 1 = Q n + α [ R n − Q n ] = α R n + ( 1 − α ) Q n = α R n + ( 1 − α ) [ α R n − 1 + ( 1 − α ) Q n − 1 ] = α R n + ( 1 − α ) α R n − 1 + ( 1 − α ) 2 Q n − 1 = α R n + ( 1 − α ) α

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值