强化学习(一):简单的DQN理解

时间:2024-05-19 21:50:16

强化学习(reinforcement learning)是一种介于监督学习和非监督学习之间的特殊任务。它并非像监督学习一样对于每一个数据都有着明确的标记信息,也不像无监督学习那样全无标记信息。强化学习有着相对稀疏的反馈标注,即奖励(Reward)。进行学习过程的代理Agent就从这些奖励中,明白自己行为的对错程度,学习如何与环境Environment互动。

在目前深度学习领域长足进步的当下,将深度学习和强化学习结合也成为我们希望提升强化学习能力的一种模式。而在强化学习模型下使用深度学习还尚有几个问题需要解决: 

1. 强化学习的主要挑战:

功劳分配问题(credit assignment problem):当你执行一个行为并获得奖励时,它通常与你在获得奖励之前所做的动作无关。当你正确的做完最后的决策之后,所有的困难的工作已经完成。这被称为credit assignment problem ,即上述动作中的哪一个与获得奖励相关联以及关联的紧密性达到了什么程度。

探索和开发困境(exploration-exploitation dilemma):一旦你找出了一个策略可以稳定的获得一定量奖励,你应该坚持下去还是尝试一些可能导致更大的奖励的策略方法?

2. 如何用数学形式表示深度学习问题?

MDP(马尔科夫决策过程,Markov Decision Process):马尔科夫决策过程依赖于马尔科夫假设,即下一个State si+1只依赖于当前State si,与之前的State和Action无关。

强化学习(一):简单的DQN理解

3. 如何形成长期策略?

折扣的未来奖励(discounted future reward):当我们在计算奖励的时候,如果我们仅关注当下时刻的奖励,贪心的选取当下时刻最大的奖励就容易陷入局部最优。因此,我们所考虑的奖励应该是未来的奖励,例如当我们在玩策略类的游戏时,如果只考虑当下的奖励情况我们将会选择当下奖励最高的方案,但很有可能某些当下奖励一般甚至较差的方案后期更容易获取非常丰厚的奖励。

我们在计算一场游戏玩的情况如何的时候,往往考虑的是玩家在游戏最后获得的总奖赏,因此考虑到未来的奖励也可以表示为之前

获得的所有奖励的和。因此,在步骤t之后所有的reward可以表示为:

Rt=rt+rt+1+rt+2++rnRt=rt+rt+1+rt+2+…+rn

但是因为我们往往需要考虑长期的影响,通常都会使用折扣的未来奖励:

Rt=rt+γrt+1+γ2rt+2+γntrnRt=rt+γrt+1+γ2rt+2…+γn−trn

这里γγ是折扣系数,取值在0和1之间。因此,tt之后的折扣的未来奖励,可以用t+1表示:

Rt=rt+γ(rt+1+γ(rt+2+))=rt+γRt+1Rt=rt+γ(rt+1+γ(rt+2+…))=rt+γRt+1

如果设置γ=0γ=0,那么我们的策略是只考虑当下的Reward。如果想平衡当前和将来Reward,一般设置γ=0.9γ=0.9。如果我们的环境是确定的,同样的Action序列总是得到相同的Reward,那么可以设置γ=1γ=1


4. 如何估计和逼近未来奖励?

Q-learning算法:在Q-learning中我们定义一个理论函数Q,表示当我们在状态s执行a动作后直到所有行为结束时反馈的最大值,Q值函数的理论表示如下:

                                                                             Q(st,at)=maxRt+1

当我们在选择动作的时候,非常好理解的是,我们的选择策略π应该是选择Q值最大的动作,策略函数π(s)的表示如下:

π(s)=argmaxaQ(s,a)π(s)=argmaxaQ(s,a)
这样我们就能参考之前折扣的未来奖励的公式对Q值函数进行迭代求值,转化得到的这个方程就是贝尔曼方程
                                                                        Q(s,a)=r+γmaxaQ(s,a)

因此Q-learning的本质就是使用贝尔曼方程迭代逼近表示未来反馈的最大值。

5. 如何表示巨大的状态空间?

深度神经网络在强化学习中的作用:当我们的任务过于复杂的时候,状态空间会呈指数形式增多,此时再使用表的形式来存储状态就显得不切实际。再者,在这么多种状态中有效状态往往是稀疏分布的,有很大一部分状态根本不会出现。因此我们可以使用神经网络来非常好地为高度结构化的数据提供良好的功能。我们能够使用神经网络来代替Q函数,将当前状态和采取动作作为输入,相应的Q值作为输出。

6. 如何稳定学习?

经历重放技术(experience replay technique):实际上,在使用深度神经网络代替Q表来用非线性函数近似的表达Q值的时候,这个网络是不稳定的。因此,我们不得不寻找一些技巧来帮助它收敛。此时我们就使用了经验回放。在训练过程中,所有的经验< s,a,r,s’ >都被存储在重放记忆体中。训练网络时,每当一个回合结束,就使用来自这些记忆的随机小批量数据来再次进行训练。这打破了后续训练样本的相似性,避免了将网络推向局部最小化的可能性。经验回放也会使得训练任务更像普通的监督学习,简化了算法的调试和测试。

7.简单的DQN算法思路整理

下面梳理一个非常简单的DQN算法的思路。作为在整个任务中最为重要的组成部分,和环境交互的代理(Agent)的设计十分的重要。Agent作为学习的主体将会根据奖赏选择动作再获得环境的反馈,并在这整个过程中学习选择动作的策略来不断的提高自己获得奖赏的能力。图一即为我总结的一个简单的DQN模型的训练过程,图二为作为一个Agent所必备的模块。

强化学习(一):简单的DQN理解

图一 模型训练流程图

强化学习(一):简单的DQN理解

图二 Agent模块布局图