时序差分算法的代表算法
SARSA算法;
Q-learning算法。
时序差分算法与动态规划算法的区别
不同之处
1、使用条件不同
动态规划算法(策略迭代、价值迭代)适用于知道完整MDP建模的环境(因此这类算法也叫model-based方法),智能体能够和环境在线交互,且状态空间、动作空间离散、有限;
时序差分算法(SARSA、Q-learning算法)适用于不知道完整MDP建模的环境(不知道奖励函数、状态转移函数,但知道状态空间、动作空间,这类算法是model-free方法),智能体能够和环境在线交互,且状态空间、动作空间离散、有限。
2、思想不尽相同
时序差分算法有采取动态规划的思想,同时还有采取蒙特卡洛方法的思想。
运用蒙特卡洛方法,即使不知道完整的环境MDP建模,也可以在与环境交互后得到采样样本,用这些样本去近似价值函数。
而运用动态规划思想,可以逐步用后续状态的价值来更新当前状态的价值,最终近似出价值函数(但是单纯只是用动态规划的思想的话,这个价值函数并不是最优的,还要搭配上策略提升定理,才能得到最优价值函数)。
相同之处
用处相同
都是为了求解、近似出智能体的价值函数。
两种时序差分算法的区别
Sarsa算法
(单步)Q函数估计式子
Q
(
s
t
,
a
t
)
←
Q
(
s
t
,
a
t
)
+
α
[
r
t
+
γ
Q
(
s
t
+
1
,
a
t
+
1
)
−
Q
(
s
t
,
a
t
)
]
Q(s_t, a_t) \gets Q(s_t, a_t) + \alpha \left [r_t + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t) \right]
Q(st,at)←Q(st,at)+α[rt+γQ(st+1,at+1)−Q(st,at)]
(多步)Q函数估计式子
Q
(
s
t
,
a
t
)
←
Q
(
s
t
,
a
t
)
+
α
[
r
t
+
γ
r
t
+
1
+
γ
2
r
t
+
2
+
.
.
.
+
γ
n
Q
(
s
t
+
n
,
a
t
+
n
)
−
Q
(
s
t
,
a
t
)
]
Q(s_t, a_t) \gets Q(s_t, a_t) + \alpha \left[ r_t + \gamma r_{t+1} + \gamma ^2 r_{t+2} + ... +\gamma^n Q(s_{t+n}, a_{t+n}) - Q(s_t, a_t) \right]
Q(st,at)←Q(st,at)+α[rt+γrt+1+γ2rt+2+...+γnQ(st+n,at+n)−Q(st,at)]
在Sarsa算法里,策略提升是如何进行的?
在这个过程里,为了进行“策略提升”,近似出“最优价值函数”,使用了贪心策略(每次选择能够令 Q ( s t + 1 , a t + 1 ) Q(s_{t+1}, a_{t+1}) Q(st+1,at+1)最大的那个 a t + 1 a_{t+1} at+1),但是为了避免有些状态动作对 ( s , a ) (s,a) (s,a)从未出现造成估计的价值函数未必最优,因此改造一下原来的贪心策略,使之成为 ϵ \epsilon ϵ-贪婪策略,以 ϵ \epsilon ϵ的概率在整个动作空间中随机选择一个动作,以 1 − ϵ 1-\epsilon 1−ϵ的概率选择价值函数最大的那个动作。
为什么会出现多步Sarsa算法?
想要结合蒙特卡洛和时序差分各自的优势。
蒙特卡洛的优势:无偏。劣势:方差大。
时序差分的优势:方差小。劣势:有偏。
有偏和无偏是根据Q函数的计算式子里面是否有需要估计的值来区分的。蒙特卡洛方法里,价值函数的增量更新方式是这样的:
V
π
(
s
)
←
V
π
(
s
)
+
α
[
G
t
−
V
π
(
s
)
]
V^{\pi}(s) \gets V^{\pi}(s) + \alpha \left[ G_t - V^{\pi}(s) \right]
Vπ(s)←Vπ(s)+α[Gt−Vπ(s)]
V
π
(
s
)
V^{\pi}(s)
Vπ(s)本身就是要迭代更新的,有些偏差可以理解,而
G
t
G_t
Gt不需要估计,因为是与实际环境进行一连串交互后得到的,是真实值。因此“无偏”;而在时序差分方法里,价值函数的增量更新方式中
Q
(
s
t
+
1
,
a
t
+
1
)
Q(s_{t+1}, a_{t+1})
Q(st+1,at+1)也是要迭代更新的,在计算
Q
(
s
t
,
a
t
)
Q(s_t, a_t)
Q(st,at)时用到了
Q
(
s
t
+
1
,
a
t
+
1
)
Q(s_{t+1}, a_{t+1})
Q(st+1,at+1)这个估计值,是有偏差的,所以说“有偏”。
方差大和方差小是根据最终估计出来的Q函数受状态随机转移影响的大小来区分的。蒙特卡洛方法里,要计算出 G t G_t Gt,中间每一步的状态转移都是随机的,最终的 G t G_t Gt会受到每步状态随机转移后得到的 r r r的影响,因此说方差大;而时序差分方法里,中间只关注了一步状态转移得到的 r r r,估计出来的Q函数也只受这一步状态转移的影响,因此说方差相对更小。
行为策略
用于采集数据的策略,是 ϵ \epsilon ϵ-贪婪策略。
目标策略
想要优化的策略,也是 ϵ \epsilon ϵ-贪婪策略。
算法功能
近似出行为策略( ϵ \epsilon ϵ-贪婪算法)的价值函数。(因为用的是 ϵ \epsilon ϵ-贪婪算法,所以可以近似出最优价值函数;如果用的是别的行为策略,比如随机策略(每一个状态下都随便选择一个动作),那么近似出来的就不是最有价值函数了)
model-free方法中的on-policy方法
因为行为策略和目标策略是同一个策略,计算时序差分的价值目标的数据来源于行为策略。
更新时需要的数据是 ( s , a , r , s ′ , a ′ ) (s,a,r,s^{\prime},a^{\prime}) (s,a,r,s′,a′)这5个数据,这种方法称为在线策略on-policy学习方法。
Q-learning算法
Q函数估计式子
Q
(
s
t
,
a
t
)
←
Q
(
s
t
,
a
t
)
+
α
[
r
t
+
γ
max
a
t
+
1
Q
(
s
t
+
1
,
a
t
+
1
)
−
Q
(
s
t
,
a
t
)
]
Q(s_t, a_t) \gets Q(s_t, a_t) + \alpha \left[ r_t + \gamma \max \limits_{a_{t+1}}Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t) \right]
Q(st,at)←Q(st,at)+α[rt+γat+1maxQ(st+1,at+1)−Q(st,at)]
行为策略
用于采集数据的策略,可以是 ϵ \epsilon ϵ-贪婪策略,也可以是随机策略等其它的策略。
目标策略
想要优化的策略,是最优策略(而不是
ϵ
\epsilon
ϵ-贪婪策略)。怎么看出来的呢?因为对于Q函数,它的最优价值函数计算式子(贝尔曼最优方程)是:
Q
∗
(
s
,
a
)
=
r
(
s
,
a
)
+
γ
∑
s
′
∈
S
p
(
s
′
∣
s
,
a
)
max
a
′
Q
∗
(
s
′
,
a
′
)
Q^*(s,a) = r(s,a) + \gamma \sum_{s^{\prime} \in S} p(s^{\prime} | s,a) \max_{a^{\prime}} Q^*(s^{\prime}, a^{\prime})
Q∗(s,a)=r(s,a)+γs′∈S∑p(s′∣s,a)a′maxQ∗(s′,a′)
算法功能
近似出最优策略的动作价值函数。
model-free方法中的off-policy方法
因为行为策略和目标策略不需要是同一个策略,计算时序差分的价值目标的数据不一定来自于当前的行为策略(比如说当前的行为策略是 ϵ \epsilon ϵ-贪婪策略,推荐你采用的下一个行为可能是最优动作 a 1 a_1 a1,也可能是随机动作 a 2 a_2 a2,而计算时序差分的价值目标时,因为增量更新式子里会要求我们采用的行为一定是动作价值最大的那个行为,也就是 a 1 a_1 a1,这就出现了行为策略推荐的动作数据和目标策略推荐的动作数据不同的情况。换一种理解是:如果行为策略更换,在同一个状态下,行为策略推荐我采取的action也会换,但是只要Q-table确定,我不会听从行为策略的建议,直接选择Q-table中最优的那个动作)。
更新时需要的数据是 ( s , a , r , s ′ ) (s,a,r,s^{\prime}) (s,a,r,s′)这4个数据,这种方法称为离线策略off-policy学习方法。
在线策略on-policy和离线策略off-policy的区别
目标策略和行为策略相同或不同;
离线策略对数据的利用率更高(这一点其实我还不理解):对于每个状态动作对
(
s
,
a
)
(s,a)
(s,a),每次出现都会用于计算Q-table中的
Q
(
s
,
a
)
Q(s,a)
Q(s,a),能够重复使用过往训练样本。而对于在线策略,对于每个状态动作对