强化学习
1.引言
强化学习的目标是要通过奖赏与惩罚来对当前的问题得到一个最好的解决策略,对好的策略进行奖赏,对坏的策略进行惩罚,不断的强化这个过程,最终得到一个最好的策略。
2.K-摇臂赌博机
“K-摇臂赌博机”是单步强化学习任务的一个理想模型,如下图所示
该机器共有k各摇臂(图中为5个),每次只能选择摇其中一个,每个摇臂会以各自一定的概率分布掉金币,我们需要做的是,在有限的摇臂次数下,寻找一种策略能够使我们获得的金币累积奖励最大。想要最大化单步奖赏,需要考虑两个方面:一是知道每个动作带来的奖赏,二是选择执行奖赏最大的那个动作。一般来讲,动作带来的奖赏是来自一个概率分布,仅通过一次尝试并不能确切地获得平均奖赏值。
关于摇臂赌博机我们可以有两种思路:第一种就是每次再选择时都去利用摇过的摇臂中掉金币最多的那个,这种策略可以使我们保守的获得相对较多的金币,但很可能使我们错过那些还没有被摇过的摇臂中掉金币更多的。 第二种思路就是把每一个摇臂都摇一次,这样就可以知道哪个掉金币平均值最多,然而我们的摇臂次数是有限的,这样做的弊端在于使我们用了较多的机会去摇那些掉金币少的摇臂。
上面的第一种思路称为“利用”,第二种思路称为“探索”。由于总的摇臂次数是有限的,所以“利用”和“探索”之间是存在矛盾的,这就是强化学习种所面临的“探索—利用窘境”。所以,想要最后得到最多的累积金币,我们需要在“利用”和“探索”之间寻找一个平衡。
3.ϵ贪心算法ϵ贪心算法
前面提到,想要使累计奖赏值最大,就要在探索和利用之间做出平衡和选择。ϵϵ贪心算法就是在每次进行选择摇臂时,以ϵϵ的概率进行探索,即在所有的摇臂中随机选择一个,以1−ϵ1−ϵ的概率进行利用,即选择所有摇臂中已知奖赏均值最大的那一个(若不唯一,随机选择一个即可)。
用Q(k)Q(k)表示摇臂kk的平均奖赏,若摇臂已被选择nn次,每次得到的奖赏分别为,则第nn次后的平均奖赏为:
为了简化每次的存储数据量,用增量的方式表示均值Q(k)Q(k), 用下标表示该摇臂尝试的次数。则有,
对任意的n⪈1n⪈1, 若第n−1n−1次尝试后的平均奖赏为Qn−1(s)Qn−1(s),则在第nn次尝试并获得奖赏后的平均奖赏为,
经过前面的铺垫,下面给出ϵϵ贪心算法的实现流程:
讨论探索概率ϵϵ的选择,以及其对算法实现的影响:
- 如果摇臂奖赏的不确定性较大,需要较多次数的探索,此时ϵϵ的值需要较大一些;
- 如果摇臂奖赏的不确定性较小,分布比较集中,少量的尝试就可以近似得到分布的特点,此时ϵϵ应较小一些;
- 经验中,通常会令ϵϵ是较小的常数,比如0.1或者0.001,如果尝试次数非常大,一段时间内摇臂的奖赏就可以很好的近似出来,这样随着摇臂次数增多,探索的次数可以减小,即令ϵϵ随着尝试次数的增加而减小,例如令ϵ=1/t√ϵ=1/t;
4.Softmax方法
Softmax方法是基于概率选择下一次的摇臂序号,探索和利用同时选择。若各摇臂的平均奖赏相当,则选取各摇臂的概率也相当;若某些摇臂的平均奖赏明显高于其他摇臂,则它们被选取的概率也明显更高。其中摇臂对应的选择概率是基于Boltzmann分布的:
其中,Q(i)Q(i)表示摇臂ii的当前平均奖赏;称为“温度”,它是算法实现中的关键参数:
- ττ越小,则平均奖赏高的摇臂被选取的概率越高,ττ趋于0时Softmax将趋于”仅利用”;
- ττ越大,则各个摇臂被选取的概率越趋同,ττ趋于无穷大时Softmax将趋于“仅探索”。
下面给出Softmax算法的实现流程:
ϵϵ贪心算法和Softmax算法具体选哪一个,要在具体问题里面去比较。
对于离散状态空间、离散动作空间上的多步强化学习任务,一种直接的办法是将每个状态上动作的选择看作一个K−K−摇臂赌博机问题,用强化学习任务的累计奖赏来代替K−K−摇臂赌博机算法中的奖赏函数,即可将赌博机算法用于每个状态:对每个状态分别记录各个动作的尝试次数、当前平均累计奖赏等信息,基于赌博机算法选择要尝试的动作。当然上面是一种非常简化的方法,没有考虑到强化学习任务中马尔科夫决策过程的结构。
5.基于模型的学习
模型介绍:
考虑多步强化学习任务,其对应的马尔科夫决策过程四元组E=<X,A,P,R>E=<X,A,P,R>已知,
其中:
X:X:环境状态集
A:A:动作集
P:P:状态转移函数
R:R:奖励函数X×A→RX×A→R
未知:策略π(x,a)π(x,a)即状态xx下选择动作的概率
策略评估:
在模型已知时,对任意策略ππ都能估计出该策略带来的期望累计奖赏。
- 状态值函数:Vπ(x)Vπ(x)表示从状态xx出发,使用策略所带来的累计奖赏;
状态—动作值函数:Qπ(x,a)Qπ(x,a)表示从状态xx出发,执行动作后再使用策略ππ带来的累计奖赏。
根据定义有:
VπT(x)=Eπ(1T∑Tt=1rt|x0=x)VTπ(x)=Eπ(1T∑t=1Trt|x0=x), T步累积奖赏 (4) Vπγ(x)=Eπ(1T∑∞t=0γtrt+1|x0=x)Vγπ(x)=Eπ(1T∑t=0∞γtrt+1|x0=x) γγ折扣累积奖赏 (5) QπT(x,a)=Eπ(1T∑Tt=1rt|x0=x,a0=a)QTπ(x,a)=Eπ(1T∑t=1Trt|x0=x,a0=a) (6) Qπγ(x,a)=Eπ(1T∑∞t=0rt+1|x0=x,a0=a)Qγπ(x,a)=Eπ(1T∑t=0∞rt+1|x0=x,a0=a) (7) 根据马氏性,系统下一时刻的状态仅由当前状态决定,而不依赖于以往任何状态,可以将值函数(式(4)写成更为简单的递归形式:
(8)
类似的,对于γγ折扣累积奖赏有:

从式(8)中的结果,可以看到,用递归等式来计算值函数,实际上转换为动态规划算法。从值函数的初始值Vπ0V0π出发,通过一次迭代能计算出每个状态的但不奖赏Vπ1V1π,进而从单步奖赏出发,通过一次迭代计算出两部累积奖赏Vπ2V2π,同理,对于TT步累积奖赏,只需迭代轮就能精确地求出值函数。
下面给出策略评估算法的实现流程:
对于VπγVγπ,当t很大时,γt→0γt→0, 也可以用上面类似的算法。可以设置一个阈值θθ,若在执行一次迭代后值函数的改变小于θθ则算法停止;即算法第4行换成:
有了状态值函数V,就可以直接计算出状态—动作值函数:

策略改进
在对某个策略的累积奖赏进行评估后,如果发现它并非最优策略,则需要对其进行改进,理想的策略应该能最大化累积奖赏,即
最优策略所对应的值函数V∗V∗称为最优值函数,即
对式(8),(9)做改动,将对动作的求和改为取最优:
上面的等式称为最优Bellman等式,其唯一解是最优值函数。
其中,
带入式(10),可得最优状态-动作值函数

值函数对于策略的每一点改进都是单调递增,因此对于当前策略ππ,可将其改进为
直到π′π′与ππ一致、不再发生变化,此时就满足了最优Bellman等式,及找到了最优策略。
策略迭代与值迭代
根据前面的策略评估和策略改进,我们知道了如何评估一个策略的值函数,并在策略评估后如何改进至最优策略。将二者结合起来,即是对策略进行寻优的方法:从一个初始策略(可以是随机策略)开始,先进行策略评估,然后改进策略,评估改进的策略,再进一步改进策略,…… 不断迭代进行策略评估和改进,直达策略收敛,不再改变为止。这种做法即称为“策略迭代”
下面给出基于T步累积奖赏策略评估的策略迭代算法流程:
在上述算法流程中的第11行,需要计算出当前改进的最优策略π′(x)π′(x),这个过程是在值迭代中实现的,可以理解,策略改进和值函数的改进是一致的,因此可将策略改进视为值函数的改善,由最优Bellman方程可得:
下面给出值迭代的算法流程:
强化学习中的模型学习,到这里就介绍完了,从上面的算法可以看出,在模型已知时强化学习任务能归结为基于动态规划的寻优问题。
参考资料:周志华 《机器学习》中再励学习部分,文中的公式和流程均引自该书。