汤普森采样:多臂老虎机问题

两个AI工具包:

四种AI模型:

  1. 汤普森采样
  2. Q学习
  3. 深度Q学习
  4. 深度卷积Q学习

学习三步法:

  1. 获得对模型怎样运行的直觉
  2. 学会该理论背后的数学知识
  3. 用Python从头开始实现该模型

强化学习的五大原理

  • 输入与输出系统
  • 奖励
  • AI环境
  • 马尔科夫决策模型
  • 训练与推断

汤普森采样

  • 多臂老虎机问题:以最少的实验次数找出最好的老虎机。(迅速从位置胜率中找到最大的那一个)
  • 模型直觉:每台老虎机都有自己的贝塔分布,经过一轮又一轮的下注,具有最高胜率的老虎机的贝塔分布会逐渐向右平移,具有较低胜率的老虎机的贝塔分布会逐渐向左平移。
  • 输入状态:目前位于第几轮、nPosReward和nNegReward在该轮的取值。输出行为:下拉选中的老虎机的拉杆,即下注。奖励:1或-1
import numpy as np

## 仿真
# 事先设定每个老虎机的胜率
conversionRates = [0.15, 0.04, 0.13, 0.11, 0.05]
N = 10000   # 样本数
d = len(conversionRates) # 老虎机的数量

# 创立仿真数据集:每一轮老虎机按照胜率进行预先设定的实验结果
X = np.zeros((N, d))
for i in range(N):
    for j in range(d):
        if np.random.rand() < conversionRates[j]:
            X[i, j] = 1

# 创建两个数组记录下注每台老虎机时的输赢战况
nPosReward = np.zeros(d) # 赢钱次数
nNegReward = np.zeros(d) # 输钱次数

# 运行N轮汤普森采样
for i in range(N):
    
    selected = 0  # 选择的老虎机下标
    maxRandom = 0 # 记录所有老虎机中最高的贝塔分布
    
    for j in range(d):
        randomBeta = np.random.beta(nPosReward[j] + 1, nNegReward[j] + 1)
        if randomBeta > maxRandom:
            maxRandom = randomBeta
            selected = j
            
    if X[i, selected] == 1:
        nPosReward[selected] += 1
    else:
        nNegReward[selected] += 1

# 打印结果
nSelected = nPosReward + nNegReward
for i in range(d):
    print('老虎机{}被选中{}次'.format(i+1, nSelected[i]))
print('最好的老虎机是{}号'.format(np.argmax(nSelected) + 1))
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值