强化学习算法教程 (强化学习算法路径规划)

MAB全程是Multi-armed bandit problem,是一个多臂老*机虎**的问题。

老*机虎**(slot machine) 是一种用零钱赌博的机器,因为上面有老虎图案的筹码而得名。老*机虎**有三个玻璃框,里面有不同的图案,投币之后拉下拉杆,就会开始转,如果出现特定的图形(比如三个相同)就会吐钱出来,出现相同图型越多奖金则越高。

原始问题如下:

一个赌徒,要去摇老*机虎**,走进*场赌**一看,一排老*机虎**,外表一模一样,但是每个老*机虎**吐钱的概率可不一样,他不知道每个老*机虎**吐钱的概率分布是什么,那么每次该选择哪个老*机虎**可以做到最大化收益呢?

强化学习算法教程,强化学习技巧

是不是看了图片才发现,不是老*机虎**多臂,而是人多臂,主要是同时投资在多个项目上时候如何保证自己的收益最高。

我们把上面的例子简化一下,具象一下,假设这个老*机虎**很简单,你每次投入1元,有一定的概率突出两元。三台老*机虎**吐钱的概率分别是20%,40%,60%,但是你并不知道他们的概率分别是多少,你手里有一万块钱,那么现在,你该如何参与这场赌局?

稍微有一些赌博经验的可能会快速的想到,我先从一万里面拿出一千块,均匀的分配到三个老*机虎**上,每个333块,然后就可以测算出这三个哪一个的吐钱概率最高,接下来就全部投入到吐钱概率最高的那个老*机虎**即可。

但是这里面有一个问题,你需要先投入多少钱来测试这三个老*机虎**吐钱的概率呢?投入太少怕测试不准,投入太多,收益就又变低了。

MAB就是从数学上面解决了这个问题,我们先抛开复杂的公式,用笨方法推演一遍。根据微分的思想,我们能获得最好收益的办法肯定不是选出一千块来测算概率,而应该是每次投入一块钱,投入一块钱以后再重新测算一下概率。

  1. 第一次我们因为完全不知道,我们就去查了下,发现这个老*机虎**平均吐钱概率是40%左右,这样老板能赚钱,玩家也愿意投入,那我们就假定每个老*机虎**的概率都是40%,这时候我们根据概率从中选出一个来。因为三个概率一致,我们就直接选就好了。
  2. 第二次选择的时候根据第一条的结果我们知道第一台机器尝试了一次,吐了一次,但是我们肯定不能认定他是100%吐币的,因为测试的次数肯定不够对不对,这是我们怎么办?我们就假定原来已经投币过100次了,其中40次吐币了,这样,我们又在第一步投了一次,总的投币次数就变成101次了,吐币次数也变成了41次。
  3. 这时候,三台老*机虎**吐钱概率分别是41/101,40/100,40/100,我们根据这个概率需要选出一个把第二个硬币投进去,第一个的概率最高,那我们是不是就选第一个呢?
  4. 很明显不是的,上面这个41/101明显不是吐币的概率。这时候我们可以想到一个类似的办法来解决这个问题,就是给每个老*机虎**产生一个随机数,随机数的范围是0-概率值,对应现在三台老*机虎**分别是
  5. 第一台 0 — 41/101之间
  6. 第二台 0 —40/100之间
  7. 第三台 0 —40/100之间
  8. 然后把这三个随机数大小比较,选出最大的那个老*机虎**进行投币。
  9. 后面依次类推。每次投币以后更新概率的算子。

数学求证

前面我们用笨方法进行了一次推演,后面用数学的方式来证明一下,同时把相关概念也做一个解释。

伯努利过程

先说下什么是伯努利实验。

伯努利实验(Bernoulli trial)是只有两种结果可能的单词随机实验。下面都是常见的伯努利过程

  • 抛一次硬币
  • 一次投篮是否命中
  • 一次投掷筛子结果是否等于6(我们可以通过这种方式转化为伯努利过程)
  • 一次老*机虎**投币是否吐币

beta分布

beta分布是指概率的概率分布。

以上面的例子,老*机虎**平均吐币概率是40%,那么,对于任何一台老*机虎**,我都可以认为他吐币概率会在40%左右(20%-60%之间),是40%的概率最高,然后非常高(60%)的概率比较低,特别低(20%)的概率也比较低。所以我们上面得到的41/101就是对应着一个beta分布,beta分布需要两个参数,α和β,分别表示成功次数和失败次数。

beta分布的平均值是α/(α+β),每次投币如果吐币则α加一,否则β加一。

Thompson sampling

Thompson sampling是一种MAB算法的实现方式,也就是我们上面想出的那个办法。

我们通过让每个选项产生一个随机数,然后选出最大的随机数。

这里面的学问主要是在这个如何产生随机数上面,上面通过控制随机数最大值的方式明显不够科学。

科学的方法应该是产生一个beta分布的随机数。

因为beta分布的含义就是概率出现的概率。

因此,beta分布产生的随机数就是指按照服从概率的概率分布的方式产生一个随机数。