一、Critic
V function
怎么衡量评估?有两种方法:
第一种方法:MC based approach
让actor去跟环境互动给critic看,之后critic就统计如果看到Sa,那接下来the accumulated reward会有多大;如果看到Sb,那接下来the accumulated reward会有多大。但实际上不可能把所有的state扫描一遍,所以实际上这是一个network,即使没有input一些state,它也能进行估测。
花费的时间太长!每一次都得计算the accumulated reward,等于得把一个环境跑完,把游戏玩到底。
第二种方法:TD approach
两种方法的差别在于:MC的问题在于variance很大,因为Ga其实是很多个step的reward之和;TD的variance比较小,但V不见得估测得准。
下面这个例子就表现出两种方法的不同求解思路, 两种不同的思路所得到的结果也不同。sa可能会影响sb,比如如果出现sa,则sb得到的奖励就是0。MC算法考虑了这种假设。但这件事可能是巧合,TD算法考虑了这种假设。
二、Another Critic
Q function
上图右边小图所示的表示方法只能应用于离散动作。
(证明过程可以不用太理解)
几个Q-Learning种出现的tips:
1.Target Network
learn Q function的时候也会用到TD的概念。但实际在learn的时候并不好learn,training的时候是一直在变化的,所以通常固定住一个Q,并不update它的参数,被固定住的就叫做Target Network。在update几次后,也会把刚才固定的Q替换掉。
一开始两个network是一样的,之后固定一个,update一个。
2.Exploration
探索是很重要的,如果不加入探索机制,智能体可能会一直重复它觉得最好的动作而不去尝试其他的可能性。 两种方法可以去探索。
3.Replay Buffer
这样做之后其实就是一个off-policy的做法。好处有二:减少和环境做互动的次数和时间,experience放在buffer里可以利用很多次;一般来说batch里的data越diverse越好,而buffer里的data就很diverse。
Q-Learning算法流程(其中有一行写错了,是buffer不是butter):
Double DQN
DQN所估测出的Q值经常会被over-estimated(红色),但Double DQN所估测出的Q值则与实际值相差不大。同时Double DQN所learn出来的policy会比DQN所learn出来的强。
为什么Q值会被高估?
target的值会被设得太高,maxQ的值会被估计得太高(绿色的部分表示被高估的量)
为了解决高估的问题,则提出Double DQN。在Double DQN里有两个Q Network,第一个决定哪一个action对应的Q值最大,第二个则去计算Q值。(第一个Q Network负责“提案”,选择action;第二个Q Network负责“执行”,计算Q值)第二个Q Network其实就可以是Target Network。
Dueling DQN
相比于DQN,是更改了Network的架构。本来的DQN是直接output Q值;现在的Dueling DQN不直接output Q值,而是output V(s)和A(s,a)。
这么改的好处在于:比较有效率地去使用data。比如说想将-3变成4,-1变成0,实际上变动的不是Q的值,而是V和A的值。
在train的时候,Network会变动V的值, 将0变成1。这样你会发现,Q值表里不仅是刚才想要变化的两个值发生了变化,还有一个值从-2变成了-1。所以有可能在某个state,你只sample到两个action,并没有sample到第三个action,但你也会变动到第三个action,这就意味着你不需要sample到所有的action就能发生变动。
为了避免machine让V全部等于0,A等于Q,没有使用到Dueling DQN,所以会对A有限制条件,让A的update比较麻烦,这样Network就会倾向于用V来变动。比如要求A的column的和全为0,所以此时V就等于上面Q相对应列的平均值,这种情况下变动就会由V来实现。
在实际操作中,有normalization这一步骤,就是把A的column的和全变为0。(这里的normalization挺有意思的,7、3、2的平均值是4,所以每个数字都减去4,平均值变成0,实现列和为0)
Prioritized Replay
原来在sample data去train Network的时候,你是从replay buffer里面去选择data,但可能buffer里有的data不太好,在training的时候要考虑那些data多训练几次。(TD error就是实际值和预测值之间的差距) 不只改变sample data的distribution,还要改变procedure。
Multi-step
在MC和TD之间取得平衡。
不止存一个step的data,存很多个step(N个)的data。
Noisy Net
这个技术用于improve exploration。之前的epsilon greedy是在action space加noisy,现在的这个是在参数的space上加noisy。需要注意的是要在每个episode开始的时候去sample,之后用固定住的noisy network,等于是在同一个episode里参数是固定的。
和其他方法有本质上的差异。其他方法看到同样的state可能会采取不同的actions,但这种方法看到同样的state会采取相同的actions。
Distributional Q-function
不好实做!
因为环境具有随机性,在某一个state采取某一个action的时候,是把所有reward做一个统计,得到的是一个distribution,Q valve取的是这个distribution的mean。不同的distribution可能会有相同的mean。所以普通的方法可能会造成一些信息的丢失。
Distributional Q-function直接output distribution。每种颜色的长条图和为1,每一条长条代表在某一个state中采取某一个action的时候,落在某个长条的机率。这样在选取的时候,不仅可以考虑mean,还能考虑到distribution。
三、Q-Learning for Continuous Actions
很多时候action是连续的,为了解决这个问题,一般有三种方法:一是sample action,但不是很精确;二是用gradient ascent去max,但比较花时间。
三是特别design一个Network的架构,input状态s,Q function 会output三个东西(这里还没有用到动作a)。之后再把a拉进来进行计算。怎么能取到最大的Q呢?第一项是负的(这里的matrix是正定矩阵),所以数值大小越小,最终的Q值就越大。直接把a带到,让第一项变成0,就可以得到最大的Q值。