其实本来不想写这篇的,相信愿意往下看的童鞋,对强化学习本身应该有一定了解。但其实你看的多了就会发现,现有很多文章在细节方面还是有不少差异的。因此,这篇文章也是为了统一本博客的话语体系,为后面内容打基础。
首先请看下面这张图:
上图就是强化学习的最一般思路。其中Agent代表你实现的各种“牛叉”算法,Environment则代表Agent输出或作用的对象。其实这一思路,特别类似于我们人类或者自然界的动物等,通过与环境的交互,逐渐适应环境并学习到知识。当然,现有强化学习的算法从效率上来说,别说和人类相比,与动物相比低的也不是一星半点。这是因为现有的学习算法,大部分都是需要依靠海量的数据来投喂的。(当然,我的知识有限,如果已有更高效的学习方法,我会回来改正这段话的。)
下面,我们根据上图,正式引入强化学习的一些基本要素:
即Environment所描述对象的情况。由于强化学习本身的设计,其状态可认为是离散的,或者简单来说,就是一步一步的。我们在这里给 s s s添加一个下标 t t t,表示为 s t s_t st,表示环境每一步的状态。当然,在强化学习中, s t s_t st具体的取值,取决于你的采样方式,更取决于你设计的算法本身的需求。
即Agent的输出,这个也是一步一步的,因此可表示为 a t a_t at。当然,这个取值也完全取决于你的需求与设计。在强化学习中, s s s与 a a a是成对出现的,即 s t → a t → s t + 1 → ⋯ s_t\rightarrow a_t\rightarrow s_{t+1}\rightarrow\cdots st→at→st+1→⋯。请大家务必记住这个序列,它是强化学习概念的基础,贯穿强化学习始终。
即Agent的动作带来的实时收益,这个收益本身也取决于环境的设计。一般情况下,这个收益每一步都有。但是,有时很难对每一步设计具体收益,所以有可能会在最后设计一个总收益,而其他步上都是0。收益的设计会极大的影响你的算法,后面我们会通过各种示例慢慢讨论。
以上三个是强化学习中最基本的要素。在具体的强化学习中,每一步都会产生一个组合: ( s t , a t , s t + 1 , r t + 1 ) \left(s_t,a_t,s_{t+1},r_{t+1}\right) (st,at,st+1,rt+1),即在状态 s t s_t st下,采用动作 a t a_t at,状态变为 s t + 1 s_{t+1} st+1,产生收益 r t + 1 r_{t+1} rt+1。这里描述的是强化学习的一步,请一定牢记这个组合。
后续的要素,都是为了更准确的描述强化学习过程,并为算法服务的。
表示Agent根据环境状态 s s s,选择动作 a a a的条件概率,可表示为: π ( a ∣ s ) = P ( a t = a ∣ s t = s ) \pi\left(a\left|s\right.\right)=P\left(a_t=a\left|s_t=s\right.\right) π(a∣s)=P(at=a∣st=s)。强化学习的目标,其实也可以理解为求 π \pi π的过程。
这个看公式也很容易理解,即当状态为 s s s时,如果执行了 a a a动作,则状态变为 s ′ s' s′的概率。环境的状态变化一般情况下都是一个随机事件,因此,我们这里用概率对这一随机事件进行描述。
我们前面对强化学习每一步的收益,设定了环境奖励 r t + 1 r_{t+1} rt+1,但仅用这个描述是远远不够的。我们知道,大部分情况下,我们这一步对后续都是有影响的,那么怎么衡量这一影响呢,简单的想法就是把后续的收益也累加起来,这里就可以用 G G G来描述,则 G t = r t + 1 + γ r t + 2 + ⋯ = ∑ k = 0 ∞ γ k r t + k + 1 G_t=r_{t+1}+\gamma r_{t+2}+\cdots=\sum_{k=0}^\infty\gamma^kr_{t+k+1} Gt=rt+1+γrt+2+⋯=∑k=0∞γkrt+k+1。
我们可以认为,这个就是对前面的状态 s s s进行评估的。大家试想一下,无论是下棋,或者是游戏,如果进入某个场景中,有可能面临的就是必败的结果,那么我们搞强化学习,是不是要对状态进行评估,并依据评估值来让我们的Agent避免进入这一状态。所谓“君子不立危墙之下”,这里的危墙就是对状态的评估。在某一状态往后,Agent可采取的策略是一个随机变量组合,每种策略都会最终产生一个累积回报 G t G_t Gt,那么我们就将这些累积回报的均值表示为我们的状态价值,即 v π ( s ) = E π [ G t ∣ s t = s ] = E π [ ∑ k = 0 ∞ γ k r t + k + 1 ∣ s t = s ] v_\pi\left(s\right)=E_\pi\left[G_t\left|s_t=s\right.\right]=E_\pi\left[\sum_{k=0}^\infty\gamma^kr_{t+k+1}\left|s_t=s\right.\right] vπ(s)=Eπ[Gt∣st=s]=Eπ[∑k=0∞γkrt+k+1∣st=s]。
我们上面对状态本身价值进行了评估,但这个还是不够,我们其实更希望得到的是我们在这个状态下干什么,会产生什么样的结果,以及对后续的影响,这才是支持我们进行策略选择的基础。因此,这里引入状态-行为值函数对上述状态和行为对进行评估,具体可表示为: q π ( s , a ) = E π [ G t ∣ s t = s , a t = a ] = E π [ ∑ k = 0 ∞ γ k r t + k + 1 ∣ s t = s , a t = a ] q_\pi\left(s,a\right)=E_\pi\left[G_t\left|s_t=s,a_t=a\right.\right]=E_\pi\left[\sum_{k=0}^\infty\gamma^kr_{t+k+1}\left|s_t=s,a_t=a\right.\right] qπ(s,a)=Eπ[Gt∣st=s,at=a]=Eπ[∑k=0∞γkrt+k+1∣st=s,at=a]。同理,与前面价值函数不同,这个可以认为是对“君子不立危墙之下”这句话整个的评估。可能有童鞋要问,上面的式子为什么还是使用的均值,我理解虽然这一步 a t = a a_t=a at=a确定了,但后续的 a a a还是随机的,因此这里还是要使用均值来进行描述。
以上8个就是强化学习最基本的要素,有了这些,我们下面就可以尝试对强化学习的过程进行描述了。