强化学习随笔(2)
<img src="./images/rl_gambling.jpg">
-
状态
-
行为
-
奖励
-
状态到动作
-
状态、动作到奖励关系
-
动作到状态
-
都是随机变量
目标函数
通过调整参数更新参数,让模型的参数最小。
我们需要将问题变为一个优化问题,
调整的,在系统中,可以改变就是策略,所以能够改变,
这里有一个问题,这个问题是什么,如果要优化策略时间点和最大目标时间点是否一致,这个是需要考虑,我们那 alphaGo 来解释这个问题,在 alphaGo 每下一局会得到 reward,但是对于每一步是没有 reward 的。但是我们在 AlphaGo 优化策略是每一步上,这也就是优化难点,
例如现在努力学习,要考研,就要放下当前找工作来获得 reward ,探索与利用之间矛盾。
汤普森采样
Beta 分布
Beta 布可以看作是一个概率的分布,当我们不知道一个东西的具体概率是多少时,给出了所有概率出现的可能性大小,可以理解为概率的概率分布。
棒球运动的一个指标就是棒球击球率,就是用一个运动员击中的球数除以总的击球数,一般认为 0.27 是一个平均的击球水平,如果击球率达到 0.3 就会认为非常优秀了。如果我们要预测一个棒球运动员,他整个赛季的棒球击球率,怎么做呢?你可以直接计算他目前的棒球击球率,用击中数除以击球数。但是,这在赛季开始阶段时是很不合理的。假如这个运动员就打了一次,还中了,那么他的击球率就是100%;如果没中,那么就是 0%,甚至打 5、6 次的时候,也可能运气爆棚全中击球率 100%,或者运气很糟击球率 0%,所以这样计算出来的击球率是不合理也是不准确的。
当运动员首次击球没中时,没人认为他整个赛季都会一次不中,所以击球率不可能为 0。因为我们有先验期望,根据历史信息,我们知道击球率一般会在 0.215到0.36之间。如果一个运动员一开始打了几次没中,那么我们知道他可能最终成绩会比平均稍微差一点,但是一般不可能会偏离上述区间,更不可能为 0。
一个最好的方法来表示这些先验期望(统计中称为先验(prior))就是beta,表示在运动员打球之前,我们就对他的击球率有了一个大概范围的预测。假设我们预计运动员整个赛季的击球率平均值大概是 0.27左右,范围大概是在 0.21 到0.35之间。那么用 Beta 分布来表示,我们可以取参数 ,,因为 ,图形分布也主要集中在0.21~0.35之间,非常符合经验值,也就是我们在不知道这个运动员真正击球水平的情况下,我们先给一个平均的击球率的分布。
假设运动员一次击中,那么现在他本赛季的记录是“1次打中;1次打击”。那么我们更新我们的概率分布,让概率曲线做一些移动来反应我们的新信息。
汤普森采样
汤普森采样的背后原理正是上述所讲的 Beta 分布,把 Beta 分布的 a 参数看成是推荐后用户点击的次数,把分布的 b 参数看成是推荐后用户未点击的次数,则汤普森采样过程如下
- 取出每一个候选对应的参数 a 和 b
- 为每个候选用 a 和 b 作为参数,用 Beta 分布产生一个随机数
- 按照随机数排序,输出最大值对应的候选
- 观察用户反馈,如果用户点击则将对应候选的 a 加 1,否则 b 加 1
实际上在推荐系统中,要为每一个用户都保存一套参数,比如候选有 m 个,用户有 n 个,那么就要保存 个参数。
1)如果一个候选被选中的次数很多,也就是 a+b 很大了,他的分布会很窄,换句话说这个候选的收益已经非常确定了,就是说不管分布中心接近 0 还是 1 都几乎比较确定了。用他产生随机数,基本上就在中心位置附近,接近平均收益。
2)如果一个候选,不但 a+b 很大,即分布很窄,而且 a/(a+b) 也很大,接近 1,那就确定这是个好的候选项,平均收益很好,每次选择很占优势,就进入利用阶段。反之则有可能平均分布比较接近与0,几乎再无出头之日。
3)如果一个候选的 a+b 很小,分布很宽,也就是没有被选择太多次,说明这个候选是好是坏还不太确定,那么分布就是跳跃的,这次可能好,下次就可能坏,也就是还有机会存在,没有完全抛弃。那么用它产生随机数就有可能得到一个较大的随机数,在排序时被优先输出,这就起到了前面说的探索作用。
choice = numpy.argmax(pymc.rbeta(1 + self.wins, 1 + self.trials - self.wins))
首先我们有一个先验概率,然后通过做实验会有一个后验概率,
具体来说,我们就考虑 Beta-Bernoulli Bandit,也就是说,对于 我们的先验分布(prior distribution)是 Beta 分布,而每个 arm reward 的分布是以 为参数的 Bernoulli 分布。容易知道,在这种情况下,的后验分布仍然是 Beta 分布。
这里只用到了最基本的概率论和统计的知识,以防大家有些失忆,我写一些关键的公式出来。假设现在我们有 K 个机器,那么平均的 reward 事先是不知道的。在一开始,算法会选择一个 A 然后会观察到 reward 这是一个从Bernoulli分布进行 sample
此外对于 Bernoulli 的