强化学习中的bootstrap和统计学中的bootstrap有什么联系?

本人对于强化学习中所说的bootstrap(自举法),一直没有找到比较形式化的定义,仅仅是停留在“意会”的层面,模模糊糊理解为像递归一样,用到后面没有…
关注者
26
被浏览
12,148
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

自举(Bootstrap)的字面意思是“拔自己的鞋带,把自己举起来”。即“自己把自己举起来(自举)”,从这层意思出发,似乎现实中是不太可能的,然而在统计和机器学习是可以做到自举的。

在强化学习中,“自举”的意思是“用一个估算去更新同类的估算”。类似于自己把自己给举起来。首先回顾一下最优贝尔曼方程:

Q^*(s_t,a_t)=\mathbb{E}_{S_{t+1}\sim p(\cdot|s_t, a_t)}[R_t + \gamma\cdot\max_{A\in\mathcal{A}}Q^*(A_{t+1},A)|S_t=s_t,A_t=a_t]

根据贝尔曼方程,我们同状态 s_t 出发,一直交互到结束,可以得到 s_t,a_t,r_t;s_{t+1},a_{t+1},r_{t+1};\cdots;s_N,a_N,r_N 这样一组交互序列,然后可以用贝尔曼方程计算出状态价值函数 Q(s_t,a_t) 。通过这样不断地完整交互用来得到动作价值函数的方法叫做蒙特卡洛方法(MC)。当我们难以通过MC(蒙特卡洛方法)采样到完整的交互序列时(从开始到结束),我们会通过只采部分样本便进行更新的时序差分方法(TD)。通过的做法是采用神经网络 q(s_t,a_t;\theta) 去逼近 最优动作价值函数Q^*(s_t,a_t) ,这时候我们可以得知: q(s_t,a_t;\theta) 是神经网络在 t 时刻对最优状态动作函数 Q^*(s_t,a_t) 的预测,它没有任何的事实部分。而当我们走一步时,会收到真实的观测 r_t ,此时根据贝尔曼方程得知,用部分基于事实的 r_t+q(s_{t+1},a_{t+1}|\theta) 来表示最优动作价值明显比直接用 q(s_t,a_t|\theta) 精确。

这就好比你从某个城市出发要到另一个城市, q(s_t,a_t|\theta) 表示出发前你预估的到达目的地需要的时间,而 r_t+q(s_{t+1},a_{t+1}|\theta) 表示你走了一部分路后,通过时钟发现已经花了 r_t这么长时间,然后再次估算从这个地点到目的地的所需的时间为 q(s_{t+1},a_{t+1}|\theta) 。这时候我们可以重新估算从最初的始发地到目的地的时间可以表示为 r_t+q(s_{t+1},a_{t+1}|\theta) ,它理论上要比直接从始发地估算的时间 q(s_t,a_t) 准确。(这个例子用强化学习的符号表示不太精确)

这时候我们就可以让 q(s_t,a_t|\theta) 去逼近 r_t+q(s_{t+1},a_{t+1}|\theta) 来训练网络,因为后者是基于一定事实的,比前者准确的。这里就存在这样一个问题,我们实际上用一个网络的输出 q(s_t,a_t) 去拟合同一个网络产生的另一个输出 r_t+q(s_{t+1},a_{t+1}) ,这里就是用自己去更新自己,这就是强化学习中TD算法自举产生的原因。而如果用MC方法,它是全部基于事实,没有自举存在。解决自举的方法目前主要是后者 r_t+q(s_{t+1},a_{t+1}|\theta) 中不采用 q 网络,而是采用另一个和 q 网络结构完全一样的网络 q' 去代替。比如Double DQN,TD3等算法。

自举的坏处是估计的 q(s_t,a_t|\theta) 会有偏差,实际上会造成偏差的传播。因为动作选择时用max Q这种方式本身就有一个价值高估的问题,而自举会把这种高估从 q(s_{t+1},a_{t+1}|\theta) 传播到 q(s_t,a_t|\theta)


参考:

深度强化学习(初稿),王树森,张志华; 2021-03-18版本。