强化学习的N臂匪徒模型

N臂强盗模型

假设有一个强盗在某个机器面前进行抽奖,有\(N\)个选择,每个选择都对应一个回报,而且每个回报都是基于某个特定概率分布的,但是可以理解为平均值是固定的,强盗的目的是选择平均回报率最高的那个行动。

行动值的计算方法

给出行动值的计算公式:
\[ Q_t(a)=\frac{R_1+R_2+\cdots+R_{N_t(a)}}{N_t(a)} \]

符号说明:

  • \(t\) 总共进行了\(t\)次选择
  • \(R_i\)\(i\)次选择行动\(a\)时获取的回报
  • \(N_t(a)\)\(t\)次总的选择中,行动a被选择的次数
  • \(Q_t(a)\) 总共的t次选择中,\(a\)的平均期望评估值

很明显,有不等式:
\[ N_t(a)\le t \]
这个策略的意义是选择平均回报最大的一个行动。

如果N_t(a)=0,那么\(Q_t(a)\)使用一个预定义的值。当\(N_t(a) \rightarrow \infin\)时,评估值接近实际值。

选择策略也非常容易,是一个基于贪心的策略,每次选择当前Q值最大的即可,即
\[ A_t=arg\ max_a\ Q_t(a) \]
实际情况下,需要添加一个\(\epsilon\)进行扰动,用于探索未被选择的行动。假设\(0<\epsilon<1\),然后产生一个均匀分布的随机数\(n\),如果\(n<\epsilon\)那么选择最优的,否则随机选择行动。

提高方法

基础的行动值计算方式对内存和时间的要求都太高了,在这里给出一个提高的方式。
\[ \begin{eqnarray} Q_{k+1}&=&\frac{1}{k}\Sigma_{i=1}^{k}R_i \\ &=&\frac{1}{k}(R_k+\Sigma_{i=1}^{k-1}R_i) \\ &=&\frac{1}{k}(R_k+(k-1)Q_k+Q_k-Q_k) \\ &=&\frac{1}{k}(R_k+kQ_k-Q_k)\\ &=&Q_k+\frac{1}{k}[R_k-Q_k] \end{eqnarray} \]

这里的符号说明:

  • \(k\) 某个行动被选择的次数

  • \(Q_{k+1}\) 某个行动被选择\(k+1\)次后的评估值
  • \(R_k\) 某个行动第\(k\)次被选择后,得到的一个奖励

因此,上述的公式可以理解成为:
\[ NewEstimate=OldEstimate+StepSize\left[Target-OldEstimate\right] \]
\(StepSize\)这里理解为\(\frac{1}{k}\),一般简写为\(\alpha\)或者\(\alpha_t(a)\),不过还可有其他的计算方式。

非静态问题的处理方法

对于非静态的强化学习问题,最近几次的回报的权重应该高于之前的回报权重,这种情况比较符合实际的情况。
\[ Q_{k+1}=Q_k+\alpha\left[R_k-Q_k\right] \]
在这里,\(\alpha \in (0,1]\)是一个常量那么,更新的规则应该是:
\[ \begin{eqnarray} Q_{k+1}&=&Q_k+\alpha\left[R_k-Q_k\right]\\ &=&\alpha R_k +(1-\alpha)Q_k\\ &=&\alpha R_k+(1-\alpha)\left[\alpha R_{k-1}+(1-\alpha)Q_{k-1}\right]\\ &=&\alpha R_k+(1-\alpha)\alpha R_{k-1}+(1-\alpha)^2Q_{k-1}\\ &=&\alpha R_k+(1-\alpha)\alpha R_{k-1}+(1-\alpha)^2\alpha R_{k-2}+\cdots+(1-\alpha)^{k-1}\alpha R_1+(1-\alpha)^kQ_1\\ &=&(1-\alpha)^kQ_1+\Sigma^{k}_{i=1}\alpha(1-\alpha)^{(k-i)}R_i \end{eqnarray} \]
那么,根据公式来看,问题的核心在于如何处理初始值\(Q_1\)。当然,静态的处理方式也依赖于初始值\(Q_1\)

UCB方法

把前面的贪心选择策略改成使用UCB公式的选择策略(别问我怎么推导的,真不会。。。)
\[ A_t=arg\ max_a\left[Q_t(a)+c\sqrt\frac{\ln t}{N_t(a)}\right] \]
这种方式克服了之前贪心策略的缺点,而且对于未选择的节点,也不是随机的了,同时能有效的均衡选择次数较多或者较少的点之间选择方式。

梯度匪徒方法

给出softmax公式:
\[ \Pr\{A_t=a\}=\frac{e^{H_t(a)}}{\Sigma_{b=1}^{n}e^{H_t(b)}}=\pi_t(a) \]
这样做的实际意义是把所有选择的奖励都统一到概率上,而且所有的奖励的概率之和是1,符合实际的意义。

使用随机梯度上升的学习算法,来更新数据:
\[ H_{t+1}(A_t)=H_t(A_t)+\alpha(R_t-\bar{R}_t)(1-\pi_t(A_t))\\ H_{t+1}(a)=H_t(a)-\alpha(R_t-\bar{R}_t)\pi_t(a)\space \space \space \forall a \ne A_t \]
其中,\(\alpha>0\)是步长参数,\(\bar{R}_t \in \mathbb{R}\)

还有其他的使用梯度的方式,后续补充。。。。好复杂。。。

猜你喜欢

转载自www.cnblogs.com/Erick-Lv/p/9941461.html