写在前面的话
Google DeepMind 发布AlphaGo,2016年3月以4-1的成绩击败了韩国世界冠军李世石,此事件后,引发人们的关注。而随后AlphaGo以100-0的成绩战胜了它的前代Alpha Go,创造一个人类很难达到的高度。我们不禁思考,为什么没有使用人类棋谱反而算法性能提升了?
1.强化学习
好了,带着疑问我们紧接着进入强化学习的世界,一探究竟。强化学习(Reinforcement learning),简称RL。RL属于机器学习的一个分支,跟以往的监督学习、无监督学习不同,强化学习的思路和人比较类似,是在实践中学习。比如学习走路,如果摔倒了,那么我们大脑后面会给一个负面的奖励值 => 这个走路姿势不好;如果后面正常走了一步,那么大脑会给一个正面的奖励值 => 这是一个好的走路姿势。
强化学习与监督学习相比,没有监督学习已经准备好的训练数据输出值,强化学习只有奖励值,但是这个奖励值和监督学习的输出值不一样,它不是事先给出的,而是延后给出的(比如走路摔倒)。
强化学习与非监督学习相比,在非监督学习中既没有输出值也没有奖励值的,只有数据特征,而强化学习有奖励值(为负是为惩罚),此外非舰队学习与监督学习一样,数据之间也都是独立的,没有强化学习这样的前后依赖关系。
1.1强化学习的应用
作为人类认可的弄潮儿-强化学习,它有什么独特的特点呢?
- 没有监督数据、只有奖励信号
- 奖励信号不一定是实时的,很可能是延后的,甚至延后很多
- 时间(序列)是一个重要因素
- 当前的行为影响后续接收到的数据
强化学习可以应用于不同领域,神经科学、心理学、计算机科学、工程领域、数学、经济学等。在实际生活中有广泛的应用,游戏AI,推荐系统,机器人仿真,投资管理,发电站控制等。
1.2强化学习与机器学习
强化学习没有教师信号,也没有label,即没有直接指令告诉机器该执行什么动作;反馈有延时,不能立即返回;输入数据是序列数据,是一个连续的决策过程。
比如AlphaGo下围棋的Agent,可以不使用监督学习,请一位围棋大师带我们遍历许多棋局,告诉我们每个位置的最佳棋步,这个代价很贵;很多情况下,没有最佳棋步,因为一个棋步的好坏依赖于其后的多个棋步;使用强化学习,整个过程唯一的反馈是在最后(赢or输)。
1.3基本概念
个体,Agent,学习器的角色,也称为智能体;
环境,Environment,Agent之外一切组成的、与之交互的事物;
动作,Action,Agent的行为;
状态,State,Agent从环境获取的信息;
奖励,Reward,环境对于动作的反馈;
策略,Policy,Agent根据状态进行下一步动作的函数;
状态转移概率,Agent做出动作后进入下一状态的概率;
对上面的网络结构,我们只需要关注四个重要的要素:状态(state)、动作(action)、策略(policy)、奖励(reward)。
RL考虑的是个体(Agent)与环境(Environment)的交互问题。目标是找到一个最优策略,使Agent获得尽可能多的来自环境的奖励,比如赛车游戏,游戏场景是环境,赛车是Agent,赛车的位置是状态,对赛车的操作是动作,怎样操作赛车是策略,比赛得分是奖励。
很多情况下,Agent无法获取全部的环境信息,而是通过观察(Observation)来表示环境(environment),也就是得到的是自身周围的信息。
1.3.1奖励(Reward)
奖励是信号的反馈,是一个标量,它反映个体在t时刻做得怎么样,个体的工作就是最大化累计奖励。强化学习假设是所有问题解决都可以被描述成最大化累积奖励。
1.3.2序列决策(Sequential Decision Making)
序列决策,选择一定的行为系列以最大化未来的总体奖励。这些行为可能是一个长期的序列;奖励可能而且通常是延迟的;有时候宁愿牺牲短期奖励,从而获取更多的长期奖励。
1.3.3个体与环境的交互(Agent & Environment)
从个体的视角,在 t时刻,Agent可以,有一个对于环境的观察评估,对其做出一个行为,然后从环境得到一个奖励信号。
环境则接收个体的动作,更新环境信息,同时使得个体可以得到下一个观测,给个体一个奖励信号。
1.3.4Markov状态
Markov状态指马尔可夫性质的随机变量序列X1,X2,…,Xn的当前状态,过去状态和未来状态。
给定当前状态,将来状态和过去状态是相互独立的,即t+1时刻系统状态的概率分布只与t时刻的状态有关,与t时刻以前的状态无关
从t时刻到t+1时刻的状态转移与t的值无关
马尔可夫链模型可以表示为=(S,P,Q)
-
S是系统所有可能的状态所组成的状态集(也称为状态空间)
-
P是状态转移矩阵
-
Q是系统的初始概率分布
1.3.4.1马尔可夫属性(Markov Property)
条件:一个状态St是马尔可夫的,当且仅当
贪吃的老鼠想要吃到奶酪,它要采用采取什么的策略才能成功找到合适的路劲去享受美味的食物?把这一案例,抽象出来,我们可以得到三个针对老鼠的事件序列,其中前两个最后的事件分别是老鼠遭电击和获得一块奶酪,那么第三个事件序列,最后老鼠是获得电击还是奶酪?
- 假如Agent状态 = 序列中的后三个事件
- 假如Agent状态 = 亮灯、响铃和拉电闸各自事件发生的次数
- 假如个体状态 = 完整的事件序列
1.4强化学习Agent
- 基于价值的强化学习,Value-Based
通过学习价值函数指导策略制定(例如Ɛ-greedy执行方法)
- 基于策略强化学习,Policy-Based
没有价值函数,直接学习策略
- 结合策略梯度以及价值函数的强化学习,Actor-Critic
既学习价值函数也学习策略的方法
演员-评论,相当于演员在演戏的同时有评论家指点继而演员演得越来越好
1.5策略网络
任何游戏,玩家的输入被认为是行为a,每个输入(行为)导致一个不同的输出,这些输出称为游戏的状态s。策略网络根据不同状态得到一个状态-行动的配对的列表(S)。
S包括了策略网络中的所有策略
比如,在游戏中输入a1导致状态s1(向上移动),输入a2会导致状态s2(向下移动)
所以策略网络就是对于给定的输入,通过学习给出一个确定输出的网络,(动作1,状态1),(动作2,状态2)。
S:状态集
A:动作集
R:奖励分布,给定(state,action)
P:状态转移概率,对于给定的(state,action),下一个状态的概率分布
贴现因子,为了防止奖励r达到无穷大的预防措施 => 无穷大的奖励会忽略掉智能体采取不同行动的区别
1.5.1价值网络(数值网络)
价值网络通过计算目前状态s的累积分数的期望,价值网络给游戏中的状态赋予一个分数(数值),每个状态都经历了整个数值网络。奖励更多的状态,会在数值网络中的数值Value更大;这里的奖励是奖励期望值,我们会从状态集合中选择最优的
V :价值期望
1.5.2策略网络与价值网络
策略网络的输出,是一个落子的概率分布。比如,棋盘中现在轮到白棋走,蓝点代表成为下一手的可能性。123456789代表前九位的选点。
价值网络的输出,一个可能获胜的数值,即“价值”,这个价值训练是一种回归(regression),即调整网络的权重来逼近每一种棋局真实的输赢预测。对于价值网络,当前局面的价值=对终局的估计。
1.6QLearning
Q函数,也称为动作值函数,有两个输入:「状态」和「动作」,它将返回在这个状态下执行该动作的未来奖励期望
将agent随机放在任一房间内,每打开一个房门返回一个reward
根据房间之间连通性的关系,可以得到Reward矩阵(R矩阵)
可以把 Q 函数视为一个在 Q-table 上滚动的读取器
1.6.1QLearning的使用
初始化Q表,用于记录状态-动作对的值,每个episode中的每一步都会根据公式更新一次Q表
为了简便,将学习率 设为1,更新公式为:
- 当前状态s的最大将来奖励等于下一状态 s’ 的最大将来奖励乘以折扣因子
1.7基于策略的强化学习(Policy-Based)
1.7.1随机策略有时候是最优的
对于石头剪刀布的游戏,只要一方有一个确定性的策略,就会被对手抓住进而整体上输掉。最好的策略是随机选择每次出法,以得到最大可能的总体奖励。
一共有5个格子,个体需要避免碰到骷髅而尽可能找到钱袋子,我们用对Agent观测到的特征来描述状态空间state,灰色的两个格子将会是无法区分的,此时就发生了状态重名Aliased。
当发生状态重名的情况,如果采用确定性的策略话,Agent处于哪个灰色格子时,都只能选取相同的行为。
价值函数给出的策略要么都是向东,要么都是向西。如果是向西,那么当个体处在左侧灰色格子时,它将一直(对于greedy执行)或很长时间(对于Ɛ-greedy执行)徘徊在左侧两个格子之间而无法到达有钱袋子的格子,因而很长时间得不到奖励。
1.7.2Policy-Based优势
收敛性好,因为Policy-Based每次只改善一点点,但总是朝着好的方向在改善,而有些价值函数在后期会一直围绕最优价值函数持续小的震荡而不收敛。
对于高维度或连续状态空间来说,更高效,使用基于价值函数的学习在得到价值函数后,制定策略时,需要比较各种行为对应的价值大小,这个比较过程就比较难,而采用Policy-Based会高效很多。
能学到一些随机策略,而Value-Based通常是学不到随机策略。
针对价值函数非常复杂的情况,采用Policy-Based更适合。比如当小球从从空中某个位置落下你需要左右移动接住时,计算小球在某一个位置时采取什么行为的价值是很难计算的,但基于策略就简单许多,只需要朝着小球落地的方向移动即可。
2.AlphaGO Zero的强化学习
2.1强化学习问题
要解决强化学习问题,首先把要解决的问题转化成为一个环境(environment)。
-
状态空间(state space):对于围棋来说,每一个棋盘布局(记为s)就是一个状态,所有可能的棋盘布局就是状态空间
-
动作空间(action space):对于围棋来说,所有可能落子的位置就是一个动作空间
-
可行动作(available action): 给定一个棋盘,哪里可以落子,哪里不可以
-
状态转化:下棋之后,对手可能会下的棋。如果是两个Alpha Zero对弈的话,相互是对方环境的一个部分
-
奖励函数:下棋之后得到的信号反馈。在围棋里面,就是胜率的一个正函数。胜率越大,奖励越大
2.2AlphaGO Zero策略
落子概率也称为策略(policy)
有了落子概率,简单的方式是直接按照这个概率进行落子 =>这会导致神经网络原地踏步,因为Policy Value Network的训练数据是自我对弈(self-play)
仅仅自己学习自己是不会有改进的,需要有一个办法来利用值函数的信息来优化这个策略
在AlphaGo系列算法里面是使用蒙特卡洛树搜索(MCTS)来进行策略优化的
MCTS的输出 是根据值函数V得到的一个更优策略,它将被用于通过self-play来生成数据供深度神经网络学习
MCTS是AlphaGo能够通过self-play不断变强的重要原因
2.3AlphaGo Zero
论文地址:Mastering the game of Go without human knowledge,2017(DeepMind发表在Nature)
使用一个参数为θ的深度神经网络 ,将棋盘表示和历史记录作为输入,输出落子概率和价值
落子概率向量p代表选择每个落子动作a(包括放弃行棋)的概率
价值v是标量评估,估计当前玩家在棋局状态为 s 时获胜的可能性
AlphaGo Zero神经网络将策略网络和价值网络合并成一个单一的体系结构,其中神经网络由13层的卷积神经网络组成
对于每个棋局s,通过神经网络的指导来执行MCTS搜索,MCTS搜索输出每次落子的概率分布π。
经过搜索后的落子概率p 通常比神经网络 输出的落子概率p更强 => 将MCTS看作是一个强大的策略改进算法。
利用MCTS(蒙特卡洛搜索树)实现策略改善:
- 在每个状态s处,原神网络的策略为 ,经过蒙特卡洛搜索树得到的策略为 ,因此在状态s处,策略改善为
利用MCTS(蒙特卡洛搜索树)实现策略评估:
- 在每个状态s处,都会执行蒙特卡洛搜索树给出的策略,直到最终棋局结束
- 根据棋局的输赢会得到奖励 z 值
- 棋局的输赢是由当前策略决定的 => 将奖励值 z 当成是当前策略的评估
2.4AlphaGo Zero神经网络的训练
每次试验我们都可以收集到训练数据,根据训练数据可构造 Loss Function:
v为value,z是当游戏结束的时候的实际的胜负,即+1,-1
在这里我们做一个回归的loss,经过大数据的训练,神经网络会掌握一个宏观的胜负概率的,是神经网络的输出与MCTS探索出来的概率分支之间的交叉熵,是L2正则项,优化器,可以采用Adam或者SGD进行优化。
3.蒙特卡洛算法
3.1MCTS来源
蒙特卡洛算法,并不是一种算法的名称,而是对一类随机算法的特性的概括。
原理:采样越多,越近似最优解
比如,我要从筐里找到最大的苹果,苹果num=100,采用策略:随机拿1个,每次留下最大的,再随机拿1个……拿的次数越多,挑出的苹果就越大。除非拿满num=100次,否则无法肯定挑出的一定是最大的,这种挑苹果的算法,就属于蒙特卡洛算法,即尽量找好的,但不保证是最好的。
如果我们求解的问题,可以在有限采样内,必须给出一个解,这个解不要求一定是最优解,那么就可以采用蒙特卡洛算法。
3.2MCTS(Monte Carlo Tree Search)
蒙特卡洛树搜索,结合了随机模拟的一般性和树搜索的准确性
MCTS是一个搜索算法,它采用的各种方法都是为了有效地减少搜索空间。在MCTS的每一个回合,起始内容是一个半展开的搜索树,目标是原先的半展开+再多展开一个/一层节点的搜索树
MCTS的作用是通过模拟来进行预测输出结果,理论上可以用于以{state,action}为定义的任何领域
使用主要步骤:
- 选择,从根节点开始,按一定策略,搜索到叶子节点
- 扩展,对叶子节点扩展一个或多个合法的子节点
- 模拟,对子节点采用随机的方式(这也是为什么称之为蒙特卡洛的原因)模拟若干次实验。模拟到最终状态时即可得到当前模拟所得的分数
3.3MCTS原理
每个节点代表一个局面,A/B代表被访问B次,黑棋赢了A次
我们将不断重复一个过程:
- Step1,选择Select,从根节点往下走,每次都选一个“最有价值的子节点”,直到找到“存在未扩展的子节点”,即这个局面存在未走过的后续着法的节点,比如 3/3 节点
- Step2,扩展Expansion,给这个节点加上一个 0/0 子节点,对应之前所说的“未扩展的子节点”
- Step3,模拟Simluation,用快速走子策略(Rollout policy)走到底,得到一个胜负结果
- Step4,回传Backup,把模拟的结果加到它的所有父节点上,假设模拟的结果是 0/1,就把0/1加到所有父节点上
3.4在Select过程中,如何判断节点的价值?
1.如果采用贪心策略,即每次都只选择“最有利的” => 搜索树的广度不够,容易忽略实际更好的选择
2.简单有效的选择公式
x是节点的当前胜率估计,N 是节点的访问次数,C是指定的常数
- c越大就越偏向于广度搜索 => exploration
- c越小就越偏向于深度搜索 => exploition
节点7/10,节点5/8,节点0/3=》C值很小的时候,下一步会Select哪个节点?
3.5UCB算法(Upper Confidence Bound)
用于在Select过程中,判断节点的价值,每次选择选取最大的UCB节点:
Q(s,a)代表蒙特卡洛树中已探索的值,Q值的更新就是在之前蒙特卡洛树搜索中每一次backup反馈的值的平均值
P值是先验概率,是由神经网络计算得到的值
N是这个action的探索次数,c用于调节探索与利用的超参数
对于没有探索的action,和已经探索很多次但是探索反馈很高的action都会有较大的UCB值
3.6MCTS的流程理解
对于任意的局面State(就是节点),要么被展开过(expand),要么没有展开过(就是叶子节点)
展开过的节点可以通过Select步骤进入下一个局面State,下一个局面State仍然是这个过程……,一直持续下去直到这盘棋分出胜负,或者遇到某个局面没有被展开过为止。
如果没有展开过,那么执行expand操作,通过神经网络得到每个动作的概率和胜率v,把这些动作添加到树上,最后把胜率v回传(backed up)。
Expand的同时就在做evaluate,这是为Backup做准备,因为在Backup步骤,我们要用v来更新Q值的,但是如果只做了一次Select,棋局还没有结束,此时无法得到v,必须要等到一盘棋下完才可以得到v(当前这步的好坏评估是由最终结果决定)。
3.7AlphaGo Zero中的蒙特卡洛树搜索
Select,每次模拟通过选择具有最大UCT值的
Expand&Evaluate,展开叶子节点,通过神经网络来评估局面,P的值存储在叶子结点扩展边上
Backup,更新行动价值Q等于在该行动下的子树中的所有评估值V的均值
Play,当MCTS搜索完成时,返回局面s下的落子概率π,与N^(1 /τ)成正比,其中N是从根状态每次移动的访问计数,τ是控制温度的参数
4.AlphaGo的策略价值网络
4.1策略价值网络
AlphaGo 的策略网络,让我们更准确地选择需扩展的节点
AlphaGo 的价值网络,可以与快速走子策略的模拟结果相结合,得到更准确的局面评估结果
策略网络可以让我们对动作使用输出概率来表示,对于离散动作空间,使用softmax动作的出现概率;对于连续空间,使用高斯分布来获取动作的概率
4.2神经网络
神经网络结构可以自行设计的
输入为当前棋盘,输出为双端口,分别表示当前棋盘的状态值(value)和当前棋盘各个位置的走子的概率,这里的棋盘状态值,即机器评价的当前局面的“好坏”
4.3Policy Gradients
基本思想,直接根据状态输出动作的概率 => 使用神经网络
作用,输入当前的状态,神经网络输出在这个状态下采取每个动作的概率
对于强化学习来说,我们不知道动作的正确与否,只能通过奖励值来判断这个动作的相对好坏
如果一个动作得到的reward多,那么就让它出现的概率增大,如果一个动作得到的reward少,就让它出现的概率减小
loss= -log(prob)*vt
- log(prob)表示状态s对动作a的吃惊程度,如果概率越小,-log(prob)越大,vt表示当前状态s下采取动作a所能得到的奖励(即当前的奖励和未来奖励的贴现值的求和)
因为要看到奖励,所以Policy Gradients算法必须通过完整的eposide才能进行参数更新,而不是像value-based方法那样,每一个(s,a,r,s’)都可以进行参数更新
如果在prob很小的情况下, 得到了很大的Reward,即vt数值高, 那么-log(prob)*vt就更大, 表示更吃惊, (选了一个不经常使用的动作, 却发现能得到了一个很好的 reward, 那么就对这次的参数进行一个大幅调整)
如果这个回合选择某一动作,下一回合选择该动作的概率就会大一些,同时看奖惩值,如果奖惩是正的,那么会放大这个动作的概率,如果奖惩是负的,就会减小该动作的概率
4.4Policy Gradients实现步骤
蒙特卡洛策略梯度reinforce算法, 使用价值函数v(s)来近似
输入:N个蒙特卡洛完整序列,训练步长α
输出:策略函数的参数θ
for 每个蒙特卡洛序列:
- a. 用蒙特卡洛法计算序列每个时间位置t的状态价值vt
- b. 对序列每个时间位置t,使用梯度上升法,更新策略函数的参数θ:
返回策略函数的参数θ:这里的策略函数可以是softmax策略,高斯策略或者其他策略
Policy-Based优点:
- 具有很好的收敛性
- 对于高维空间或者是连续空间更加收敛
- 能对随机策略进行学习
Policy-Based不足:
- 容易收敛到局部最优解,而非全局最优
- 对策略的估计有很大方差,求解过程比较低效
5.总结
-
强化学习是机器学习的一个分支,思路和人比较类似,都是在实践中学习
-
在很多领域中都有应用:计算机科学,工程,机器人,数学,经济学,心理学,神经科学
-
在Agent AI中,如果没有大量的数据标注,通过强化学习依然可以得到不错的结果(AlphaGO)
-
四个重要的要素:状态(state)、动作(action)、策略(policy)、奖励(reward)
-
强化学习仅凭要素依然无法帮我们解决问题,我们需要模型的简化 => 引入马尔科夫决策过程(Markov Decision Process,MDP)来简化强化学习的建模
-
MDP是一类不确定性的搜索问题,目标是结合奖励函数,搜索一个可行的状态转换路径(state 和 action 的序列)使得奖励最大化
-
使用MDP(马尔科夫决策过程),是因为认为状态转换,只跟当前时刻的 state 和 action 有关
- 决策体现在需要根据state和潜在的奖励,选择一个 action
- 不确定性体现在转换函数,状态s下执行动作a,最后到达的状态s’ 具有不确定性,获得奖励R也具有不确定性
- 策略网络的输出,是一个落子的概率分布,能学习到一些随机策略
- 价值网络的输出,一个可能获胜的数值,即“价值”,对于价值网络当前局面价值=对终局的估计
- 使用MCTS(蒙特卡洛树搜索)进行策略优化,通过self-play变强
- Policy Value Network的训练数据是自我对弈(self-play)
- 输入当前的状态,神经网络输出在这个状态下采取每个动作的概率,终局价值