Q-learning是一种很常用很传统的强化学习方法,DQN是Q-learning和神经网络的结合,是近年来很火的强化学习方法。
Q-learning
Q-learning会输出一张Q值表,如果有m个状态,n个动作,这个Q值表的size就是m*n;使用时,查表就行,先确定当前状态s,在看这个状态s对应的那一行,在输出这一行Q 值最大的动作,就完成了一次决策过程。
所以,使用Q-learning,首先要设计状态空间s(会有哪些状态),动作空间a(会有哪些动作),以及reward。最最简单的例子,一维迷宫,假如一共有五个格子,最后一个格子是出口(T,target),机器(A,agent)最开始处于第一个格子,机器可以选择的动作是向左走一格或者向右走一格,初始状态如下:
A _ _ _ T A ~\_~ \_~ \_~ T A _ _ _ T
不难想到,我们的状态空间可以设置成5个状态(对应A处于五个格子的状态),动作空间可以设置成两个动作(对应A向左向右的动作),reward可以设置如下,其中 s ′ s' s′表示在当前状态s采取动作a后,会跳转到的下一个状态。
r e w a r d ( s , a ) = { 1 s ′ = T 0 e l s e reward(s,a)=\begin{cases} 1 & s'= T \\ 0 & else \end{cases} reward(s,a)={ 10s′=Telse
如果机器在初始状态选择向右走这一动作,下一个状态就变成下面,这个转换带来的reward就是0。
_ A _ _ T \_ ~A~ \_~ \_~ T _ A _ _ T
Q值的更新利用贝尔曼方程
Q t a r g e t = R + γ max a ′ Q ( s ′ , a ′ ) (1) Q_{target} = R + \gamma \max_{a'} Q(s', a') \tag{1} Qtarget=R+γa′maxQ(s′,a′)(1)
Q (