Q-learning算法
Q-learning算法其实就是在Agent与环境的交互过程中建立了一张状态-动作的Q值表,整个训练过程即不断优化这张表的过程。Q-learning算法的优势在于他不顾依赖环境模型。
Q-learning算法描述
在一个有限的马尔科夫过程中有一个智能体Agent;一个状态集S;一个动作集A。Agent在初始状态s下通过动作选择策略选择并执行一个动作a,a
∈
\in
∈A,在Agent与环境交互完成后
s
→
s
′
s\to{s'}
s→s′,同时会得到一个即时奖励r,之后再更新相应的Q值。更新Q值的方法如下:
Q
(
s
,
a
)
=
r
+
γ
max
a
′
Q
(
s
′
,
a
′
)
\begin{align} Q(s,a)=r+\gamma{\max_{a'}Q(s',a')} \end{align}
Q(s,a)=r+γa′maxQ(s′,a′)
Q
(
s
,
a
)
=
(
1
−
α
)
Q
(
s
,
a
)
+
α
[
r
+
γ
max
a
′
Q
(
s
′
,
a
′
)
]
\begin{align} Q(s,a)=(1-\alpha)Q(s,a)+{\alpha}[r+{\gamma}\max_{a'}Q(s',a')] \end{align}
Q(s,a)=(1−α)Q(s,a)+α[r+γa′maxQ(s′,a′)]
这里为什么要
m
a
x
Q
(
s
′
,
a
′
)
maxQ(s',a')
maxQ(s′,a′)呢,是因为我们也要去评价下一步这个状态好不好就要看在下一步这个状态里我能获得的最大收益是多少,所以需要用Q表里下一状态里所有动作里Q值最大的那个来估计。此公式完全可以写成上一节讲到的TD算法,即:
Q
(
s
,
a
)
=
Q
(
s
,
a
)
+
α
[
r
+
γ
max
a
′
Q
(
s
′
,
a
′
)
−
Q
(
s
,
a
)
]
\begin{align} Q(s,a)=Q(s,a)+{\alpha}[r+{\gamma}\max_{a'}Q(s',a')-Q(s,a)] \end{align}
Q(s,a)=Q(s,a)+α[r+γa′maxQ(s′,a′)−Q(s,a)]
其中
α
\alpha
α是学习率,
γ
∈
[
0.1
]
{\gamma}\in[0.1]
γ∈[0.1]是折扣因子.
α
\alpha
α影响未来学到的新值置换原值的比例。当
α
\alpha
α=0时,表示Agent学不到新知识;当
α
\alpha
α=1时,表示不存储学到的知识,全部用新的知识置换。折扣因子
γ
\gamma
γ代表的是Agent的远见,它的大小影响未来的动作的预测回报所占的权重,
γ
\gamma
γ=0表示Agent只看重眼前动作的回报;
γ
\gamma
γ=1时,Agent将会把未来所有动作的回报值跟眼前的回报看的同等重要;即因为有
γ
\gamma
γ的存在使得越往后的动作对当前的动作的影响越小。
Q-learning算法流程
初始化Q表(也就是一个行为所有动作,列为所有状态的表格。),设置好学习率
α
\alpha
α、折扣因子
γ
\gamma
γ;
重复执行每一个情节;
给定初始状态s;
重复执行每一个情节中的每一步;
根据动作选择策略
ϵ
\epsilon
ϵ-greedy选择一个动作
a
t
a_t
at执行并获得奖赏
r
t
r_t
rt,使得Agent状态由
s
t
→
s
t
+
1
s_t{\to}s_{t+1}
st→st+1;
根据Q值更新公式(2)更新Q(
s
t
,
a
t
s_t,{a_t}
st,at);
判断
s
t
s_t
st是否处于终止状态,若是,结束当前情节;否则
s
t
←
s
t
+
1
s_t{\leftarrow}s_{t+1}
st←st+1(这里的意思是赋值,不是状态跳转)
判断是否达到提前设置好的最大训练次数,若是,结束当前情节;否则继续训练;