基于价值的强化学习,说白了,就是智能体采取了一个动作,这个动作的好坏用一个评价标准来评价它—Q动作值函数。
在后续的动作中,可以通过Q的计算了解到采取什么动作最好,从而达到指导智能体行动的目的。
强化学习中使用 折扣回报来定义采取动作后得到的回报。
1. 折扣回报
定义: U t = R t + γ R t + 1 + γ 2 R t + 2 + γ 3 R t + 3 + … U_t = R_t + \gamma R_{t+1} + \gamma ^2 R_{t+2} + \gamma ^3 R_{t+3} + … Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+…
该回报表示在t时刻得到的即时奖励和 t+1, t+2 …后得到的折扣奖励。
该折扣回报就是用来评价采取一个行动是好坏的标准,回报越高,说明采取的行动越好。
特性:
U
t
U_t
Ut回报是不确定的,因为它取决于状态
和动作
- P [ A = a ∣ S = s ] = π ( a ∣ s ) P [ A = a | S = s ] = \pi (a | s) P[A=a∣S=s]=π(a∣s)策略函数
- P [ S ′ = s ′ ∣ S = s , A = a ] = p ( s ′ ∣ s , a ) P[S' = s' | S = s, A = a] = p(s' | s, a) P[S′=s′∣S=s,A=a]=p(s′∣s,a) 状态转移概率
上述的策略和状态转移都是概率性的,所以折扣回报也是概率性的
2. action-value function 动作-值函数 Q ( s , a ) Q(s, a) Q(s,a)
可以反映在状态s下做动作a的好坏,其实也就是 U t U_t Ut的期望:
- 动作值函数
Q π ( s t , a t ) = E ( U t ∣ S t = s t , A t = a t ) Q_\pi(s_t, a_t) = E(U_t | S_t = s_t, A_t = a_t) Qπ(st,at)=E(Ut∣St=st,At=at)
在状态s下,采取动作a的期望回报
- 最优动作值函数
Q
∗
Q^*
Q∗
Q ∗ ( s t , a t ) = max π Q π ( s t , a t ) Q^*(s_t, a_t) = \max_\pi Q_\pi (s_t, a_t) Q∗(st,at)=maxπQπ(st,at)
状态s下,最优动作a时的期望回报
3. DQN (Deep Q-Network)
其实就是用一个
神经网络
近似Q函数
-
求解 Q ∗ Q^* Q∗的用处:
试想当你知道走那条路得到的回报高时,你还不知道怎么走吗?
Q ∗ Q^* Q∗就是用于告诉智能体当前状态应当采取什么行动。
a ∗ = a r g m a x a Q ∗ ( s , a ) a^* = argmax_aQ^*(s,a) a∗=argmaxaQ∗(s,a) -
如何找到 Q ∗ Q^* Q∗
DQN: 使用神经网络 Q ( s , a ; w ) Q(s, a; \pmb{w}) Q(s,a;w)近似 Q ∗ ( s , a ) Q^*(s, a) Q∗(s,a)
w \pmb{w} w 代表神经网络参数
DQN的工作思路:
输入: 一帧图像
输出: 动作空间及概率
将图片经过卷积层提取特征向量, 再经过一层全连接映射到输出向量——就是对动作打分。在上图中就是对左右上三个动作打分。
将DQN应用到游戏中:
- 根据当前状态根据DQN选择最优动作;
- 动作产生后进入下一个状态,并返回回报;
- 重复1,2操作
如何训练DQN: 最常用就是TD(Temporal Difference)算法
TD 时间差分算法
用来训练DQN神经网络
正常训练神经网路的方法:
- 首先给网络输出一个预设值: q = Q ( w ) q = Q(\pmb{w}) q=Q(w)
q代表预设值
- 完成一次试验得到一次观测值: 例如: y = 900 y = 900 y=900
- 损失函数:
L
=
1
2
(
q
−
y
)
2
L = \frac{1}{2}(q-y)^2
L=21(q−y)2 即预测值与观测值的方差
这样我们用Loss损失函数对 w \pmb{w} w求偏导,即可更新 w \pmb{w} w
- 梯度: δ L δ w = δ q δ w ⋅ δ L δ q = ( q − y ) . δ Q ( w ) δ w \frac{\delta L}{\delta w} = \frac{\delta q}{\delta w} \cdot \frac{\delta L}{\delta q} = (q - y) . \frac{\delta Q(w)}{\delta w} δwδL=δwδq⋅δqδL=(q−y).δwδQ(w)
- 梯度下降更新 w \pmb{w} w: w t + 1 = w t − α ⋅ δ L δ w ∣ w = w t w_{t+1} = w_{t}-\alpha \cdot \frac{\delta L}{\delta w} | _{w=w_t} wt+1=wt−α⋅δwδL∣w=wt
而TD算法不用等一次试验跑完就可以更新模型了。
强化学习中有如下公式:
Q
(
s
t
,
a
t
;
w
)
≈
r
t
+
γ
⋅
Q
(
s
t
+
1
,
a
t
+
1
;
w
)
Q(s_t, a_t; \pmb{w}) \approx r_t + \gamma\cdot Q(s_{t+1}, a_{t+1}; \pmb{w})
Q(st,at;w)≈rt+γ⋅Q(st+1,at+1;w)
贝尔曼方程证明:
有: U t = R t + γ R t + 1 + γ 2 R t + 2 + γ 3 R t + 3 + γ 4 R t + 4 … U_t = R_t + \gamma R_{t+1} + \gamma ^2 R_{t+2} + \gamma ^3 R_{t+3} + \gamma^4 R_{t+4}… Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+γ4Rt+4…
即: U t = R t + γ ⋅ ( R t + 1 + γ R t + 2 + γ 2 R t + 3 + γ 3 R t + 4 … ) U_t = R_t + \gamma\cdot( R_{t+1} + \gamma R_{t+2} + \gamma ^2 R_{t+3} + \gamma^3 R_{t+4}…) Ut=Rt+γ⋅(Rt+1+γRt+2+γ2Rt+3+γ3Rt+4…)
即: U t = R t + γ ⋅ U t + 1 U_t = R_t + \gamma \cdot U_{t+1} Ut=Rt+γ⋅Ut+1
该状态动作奖励 = 即时奖励 + 未来折扣奖励
未来折扣奖励是预期的,但是本次的即时奖励是真实的
TD算法不用等到每一环的奖励都成为真实的再更新网络,
而是使用当下真实的奖励,和未来预期的奖励一起混合来
更新Q网络。即:
r
t
r_t
rt是真实的观测值,但
Q
(
s
t
+
1
,
a
t
+
1
;
w
)
Q(s_{t+1}, a_{t+1}; \pmb{w})
Q(st+1,at+1;w)是理论预测的。
使用TD 算法训练神经网络
具体操作:
Q
(
s
t
,
a
t
;
w
)
≈
r
t
+
γ
⋅
Q
(
s
t
+
1
,
a
t
+
1
;
w
)
Q(s_t, a_t; \pmb{w}) \approx r_t + \gamma \cdot Q(s_{t+1}, a_{t+1}; \pmb{w})
Q(st,at;w)≈rt+γ⋅Q(st+1,at+1;w)
左边预测值
≈
\approx
≈ 右边TD target
记右边项为:
y
t
=
r
t
+
γ
⋅
Q
(
s
t
+
1
,
a
t
+
1
;
w
)
y_t = r_t + \gamma \cdot Q(s_{t+1}, a_{t+1}; \pmb{w})
yt=rt+γ⋅Q(st+1,at+1;w)
=
r
t
+
γ
⋅
m
a
x
a
Q
(
s
t
+
1
,
A
;
w
)
=r_t + \gamma \cdot max_a Q(s_{t+1}, A; \pmb{w})
=rt+γ⋅maxaQ(st+1,A;w)
Loss损失函数:
L
t
=
1
2
[
Q
(
s
t
,
a
t
;
w
)
−
y
t
]
2
L_t = \frac{1}{2}[Q(s_t,a_t;\pmb{w}) - y_t]^2
Lt=21[Q(st,at;w)−yt]2
梯度下降:
w
t
+
1
=
w
t
−
α
⋅
δ
L
t
δ
w
∣
w
=
w
t
w_{t+1} = w_{t}-\alpha \cdot \frac{\delta L_t}{\delta w} | _{w=w_t}
wt+1=wt−α⋅δwδLt∣w=wt
总结
Q
∗
(
s
t
,
a
t
)
=
m
a
x
π
E
[
U
t
∣
S
t
=
s
t
,
A
t
=
a
t
]
Q^*(s_t, a_t) = max_{\pi}E[U_t|S_t=s_t, A_t=a_t]
Q∗(st,at)=maxπE[Ut∣St=st,At=at]
首先使用E求期望,忽略掉除S,A之外的其他因素的影响。
其次是用
m
a
x
π
max_\pi
maxπ使用最优的策略
π
\pi
π从而忽略掉策略对Q的影响。
从而使用Q 只关注S,而驱动agent做动作A
TD algorithm:
伪代码:
- 观测当前状态 s_t 和 a_t
- 用DQN网络作一次预测: q t = Q ( s t , a t ; w t ) q_t = Q(s_t, a_t; \pmb{w_t}) qt=Q(st,at;wt)
- 用反向传播对DQN 求导,得到梯度 d t = δ Q ( s t , a t ; w ) δ w ∣ w = w t d_t= \frac{\delta Q(s_t, a_t; \pmb{w})}{\delta \pmb{w}} |_{\pmb{w=w_t}} dt=δwδQ(st,at;w)∣w=wt
- 环境本身会更新 S t + 1 S_{t+1} St+1 和 r t r_t rt
- 计算观测到的TD target: y t = r t + γ ⋅ m a x a Q ( s t + 1 , a ; w t ) y_t = r_t + \gamma \cdot max_aQ(s_{t+1}, a; \pmb{w_t}) yt=rt+γ⋅maxaQ(st+1,a;wt)
r t r_t rt 是观测到的 γ ⋅ m a x a Q ( s t + 1 , a ; w t ) \gamma \cdot max_aQ(s_{t+1}, a; \pmb{w_t}) γ⋅maxaQ(st+1,a;wt)是通过DQN再次预测的。
- 作一次梯度下降,更新w: w t + 1 = w t − α ⋅ ( q t − y t ) ⋅ d t \pmb{w_{t+1} }= \pmb{w_t} - \alpha \cdot (q_t - y_t)\cdot d_t wt+1=wt−α⋅(qt−yt)⋅dt