1. Q-Learning

  1. 使用一个π\pi与环境互动,生成labelled data
  2. 根据labelled data学到Qπ(s,a)Q^\pi(s, a)
  3. 根据Qπ(s,a)Q^\pi(s, a)找到更好的π\pi'
  4. π\pi'代替π\pi,goto step 1

1.1. 怎么评价哪个π\piπ更好?

答: Vπ(s)Vπ(s)V^{\pi'}(s) \ge V^\pi(s) for all state s,则认为π\pi'π\pi好。

1.2. 怎么根据Qπ(s,a)Q^\pi(s, a)Qπ(s,a)找到π′\pi'π′?

答:
π(s)=argmaxaQπ(s,a) \pi'(s) = \arg\max_a Q^\pi(s, a)

continuous a不适用。

1.3. 怎么根据labelled data学到Q?

答: Target Network

注意:
因为左边的QπQ^\pi和右边的QπQ^\pi是同一个模型,当左边的QπQ^\pi因为迭代而更新时,右边的QπQ^\pi也会改变。
左边QπQ^\pi更新 --> 右边QπQ^\pi改变 --> 右边的输出改变 --> 左边的目标改变。
如果一个NN的目标一直在改变,这个NN就会很难train。
解决方法:右边的QπQ^\pi先fix住,训练左边的QπQ^\pi。左边的QπQ^\pi更新一定次数后把它参数同步到右边的QπQ^\pi

1.4. Exploration

π(s)=argmaxaQπ(s,a) \pi'(s) = \arg\max_a Q^\pi(s, a)

这个公式存在的问题是:
如果Qπ(s,a1)=1Q^\pi(s, a_1)=1,而Qπ(s,a2)Q^\pi(s, a_2)Qπ(s,a3)Q^\pi(s, a_3)没有被sample过,其值为默认值0。
那么以后每次遇到s永远会采取a1a_1
解决方案:探索机制

1.4.1. Epsilon Greedy

a={argmaxaQ(sa),1ϵrandom,otherwise a = \begin{cases} \arg\max_a Q(s_a) && , 1-\epsilon \text{的机率}\\ \text{random} && , \text{otherwise} \end{cases}

1.4.2. Boltzmann探索

P(as)=exp(Q(s,a))aexp(Q(s,a)) \begin{aligned} P(a|s) = \frac{\exp(Q(s, a))}{\sum_a \exp(Q(s, a))} \end{aligned}

1.5. Replay Buffer

这是一个用于存互动经验的buffer,每一项的格式为st,at,rt,st+1s_t, a_t, r_t, s_{t+1}
每一轮迭代都可以产生N个data,但buffer可以开很大,里面可以存很多轮data。
因此step 2用于生成Q的labelled data不止是都个π\pi的互动data。

优点:

  1. 充分利用data,减少与环境互动的时间
  2. batch里面的data越diverse越好。这些方法便data更diverse。

1.6. Q-Learning的过程

  1. 初始化两个NN,分别是QQQ^\hat Q,且Q^=Q\hat Q = Q
  2. given sts_t,take ata_t based on Q(epsilon greedy)
  3. 得到rtr_tst+1s_{t+1},把(st,at,rt,st+1)(s_t, a_t, r_t, s_{t+1})存入buffer
  4. 从buffer sample一个batch的data
  5. 计算target:
    y=ri+maxaQ^(si+1,a) y = r_i + \max_a \hat Q(s_{i+1}, a)

  6. 更新Q的参数,使Q(si,ai)Q(s_i, a_i)接近y(回归问题),goto step 4

  7. Q^=Q\hat Q = Q

1.7. Q-Learning存在的问题:Q value的估测值高于实际值。

为什么Q value的估测值会特别高?

Q(st,at)=rt+maxQ(st+1,at) Q(s_t, a_t) = r_t + \max Q(s_{t+1}, a_t)

Q是一个NN,可能会对某个action高估,某些action低估。
而max倾向于选择被高估的action。

解决方法:Double DQN

results matching ""

    No results matching ""