c语言五子棋蒙特卡洛,AlphaZero 五子棋实现(附完整代码)

强化学习(下文统一使用 RL 代替)进入大众视野应该是 2016 年 3 月,DeepMind 出品 AlphaGo 以 4:1 击败世界围棋高手李世石,RL 算法理论的形成却可以追溯到 1980 年前后。

RL 有别于常用于 NLP 和 CV 领域的监督学习,监督学习中,数据由输入数据和标签(label)组成,创建于训练前,不会随着训练中的状态变化而更改相应策略,例如文本分类,提供数据(x)和对应 label(y)喂入模型(f)进行训练即可,用公式总结:

$$y = f(x)$$

RL 更接近人类学习的过程,根据当前所处环境(state S 代替),结合已有经验(f)制定对应策略(policy P 代替),并作出价值更高的行为(action A 代替),此后将会在一定时间内得到回馈(reward R 代替)。

监督学习解决的是概率问题,强化学习解决的是策略问题。

RL 目前已经在具有明显边界,明确规则和强定义成功失败的领域中取得了超越人类的表现,因为明显边界,S 是有限的,哪怕大量,因为规则明确,制定策略并输出更有价值行为是明确的,因为强定义成功失败,R 是明确的。大部分游戏具有上述特性,例如本篇文章将会使用到的 CartPole 和五子棋。

CartPole 游戏介绍

如下动图所示,游戏目标是保持杆一直竖直朝上而不倒下,此时需要朝左右移动杆使其平衡。我们需要通过游戏返回给我们的状态(S,一个四维向量)指定策略(P)执行动作(A),取值为 0 或 1,代表向左或向右移动,R 值恒定为 1,当杆倒下时游戏结束。如果杆竖直向上的时间越长,得到的 R 就越多。

c语言五子棋蒙特卡洛,AlphaZero 五子棋实现(附完整代码)_第1张图片

RL 的演进

Deep Q Learning

这里使用 CartPole 举例,首先我们转换为马尔科夫决策过程(Markov decision process,MDP),将游戏转换为 R = Q(S, A)。

a3e9df47ef2456ba965eb20b9874d654.png

这里要引入衰减系数 Discount Factor:γ ∈ [0, 1],γ 的引入有多种解释,我比较认可经济学角度的理解:

“今天的 1 元钱价值大于明天的 1 元钱”

这样我们的目标就转化为让游戏尽量的长,得到的 R 就会越大:

19dadfea1517bf82af0506585db34c80.png

在游戏 CartPole 中我们就可以转化为:

优化 Q 使得 Q(S, A) 评估当前 S 得到越合理的 A -> 杆竖直向上的时间越长 -> 得到的 R 越多

你可能感兴趣的:(c语言五子棋蒙特卡洛)