两个AI工具包:
- Colaboratory运行环境:欢迎使用 Colaboratory - Colab (google.com)
- Github源代码页面:PacktPublishing/AI-Crash-Course: AI-Crash-Course, published by Packt (github.com)
四种AI模型:
- 汤普森采样
- Q学习
- 深度Q学习
- 深度卷积Q学习
学习三步法:
- 获得对模型怎样运行的直觉
- 学会该理论背后的数学知识
- 用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))