关于Pong DQN Reinforcement Learning

最近看了Pong Game相关的一些东西,对强化学习及深度强化学习有了一些了解。整理如下。
强化学习Reinforcement Learning
机器学习包括有监督的学习,无监督的学习和强化学习。

RL与有监督学习、无监督学习的比较:
  (1)有监督的学习是从一个已经标记的训练集中进行学习,训练集中每一个样本的特征可以视为是对该situation的描述,而其 label 可以视为是应该执行的正确的action,但是有监督的学习不能学习交互的情景,因为在交互的问题中获得期望行为的样例是非常不实际的,agent只能从自己的经历(experience)中进行学习,而experience中采取的行为并一定是最优的。这时利用RL就非常合适,因为RL不是利用正确的行为来指导,而是利用已有的训练信息来对行为进行评价。
  (2)因为RL利用的并不是采取正确行动的experience,从这一点来看和无监督的学习确实有点像,但是还是不一样的,无监督的学习的目的可以说是从一堆未标记样本中发现隐藏的结构,而RL的目的是最大化 reward signal。
  (3)总的来说,RL与其他机器学习算法不同的地方在于:其中没有监督者,只有一个reward信号;反馈是延迟的,不是立即生成的;时间在RL中具有重要的意义;agent的行为会影响之后一系列的data。

DQN(Deep Q-Learning)

DQN(Deep Q-Learning)可谓是深度强化学习(Deep Reinforcement Learning,DRL)的开山之作,是将深度学习与强化学习结合起来从而实现从感知(Perception)到动作( Action )的端对端(End-to-end)学习的一种全新的算法。

DRL是将深度学习(DL)与强化学习(RL)结合,直接从高维原始数据学习控制策略。而DQN(Deep Q-Learning)是DRL的其中一种算法,它要做的就是将卷积神经网络(CNN)和Q-Learning结合起来,CNN的输入是原始图像数据(作为状态State),输出则是每个动作Action对应的价值评估Value Function(Q值)。
Nature 2015版
关于Pong DQN Reinforcement Learning_第1张图片

DQN的算法流程图:
关于Pong DQN Reinforcement Learning_第2张图片
我看的是(https://github.com/JulesVerny/PongReinforcementLearning)JulesVerny关于pong game给的程序。
关于Pong DQN Reinforcement Learning_第3张图片
(agent是黄色的paddle ,AI对手是白色的paddle.)
程序中主要的部分是在BestAction行为的选择,agent paddle的更新,AI paddle的更新,ball位置的更新,targetQ
(1)BestAction的选择
关于Pong DQN Reinforcement Learning_第4张图片
action有三种状态:0表示keep,1表示up,2表示down.
理解: 在action选择时,当random 当时关于这个epsilon有些问题,我觉得因为没有标签所以在训练的时候需要先随机选择bestaction并且将其Q[S,A]存储在经验池中。当执行次数大于OBSERVERPERIOD观测值时就会大概率的通过预测reward最大的那个行为。epsilon的值也会更新,会逐渐减小,所以当steps>观测值时只会小概率的随机选择bestaction.
(2)agent paddle、AI paddle的更新
关于Pong DQN Reinforcement Learning_第5张图片

agent paddle(paddle1)的更新比较好理解。只是通过传进来的action值去选择up or down。
AI paddle(paddle2)的更新方法是通过判断相对位置这种传统的方式来进行调整。让我困惑的是AI paddle的行为过于机械化,俗话说遇强则强。
(3)ball 位置更新
关于Pong DQN Reinforcement Learning_第6张图片
在ball位置更新这块主要就是hit的规则,就是说怎样才算hit。在这一块主要还有个direction的问题。direction =1表示正向,为-1表示反向。(hit的规则比较简单具体不在赘述!)
(4)targetQ值—类似于label

Q-Learning的更新公式:
Q∗(s,a)=Q(s,a)+α(r+γmaxa′Q(s′,a′)−Q(s,a))
而DQN的Loss Function为 L(θ)=E[(TargetQ−Q(s,a;θ))2]
其中 θ是网络参数,目标为
TargetQ=r+γmaxa′Q(s′,a′;θ)
显然Loss Function是基于Q-Learning更新公式的第二项确定的,两个公式意义相同,都是使当前的Q值逼近Target Q值。

targetQ[a] = reward + GAMMA * numpy.amax(predictedNextQ[i])

(5)经验池及目标网络

1)经验池(experience replay)
经验池的功能主要是解决相关性及非静态分布问题。具体做法是把每个时间步agent与环境交互得到的转移样本 (st,at,rt,st+1)(st,at,rt,st+1) 储存到回放记忆单元,要训练时就随机拿出一些(minibatch)来训练。(其实就是将游戏的过程打成碎片存储,训练时随机抽取就避免了相关性问题)
2)目标网络
在Nature 2015版本的DQN中提出了这个改进,使用另一个网络(这里称为TargetNet)产生Target Q值。具体地,Q(s,a;θi)Q(s,a;θi) 表示当前网络MainNet的输出,用来评估当前状态动作对的值函数;Q(s,a;θ−i)Q(s,a;θi−) 表示TargetNet的输出,代入上面求 TargetQTargetQ 值的公式中得到目标Q值。根据上面的Loss Function更新MainNet的参数,每经过N轮迭代,将MainNet的参数复制给TargetNet。
引入TargetNet后,再一段时间里目标Q值使保持不变的,一定程度降低了当前Q值和目标Q值的相关性,提高了算法稳定性。

在路上。。。。。。。

你可能感兴趣的:(DRL,pong,RL,DL,DQN,DRL)