大话增强学习-4

大话增强学习第四篇。

Flood Sung在知乎发表了系列文章。这里整理,消化,并提供索引方便回顾。RL就是这样,每次你感觉看懂了,代码也写了也正确了,然而过几天回头一看,又貌似能多看懂些东西,少一些误解。DL+RL=AI不是虚言。

读书笔记

DQN是DeppMind将DL和RL进行结合的思想。很值得深入学习。

第一篇

第一篇介绍了DeepMind和DQN的背景。并简单介绍了RL的背景知识,即(S, A, R),而在S时输出哪个A,就是策略。

第二篇

第二篇介绍了MDP模型,即(S, A, P),P就是状态转移概率。如果知道了(S, A, P),就知道了所有信息。MDP就很简单了,都可以当面试题来解决问题。然而,通常我们得不到model,则不得不使用Model-free方法,用值函数来评估各个状态。即v(s)。如果我们去估计Model,则叫Model-based方法。

第三篇

作者很干爽地举例解释了基于策略的方法基于值函数的方法,并指出Actor-Critic算法即使用策略又使用值。

求解值函数可以使用贝尔曼Bellman方程。其实就是个迭代公式。一般可以用动态规划迭代求解。

  • Policy based
  • Value based (DQN)
  • Model based
  • Model free (Q-learning)

第四篇

v(s)表示的是状态的价值。类似地,我们可以推导动作的价值,即Q(s,a)。因为我们在乎A,所以Q用的更多。Q就是Q-learning, DQN中的Q。

求解Bellman方程,我们可以使用策略迭代和值迭代。

  • Policy iteration

policy iteration使用bellman方程来更新value,最后收敛的value是当前policy下的value值(所以叫做对policy进行评估),目的是为了后面的policy improvement得到新的policy。

  • Value iteration value iteration是使用bellman最优方程来更新value,最后收敛得到的value是当前state状态下的最优的value值。因此,只要最后收敛,那么也就得到了最优的policy。

因为状态太多或者我们不知道状态转移概率,在实际情况中我们都没法直接使用策略迭代和值迭代。Q-learning可以解决这个问题。

  • Q-learning

Q Learning的思想完全根据value iteration得到。但要明确一点是value iteration每次都对所有的Q值全部更新替换。但事实上在实际情况下我们没办法遍历所有的状态,还有所有的动作,我们只能得到有限的系列样本。因此,只能使用有限的样本进行操作。我们只沿着梯度方向更新Q的增量,而不是全部替代。由于不能全部遍历,所以需要探索部分策略。探索的过程可随机,也可贪婪(当前最佳),即e-greedy。

第五篇

Q learning的Q(s,a)在无穷多s和a时没办法用枚举的形式来表示。这时候我们需要使用价值函数逼近(近似),即Q(s,a)=f(s,a,w)。神经网络用来做函数逼近非常有效,于是我们能用到DL了。DL的输入就是像素矩阵,经过3个卷积层两个全连阶层,目标输出是一次迭代后的Q(s,a)。看上去非常简单,但是应用效果很好。

第六篇

第五篇介绍了2013年的DQN版本。第六篇介绍了后续的各个改进版本。

  • 第五篇介绍的可以认为是basic deep Q-learning
  • 2013, NIPS DQN, Experience Replay, 将多个样本存下来再采样以去除样本相关性
  • 2015, Nature DQN, Q目标值使用旧的网络来计算,相当于batch training,否则相关性太大
  • Double DQN,用当前的Q网络来选择动作,用目标Q网络来计算目标Q,搞了两个网络来做函数逼近,一个是现状,用来选择动作,一个是未来,用来计算目标Q
  • Prioritised replay,也就是优先经验的意思。优先级采用目标Q值与当前Q值的差值来表示。优先级高,那么采样的概率就高。差值大,说明改进空间大,优先被采样
  • Dueling Network,将Q网络分成两个通道,一个输出V,一个输出A,最后再合起来得到Q

第五篇的评论部分,网友们也给出了很多不错的反馈。

  • 梯度策略更简洁,效果更好,actor-critic即用了value-based,又用了policy-based,两个都用,效果都好
  • 梯度策略可以进行连续输出,而value-based更适合离散输出(DQN依靠计算每一个动作的Q值,然后选择最大的Q值对应的动作。那么这种方法在连续控制上完全不起作用)

第七篇

讲了个连续输出的方法。第七篇使用了不直观的矩阵分解技术,放弃这篇。

话外

上图来自知乎网友,简要介绍了分类情况。

Actor-Critic (玩家-评委)算法

Actor(玩家):为了玩转这个游戏得到尽量高的reward,你需要实现一个函数:输入state,输出action。可以用神经网络来近似这个函数。剩下的任务就是如何训练神经网络,让它的表现更好(得更高的reward)。这个网络就被称为actor。

Critic(评委):为了训练actor,你需要知道actor的表现到底怎么样,根据表现来决定对神经网络参数的调整。这就要用到强化学习中的“Q-value”。但Q-value也是一个未知的函数,所以也可以用神经网络来近似。这个网络被称为critic。

Actor-Critic算法

  1. Actor看到游戏目前的state,做出一个action。
  2. Critic根据state和action两者,对actor刚才的表现打一个分数。
  3. Actor依据critic(评委)的打分,调整自己的策略(actor神经网络参数),争取下次做得更好。
  4. Critic根据系统给出的reward(相当于ground truth)和其他评委的打分(critic target)来调整自己的打分策略(critic神经网络参数)

Actor网络是策略网络,Critic网络是值网络。A3C是采用多线程搞了多个A-C小组并行的进行训练。

参考

Contents