浅谈强化学习(一)

最近开始自学机器学习,觉得记下学习过程会更有助于理解。此篇为人生第一篇博文,水平有待提高。
回归主题,本文是在阅读了清华大学出版社周志华教授的机器学习书而总结的。

强化学习
—什么叫强化学习?该书举了个例子,如在种西瓜时,从定期浇水、施肥、除草、杀虫,经过一段时间才能收获劳动成果,假定收获的好瓜为奖赏,而在种瓜过程中,我们不能立即得到因某种行为(如浇水)而得到的最终结果,但是能通过一定的反馈得到这个行为产生的影响,如苗黄了,这样,经过多次种瓜和不断摸索,总结出来的策略称为强化学习。按我的理解,强化学习是在多次试验后,选择使结果最优的行动方案。

在强化学习任务中对应了四元组 E=X,A,P,R ,
其中E (environment的首字母)表示机器处于的环境,X为状态空间,其中每个状态x X是机器感知到的环境的描述,A表示机器能采取的动作构成的空间,P表示以一定的概率从当前状态转移到另一个状态,R (reward首字母)表示奖赏函数,表示机器执行到该状态得到的奖罚。
机器要做的是在环境中不断尝试而学得一个策略 π ,根据这个策略,在状态x下就能得知要执行的动作a= π(x) .策略有两种表示方法,第一种为确定性策略,即可表示为 π ,另一种则是用概率表示 π ,即随机性策略 π(x,a) ,表示在状态x下选择动作a概率,其中必须满足 aπ(x,a)=1 ,因为动作的集合是一个必然事件,所以概率一定为1。

在考虑多步动作才能观察到,我们首先学习最简单的情况,也就是最大化单步奖赏,而单步强化学习任务对应着一个理论模型,也就是”K—摇臂赌博机”,通俗点,就是一个赌徒,在不知道赌博机的每个摇臂吐出硬币的数量的情况下,通过一定策略,使得自己获利最大。假如这个赌鬼很有个性,把自己的每一个硬币都拿去测验了各个摇臂的出硬币数量,则这叫做”仅探索”,假如这个赌徒一直都把硬币投到目前为止出硬币最多的摇臂,则称为”仅利用“,这两种方法对于拥有发家致富的白日梦的赌鬼来说都不是一个好的做法,显然,仅探索就是满足好奇心,但是并没有用,因为已经错失了很多选择最佳摇臂的机会,仅利用,则过于短视,可能会达不到最优值,因此都难以将累积奖赏最大化。(当然有些搞事情的人会这么想,这个赌鬼把每个摇臂探索一遍,就可以知道了哪个摇臂出的硬币数量最多,接着把手中剩余的硬币投下,这部机器会一直出硬币,然后用得到的硬币一直投进去。。。从此走上发家致富的道路,迎娶白富美,,我们这不考虑这种情况,再说了哪有那么好的事情。)
为此我们需要一个算法来对探索和利用折中, ϵ -贪心算法,每此尝试时,以 ϵ 的概率进行探索,即以均匀概率选取一个摇臂,以1- ϵ 的概率进行利用,即选择当前平均奖赏最高的摇臂,(若有多个,则随机选取一个)。
令Q (k) 记录k的平均奖赏,若摇臂k被尝试了n次,得到的奖赏为 v1,v2....vn ,则平均奖赏为Q (k)=1nni=1vi ,细想一下,要是每此得到一个新的奖赏值都需要重新计算n个值的平均值,这显然是不够高效的,因此我们可以采取对均值进行增量式计算,用下标表示尝试的次数,则 Qn=1n((n1)Qn1+vn))) ,这样无论尝试多少次,都只需记录两个值,已尝试n-1次数和最近平均奖赏 Qn1(k) .
ϵ 贪心算法如下

输入:
摇臂数K;
奖罚函数R;
尝试次数T;
探索概率 ϵ
过程:
r=0;
i=1,2,3….K:Q(i)=0,count(i)=0;
for t=1:1:T

if(rand()< ϵ )

k=从1到K中以均匀分布随机选取;
else
k= argmaxiQ(i) ;
end if

v=R(k);
r=r+v;
Q(k)=Q(k)count(k)+vcount(k)+1
count(k)=count(k)+1;

end for
输出累积奖赏r

若摇臂的不确定性较大,概率分布较宽时,则需要更多的探索,此时需要较大的 ϵ 值,反之,则取小的 ϵ 值,如0.1 0或0.01,但是当尝试的个数很大,因为奖赏能很好地近似,所以 ϵ 可为关于与次数成反作用的函数表达式。

另一种算法softmax,按我的理解,与贪心算法在思路上一致,只是在选取时,不采用均匀分布,而是基于Boltzmann分布 P(k)=eQ(k)ıKi=1eQ(i)ı ,该式子中 ı >0,称为温度, ı 越小,则平均奖罚高的摇臂被选取的概率越高, ı 趋于0则趋于将利用,趋于无穷大时,softmax则趋于仅搜索

输入:
摇臂数K;
奖罚函数R;
尝试次数T;
探索概率 ı
过程:
r=0;
i=1,2,3….K:Q(i)=0,count(i)=0;
for t=1:1:T
k=从1到K中根据上面给出的Boltzmann 分布随机抽取
v=R(k);
r=r+v;
Q(k)=Q(k)count(k)+vcount(k)+1
count(k)=count(k)+1;

end for
输出累积奖赏r

两种算法谁比较好,需要具体看应用。
单步强化学习很直观很简单,算法也很简单,这应该只是入门强化学习的基础知识,起码不会一下子就很难使我们打了退堂鼓,下一篇就是开始学习有模型学习了,和大家一起努力

你可能感兴趣的:(机器学习)