Q-learning算法
在Q-learning中,Q的意思是Q函数,即某个策略
π
\pi
π下的动作价值函数
Q
π
(
s
t
,
a
t
)
Q^\pi(s_t, a_t)
Qπ(st,at), 他表示在状态
s
t
s_t
st下, 执行动作
a
t
a_t
at会带来的累计奖励
G
t
G_t
Gt的期望
Q
π
(
s
t
,
a
t
)
=
E
[
G
t
∣
s
t
,
a
t
]
=
E
[
r
t
+
γ
Q
π
(
s
t
+
1
,
a
t
+
1
)
∣
s
t
,
a
t
]
\begin{split} Q^\pi(s_t, a_t) &= \mathbb{E}[G_t|s_t, a_t] \\ &=\mathbb{E}[r_t + \gamma Q^\pi(s_{t+1}, a_{t+1})|s_t, a_t] \end{split}
Qπ(st,at)=E[Gt∣st,at]=E[rt+γQπ(st+1,at+1)∣st,at]
给定策略下, 当前状态的Q函数值与
- 当前动作的奖励
- 下一状态的Q函数值
有关
因此, Q函数的计算可以通过动态规划算法来实现.
但由于计算t时刻的Q函数是,需要知道未来时刻的奖励,这样就
“不仅需要知道某一状态的所有可能出现的后续状态及对应的将离职,还要进行全宽度的回溯来更新该状态的价值”, 对于大规模问题,这样的做法几乎是不可能使用的, 因此Q-learning使用了浅层的时序差分采样学习.
也就是基于当前策略 π \pi π预测接下来发生的n步动作,并计算其奖励值, 以计算累计奖励.
在Q-learning中, 最优策略
π
∗
\pi^{*}
π∗ 对应的最优Q函数满足
Q
∗
(
s
t
,
a
t
)
=
max
π
Q
π
(
s
t
,
a
t
)
=
E
s
t
+
1
[
r
t
+
γ
max
a
t
+
1
Q
π
(
s
t
+
1
,
a
t
+
1
)
∣
s
t
,
a
t
]
Q^*(s_t,a_t) = \max_{\pi} Q^\pi(s_t, a_t) = \mathbb{E}{s_{t+1}}[r_t+\gamma\ \max_{a_{t+1}}Q^{\pi}(s_{t+1}, a_{t+1})|s_t, a_t]
Q∗(st,at)=πmaxQπ(st,at)=Est+1[rt+γ at+1maxQπ(st+1,at+1)∣st,at]
其中
Q
∗
(
s
t
,
a
t
)
=
Q
π
∗
(
s
t
,
a
t
)
Q^*(s_t,a_t) = Q^{\pi^*}(s_t,a_t)
Q∗(st,at)=Qπ∗(st,at)
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) \leftarrow Q^*(s_t,a_t)+ \alpha(r_t+\gamma\ \max_{a_{t+1}}Q^{*}(s_{t+1}, a_{t+1}- Q^*(s_t,a_t))
Q∗(st,at)←Q∗(st,at)+α(rt+γ at+1maxQ∗(st+1,at+1−Q∗(st,at))
这就是Q-learning用于更新价值(动作价值)的策略.
而对于具体选择动作的策略, Q-learning一般采用 ϵ \epsilon ϵ-贪婪策略.
由于采取动作的策略( ϵ \epsilon ϵ-贪婪策略)和更新价值的策略(渐进式更新)不同, 因此Q-learning是一种off-policy策略.