本文主要学习资料为B站视频、相关GitHub代码以及有心人的学习笔记,相关链接如下:
一、专业术语
Agent: 一个嵌入在环境中的能够通过Action改变环境State的系统。例如:在游戏中的马里奥。
State(S): State可以看作是Agent过去的所有Action对环境影响的集合。未来的State取决于当前的State。State空间(S)包含从过去(已知)到未来(可能)所有的State。
如果当前为时间节点为t,则从现在到过去的State均为已观测值,用小写字母表示:
s
1
,
⋯
,
s
t
s_1,\cdots,s_{t}
s1,⋯,st;未来的State因为尚未发生,因此为随机变量,用大写字母表示:
S
t
+
1
,
S
t
+
2
,
⋯
S_{t+1},S_{t+2},\cdots
St+1,St+2,⋯。
Action(A): Action是Agent的动作。Action空间(A)包含Agent所有可能的Action,Action的构成可以是离散集,如{上,下,左,右},也可以是连续集,如[1,100]。
如果当前为时间节点为t,则从现在到过去的Action均为已观测值,用小写字母表示:
a
1
,
⋯
,
a
t
a_1,\cdots,a_{t}
a1,⋯,at;未来的Action因为尚未发生,因此为随机变量,用大写字母表示:
A
t
+
1
,
A
t
+
2
,
⋯
A_{t+1},A_{t+2},\cdots
At+1,At+2,⋯。
Reward(R): Reward是Agent在特定环境下做出Action的奖励值。强化学习的目标就是让获得的Reward尽量高。
如果当前为时间节点为t,则从现在到过去的Reward均为已观测值,用小写字母表示:
r
1
,
⋯
,
r
t
r_1,\cdots,r_{t}
r1,⋯,rt;未来的Reward取决于未来的State和Action,因此为随机变量,用大写字母表示:
R
t
+
1
,
R
t
+
2
,
⋯
R_{t+1},R_{t+2},\cdots
Rt+1,Rt+2,⋯。
Policy function(π): 是一个条件概率函数:
π
(
a
∣
s
)
=
P
(
A
=
a
∣
S
=
s
)
π(a|s)=P(A=a|S=s)
π(a∣s)=P(A=a∣S=s)表示当观察到State为s时,做出Action为a的概率。
注:强化学习学习的就是Policy。AI可以通过Policy函数来控制Agent的Action。Policy最好是随机的。
State transition(p): 在特定环境中,通过Action(A=a)将State(S=s)转化为State(S’)。状态转移函数是一个条件概率密度函数: 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)=P(S′=s′∣S=s,A=a)。状态转移可以是确定的也可以是随机的,通常为随机的。状态转移的随机性来源于环境。
Environment与Agent的交互:在t时,环境会告诉Agent处于一个State( S = s t S=s_t S=st),Agent做出相应的Action( A = a t A=a_t A=at),环境根据Action给Agent相应的Reward( R = r t R=r_t R=rt),同时环境会更新State( S = s t + 1 S=s_{t+1} S=st+1),以此类推。
随机性的来源:
1.Action有随机性。通过Policy对Action进行随机抽样。
2.State transition有随机性。环境通过状态转移函数得到转移到下一状态的概率并进行随机抽取。
Trajectory: 轨迹,表示每一步的(State,Action,Reward)。
以下为重要概念:
Return(U): aka cumulative future reward. 表示未来的累计奖励: U t = R t + R t + 1 + R t + 2 + R t + 3 + ⋯ U_t=R_t+R_{t+1}+R_{t+2}+R_{t+3}+\cdots Ut=Rt+Rt+1+Rt+2+Rt+3+⋯由于未来的奖励的重要性低于当前的奖励,因此强化学习中一般会使用Discounted return(aka cumulative discounted future reward)。定义discounted rate(γ∈[0,1],超参数),若未来的奖励与现在同等重要则γ=1。Discounted return表示为: U t = R t + γ R t + 1 + γ 2 R t + 2 + γ 3 R t + 3 + ⋯ U_t=R_t+γR_{t+1}+γ^2R_{t+2}+γ^3R_{t+3}+\cdots Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+⋯
Action-value function( Q π Q_π Qπ): Q π ( s t , a t ) Q_π(s_t,a_t) Qπ(st,at)测量了,在给定Policy(π)与State( s t s_t st)的情况下,Action( a t a_t at)的价值。用于比较不同Action的优劣。通过求期望的运算可以将未来的随机变量消除,则可以通过给定的π与当前的状态 s t s_t st决定动作 a t a_t at的价值。 Q π ( s t , a t ) = E [ U t ∣ S t = s t , A t = a t ) ] Q_π(s_t,a_t)=E[U_t|S_t=s_t,A_t=a_t)] Qπ(st,at)=E[Ut∣St=st,At=at)]
Optimal action-value function( Q ∗ Q^* Q∗): 最优动作价值函数是使得 Q π ( s t , a t ) Q_π(s_t,a_t) Qπ(st,at)最大的 Q π Q_π Qπ。主要用于判断动作的好坏。 Q ∗ ( s t , a t ) = max π Q π ( s t , a t ) Q^*(s_t,a_t)=\max \limits_{π}Q_π(s_t,a_t) Q∗(st,at)=πmaxQπ(st,at)
State-value function( V π V_π Vπ): 状态价值函数测量了,在给定Policy(π)情况下,State( s t s_t st)的价值(好坏程度)。可用于判断当前局势的好坏。通过求期望的运算可以将未来的动作(随机变量A)消除,则可以通过给定的π决定当前状态 s t s_t st的价值。 V π ( s t ) = E A [ Q π ( s t , A ) ] V_π(s_t)=E_A[Q_π(s_t,A)] Vπ(st)=EA[Qπ(st,A)]注: V π V_π Vπ能够评价π的好坏,如果π越好 E S [ V π ( S ) ] E_S[V_π(S)] ES[Vπ(S)]越大。
小结:
强化学习的目的就是如何控制Agent,让Agent怎么基于当前状态s做出最优的动作a,争取最终得到最多的奖励r。强化学习通常让AI学习Policy function( π ( a ∣ s ) π(a|s) π(a∣s))或者学习Optimal action-value function( Q ∗ ( s , a ) Q^*(s,a) Q∗(s,a))。前者通过输入当前状态s,算出每一个动作的概率π,进而进行抽样得到动作a;后者则可直接判断当前状态s下所有动作的好坏,进而选出最优的动作a。
二、Value-based learning 价值学习
Deep Q-Network(DQN)
目标:最大化未来的Reward
问题:根据
Q
∗
Q^*
Q∗得到每一个动作的平均回报,选择平均汇报最高的动作a
挑战:
Q
∗
Q^*
Q∗难以直接得到,因此价值学习的目的就是获得近似的
Q
∗
Q^*
Q∗函数
DQN:用神经网络
Q
(
s
,
a
;
w
)
Q(s,a;\bm{w})
Q(s,a;w)近似
Q
∗
(
s
,
a
)
Q^*(s,a)
Q∗(s,a)函数。DQN的输出是对每一个动作的打分。
训练:
TD算法,无需完成全部任务也能够更新模型的参数。核心思想就是让TD error尽可能等于0。在深度强化学习中, 有如下的公式:
Q
(
s
t
,
a
t
;
w
)
≈
r
t
+
γ
⋅
Q
(
s
t
+
1
,
a
t
+
1
;
w
)
Q(s_t,a_t;\bm{w})≈r_t+γ \cdot Q(s_{t+1},a_{t+1};\bm{w})
Q(st,at;w)≈rt+γ⋅Q(st+1,at+1;w)其中,左式是从t时刻看的,右式是从t+1时刻看的。
具体步骤:
- 已知预测(DQN): Q ( s t , a t ; w ) Q(s_t,a_t;\bm{w}) Q(st,at;w)
- TD target: y t = r t + γ ⋅ Q ( s t + 1 , a t + 1 ; w ) = r t + γ ⋅ max a Q ( s t + 1 , a ; w ) y_t=r_t+γ \cdot Q(s_{t+1},a_{t+1};\bm{w})=r_t+γ \cdot \max \limits_{a} Q(s_{t+1},a_{};\bm{w}) yt=rt+γ⋅Q(st+1,at+1;w)=rt+γ⋅amaxQ(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;\bm{w})-y_t]^2 Lt=21[Q(st,at;w)−yt]2
- 梯度下降: w t + 1 = w t − α ⋅ ∂ L t ∂ w ∣ w = w t \bm{w_{t+1}}=\bm{w_t}-α \cdot \frac{∂L_t}{∂\bm{w}} |\bm{w}=\bm{w_t} wt+1=wt−α⋅∂w∂Lt∣w=wt
三、Policy-based learning 策略学习
Policy函数π会根据输入的状态s输出每一个可能动作的概率值。Agent就可以根据概率对动作进行抽样。只要有一个好的Policy函数,就可以自动控制Agent的动作了。但Policy函数有时很难直接得到,因此仍然可以选择使用神经网络去近似Policy函数。
用神经网络
π
(
a
∣
s
;
θ
)
π(a|s;\bm{θ})
π(a∣s;θ)近似
π
(
a
∣
s
)
π(a|s)
π(a∣s)函数。其中,
θ
\bm{θ}
θ为神经网络的参数,随机初始化,通过不断学习进行改进。
将
V
π
(
s
t
)
V_π(s_t)
Vπ(st)中的
π
π
π替换成神经网络
π
(
a
∣
s
;
θ
)
π(a|s;\bm{θ})
π(a∣s;θ),则
V
π
(
s
t
)
V_π(s_t)
Vπ(st)可以近似写成:
V
π
(
s
;
θ
)
=
∑
a
π
(
a
∣
s
;
θ
)
⋅
Q
π
(
s
,
a
)
V_π(s;\bm{θ})=\sum_{a} π(a|s;\bm{θ}) \cdot Q_π(s,a)
Vπ(s;θ)=a∑π(a∣s;θ)⋅Qπ(s,a)该函数可用于评价状态s与策略网络的好坏。给定状态s,策略网络越好则
V
π
(
s
;
θ
)
V_π(s;\bm{θ})
Vπ(s;θ)的值越大。优化策略网络的方法为改进
θ
\bm{θ}
θ。因此,可以通过对状态S求期望进而消除随机变量S,得到关于
θ
\bm{θ}
θ的函数:
J
(
θ
)
=
E
S
[
V
(
S
;
θ
)
]
J(\bm{θ})=E_S[V(S;\bm{θ})]
J(θ)=ES[V(S;θ)]该函数只用于评价策略网络的好坏。
Policy gradient ascent
策略梯度上升法是改进 θ \bm{θ} θ的方法之一,其主要步骤如下:
- 观测到状态s
- 梯度上升更新: θ ← θ + β ⋅ ∂ V ( s ; θ ) ∂ θ \bm{θ} \gets \bm{θ}+β \cdot \frac{∂V(s;\bm{θ})}{∂\bm{θ}} θ←θ+β⋅∂θ∂V(s;θ),其中 ∂ V ( s ; θ ) ∂ θ \frac{∂V(s;\bm{θ})}{∂\bm{θ}} ∂θ∂V(s;θ)为策略梯度(Policy gradient)
Policy gradient 策略梯度
策略梯度的两种近似形式:
Form 1: ∂ V ( s ; θ ) ∂ θ = ∑ a ∂ π ( a ∣ s ; θ ) ∂ θ ⋅ Q π ( s , a ) \frac{∂V(s;\bm{θ})}{∂\bm{θ}}=\sum_{a} \frac{∂π(a|s;\bm{θ})}{∂\bm{θ}} \cdot Q_π(s,a) ∂θ∂V(s;θ)=∑a∂θ∂π(a∣s;θ)⋅Qπ(s,a)
Form 2: ∂ V ( s ; θ ) ∂ θ = E A [ ∂ l o g π ( A ∣ s , θ ) ∂ θ ⋅ Q π ( s , A ) ] \frac{∂V(s;\bm{θ})}{∂\bm{θ}}=E_A[\frac{∂ log π(A|s,\bm{θ})}{∂\bm{θ}} \cdot Q_π(s,A)] ∂θ∂V(s;θ)=EA[∂θ∂logπ(A∣s,θ)⋅Qπ(s,A)]
Form 1适合action space A为离散的;Form 2适合连续的动作。
Form 2的期望是通过蒙特卡洛近似计算出来的,具体步骤如下:
- 随机抽样得到一个动作 a ^ \hat{a} a^,这是根据概率函数 π ( a ∣ s ; θ ) π(a|s;\bm{θ}) π(a∣s;θ)抽取的。
- 将需要求期望的式子记为
g
(
a
^
,
θ
)
=
∂
l
o
g
π
(
a
^
∣
s
,
θ
)
∂
θ
⋅
Q
π
(
s
,
a
^
)
g(\hat{a},\bm{θ})=\frac{∂ log π(\hat{a}|s,\bm{θ})}{∂\bm{θ}} \cdot Q_π(s,\hat{a})
g(a^,θ)=∂θ∂logπ(a^∣s,θ)⋅Qπ(s,a^) ,由于
a
^
\hat{a}
a^是一个确定的数,因此直接带入计算即可。
由于 E [ g ( A , θ ) ] = ∂ V ( s ; θ ) ∂ θ E[g(A,\bm{θ})]=\frac{∂V(s;\bm{θ})}{∂\bm{θ}} E[g(A,θ)]=∂θ∂V(s;θ),因此 g ( a ^ , θ ) g(\hat{a},\bm{θ}) g(a^,θ)是 ∂ V ( s ; θ ) ∂ θ \frac{∂V(s;\bm{θ})}{∂\bm{θ}} ∂θ∂V(s;θ)的无偏估计。 - 蒙特卡洛近似,即使用 g ( a ^ , θ ) g(\hat{a},\bm{θ}) g(a^,θ)近似 ∂ V ( s ; θ ) ∂ θ \frac{∂V(s;\bm{θ})}{∂\bm{θ}} ∂θ∂V(s;θ)
- 这个近似也可以用于离散的动作
算法
- 观察到当前状态 s t s_t st
- 根据 π ( ⋅ ∣ s t ; θ t ) π(\cdot|s_t;\bm{θ_t}) π(⋅∣st;θt)得到概率,随机抽样得到一个动作 a t a_t at
- 计算动作价值函数的值,结果记作: q t ≈ Q π ( s t , a t ) q_t≈Q_π(s_t,a_t) qt≈Qπ(st,at)
- 计算策略网络的梯度: d θ , t = ∂ l o g π ( a t ∣ s t , θ ) ∂ θ ∣ θ = θ t \bm{d}_{\bm{θ},t}=\frac{∂ log π(a_t|s_t,\bm{θ})}{∂\bm{θ}} |\bm{θ}=\bm{θ_t} dθ,t=∂θ∂logπ(at∣st,θ)∣θ=θt
- 蒙特卡洛近似策略梯度: g ( a t , θ t ) = q t ⋅ d θ , t \bm{g}(a_t,\bm{θ}_t)=q_t \cdot \bm{d}_{\bm{θ},t} g(at,θt)=qt⋅dθ,t
- 更新策略网络参数: θ t + 1 ← θ t + β ⋅ g ( a t , θ t ) \bm{θ}_{t+1} \gets \bm{θ}_t+β \cdot \bm{g}(a_t,\bm{θ}_t) θt+1←θt+β⋅g(at,θt)
算法第三步,近似计算 q t q_t qt的方法有两个:
- Reinforce算法:记录一轮游戏的Trajectory,得到 u t u_t ut,去近似 Q π ( s t , a t ) Q_π(s_t,a_t) Qπ(st,at),则 q t = u t q_t=u_t qt=ut
- 用另一个神经网络近似 Q π ( s t , a t ) Q_π(s_t,a_t) Qπ(st,at),见下一节
- 注:有的时候 q t q_t qt可能需要减去一个baseline,表现会更好
Proximal Policy Optimization( PPO )
On-policy: 需要学习的Agent和与环境进行交互的Agent是同一个
Off-policy: 需要学习的Agent和与环境进行交互的Agent不是同一个
四、Actor-Critic Methods
Policy network(actor):
用神经网络
π
(
a
∣
s
;
θ
)
π(a|s;\bm{θ})
π(a∣s;θ)近似
π
(
a
∣
s
)
π(a|s)
π(a∣s)函数。
Value network(critic):
用神经网络
q
(
s
,
a
;
w
)
q(s,a;\bm{w})
q(s,a;w)近似
Q
π
(
s
,
a
)
Q_π(s,a)
Qπ(s,a)函数。
Actor-Critic Methods:
将两个网络结合起来,同时训练:
V
π
(
s
)
=
∑
a
π
(
a
∣
s
)
⋅
Q
π
(
s
,
a
)
≈
∑
a
π
(
a
∣
s
;
θ
)
⋅
q
(
s
,
a
;
w
)
V_π(s)=\sum_{a} π(a|s) \cdot Q_π(s,a)≈\sum_{a} π(a|s;\bm{θ}) \cdot q(s,a;\bm{w})
Vπ(s)=a∑π(a∣s)⋅Qπ(s,a)≈a∑π(a∣s;θ)⋅q(s,a;w)
训练
状态价值函数近似记作: V ( s ; θ , w ) = ∑ a π ( a ∣ s ; θ ) ⋅ q ( s , a ; w ) V(s;\bm{θ},\bm{w})=\sum_{a} π(a|s;\bm{θ}) \cdot q(s,a;\bm{w}) V(s;θ,w)=a∑π(a∣s;θ)⋅q(s,a;w)Actor-Critic Methods需要学习两个神经网络,学习 π ( a ∣ s ; θ ) π(a|s;\bm{θ}) π(a∣s;θ)是为了让 V ( s ; θ , w ) V(s;\bm{θ},\bm{w}) V(s;θ,w)的值更大,为了学习 π ( a ∣ s ; θ ) π(a|s;\bm{θ}) π(a∣s;θ)需要 q ( s , a ; w ) q(s,a;\bm{w}) q(s,a;w)作为裁判来打分;学习 q ( s , a ; w ) q(s,a;\bm{w}) q(s,a;w)是为了打分更加精准。神经网络更新步骤:
- 观察到当前状态 s t s_t st
- 根据 π ( ⋅ ∣ s t ; θ t ) π(\cdot|s_t;\bm{θ_t}) π(⋅∣st;θt)得到概率,随机抽样得到一个动作 a t a_t at
- Agent执行动作 a t a_t at,此时可以观测到新状态 s t + 1 s_{t+1} st+1和回报 r t r_t rt
- 根据 r t r_t rt,用TD算法更新 w \bm{w} w(in value network)
- 用policy gradient算法更新 θ \bm{θ} θ(in policy network)
Update value network q q q using TD
- 用价值网络分别给动作 a t a_t at和 a t + 1 a_{t+1} at+1打分,得到 q ( s t , a t ; w t ) q(s_t,a_t;\bm{w}_t) q(st,at;wt)和 q ( s t + 1 , a t + 1 ; w t ) q(s_{t+1},a_{t+1};\bm{w}_t) q(st+1,at+1;wt)
- 计算TD target: y t = r t + γ ⋅ q ( s t + 1 , a t + 1 ; w t ) y_t=r_t+γ \cdot q(s_{t+1},a_{t+1};\bm{w}_t) yt=rt+γ⋅q(st+1,at+1;wt)
- 计算Loss: L ( w ) = 1 2 [ q ( s t , a t ; w ) − y t ] 2 L(\bm{w})=\frac{1}{2} [q(s_t,a_t;\bm{w})-y_t]^2 L(w)=21[q(st,at;w)−yt]2
- 梯度下降: w t + 1 = w t − α ⋅ ∂ L ( w ) ∂ w ∣ w = w t \bm{w_{t+1}}=\bm{w_t}-α \cdot \frac{∂L(\bm{w})}{∂\bm{w}} |\bm{w}=\bm{w_t} wt+1=wt−α⋅∂w∂L(w)∣w=wt
Update policy network π π π using policy gradient
- 定义 g ( a , θ ) = ∂ l o g π ( a ∣ s t , θ ) ∂ θ ⋅ q ( s t , a ; w ) \bm{g}(a,\bm{θ})=\frac{∂ log π(a|s_t,\bm{θ})}{∂\bm{θ}} \cdot q(s_t,a;\bm{w}) g(a,θ)=∂θ∂logπ(a∣st,θ)⋅q(st,a;w)
- 根据 π ( ⋅ ∣ s t ; θ t ) π(\cdot|s_t;\bm{θ_t}) π(⋅∣st;θt)得到概率,随机抽样得到一个动作 a a a,这样得到的 a a a才能使 g ( a , θ ) \bm{g}(a,\bm{θ}) g(a,θ)具有无偏性。
- 梯度上升: θ t + 1 ← θ t + β ⋅ g ( a , θ t ) \bm{θ}_{t+1} \gets \bm{θ}_t+β \cdot \bm{g}(a,\bm{θ}_t) θt+1←θt+β⋅g(a,θt)
算法总结
- 观察到当前状态 s t s_t st,根据 π ( ⋅ ∣ s t ; θ t ) π(\cdot|s_t;\bm{θ_t}) π(⋅∣st;θt)得到所有可能动作的概率,进而进行随机抽样得到一个动作 a t a_t at
- Agent执行动作 a t a_t at,环境会告知新状态 s t + 1 s_{t+1} st+1和回报 r t r_t rt
- 输入新状态
s
t
+
1
s_{t+1}
st+1,根据
π
(
⋅
∣
s
t
+
1
;
θ
t
)
π(\cdot|s_{t+1};\bm{θ_t})
π(⋅∣st+1;θt)得到所有可能动作的概率,进而进行随机抽样得到一个动作
a
~
t
+
1
\tilde{a}_{t+1}
a~t+1
注:此时 a ~ t + 1 \tilde{a}_{t+1} a~t+1并不一定是下一步需要执行的动作,只是下一步动作的预测。算法每一轮迭代只会做一个动作 a t a_t at,只得到一个奖励 r t r_t rt,只更新一次参数。 - 用价值网络分别给动作 a t a_t at和 a ~ t + 1 \tilde{a}_{t+1} a~t+1打分,得到 q t ( s t , a t ; w t ) q_t(s_t,a_t;\bm{w}_t) qt(st,at;wt)和 q t + 1 ( s t + 1 , a ~ t + 1 ; w t ) q_{t+1}(s_{t+1},\tilde{a}_{t+1};\bm{w}_t) qt+1(st+1,a~t+1;wt)
- 计算TD error: δ t = q t − ( r t + γ ⋅ q t + 1 ) = q t − T D t a r g e t δ_t=q_t-(r_t+γ \cdot q_{t+1})=q_t-TD target δt=qt−(rt+γ⋅qt+1)=qt−TDtarget
- 对价值网络求梯度: d w , t = ∂ q ( s t , a t ; w ) ∂ w ∣ w = w t \bm{d}_{\bm{w},t}=\frac{∂ q(s_t,a_t;\bm{w})}{∂\bm{w}} |\bm{w}=\bm{w_t} dw,t=∂w∂q(st,at;w)∣w=wt
- 梯度下降更新价值网络: w t + 1 = w t − α ⋅ δ t ⋅ d w , t \bm{w_{t+1}}=\bm{w_t}-α \cdot δ_t \cdot \bm{d}_{\bm{w},t} wt+1=wt−α⋅δt⋅dw,t
- 对策略网络求梯度: d θ , t = ∂ l o g π ( a t ∣ s t , θ ) ∂ θ ∣ θ = θ t \bm{d}_{\bm{θ},t}=\frac{∂ log π(a_t|s_t,\bm{θ})}{∂\bm{θ}} |\bm{θ}=\bm{θ_t} dθ,t=∂θ∂logπ(at∣st,θ)∣θ=θt
- 梯度上升更新策略网络:
θ
t
+
1
=
θ
t
+
β
⋅
q
t
⋅
d
θ
,
t
\bm{θ}_{t+1}=\bm{θ}_t+β \cdot q_t \cdot \bm{d}_{\bm{θ},t}
θt+1=θt+β⋅qt⋅dθ,t
注:此时也可用TD error: δ t δ_t δt代替 q t q_t qt,进行梯度上升,即: θ t + 1 = θ t + β ⋅ δ t ⋅ d θ , t \bm{θ}_{t+1}=\bm{θ}_t+β \cdot δ_t \cdot \bm{d}_{\bm{θ},t} θt+1=θt+β⋅δt⋅dθ,t,两者的期望是相同的,使用 δ t δ_t δt的算法称为baseline,现在普遍用的是这个。
五、AlphaGo基本原理
围棋游戏:
State:黑、白、空三种情况的矩阵。可用取值为0和1的19×19×2的tensor表示。其中一个19×19的矩阵可以表示一种颜色棋子的有无。然而实际上AlphaGo使用的是19×19×48的tensor来表示状态,其中包含了很多其他信息。
为了解释性,这里讲解的是19×19×17的tensor表示的State。
19×19为围棋棋盘的容量。这可以看做有17个棋盘大小的矩阵。其中,有1个矩阵用于表示下一步是黑子还是白子(全1为黑,全0为白);8个矩阵表示黑子的位置,分别表示当前步与前7步黑子的分布;另8个矩阵表示白子的位置,分别表示当前步与前7步白子的分布。
Action:围棋游戏的动作就是放棋子,因此动作空间
A
∈
{
1
,
2
,
⋯
,
361
}
A∈\{1,2,\cdots,361\}
A∈{1,2,⋯,361}
AlphaGo训练
- behavior cloning:为了节约时间,AlphaGo先通过学习人类的策略来构建初步的策略网络。这一步运用的是一种监督学习的方法,属于模仿学习不是强化学习。模仿学习是没有Reward概念的,Agent只需要模仿人的动作就好了
- policy gradient:用策略梯度算法进一步训练策略网络。具体就是用两个策略网络来互相对抗。当游戏没有结束时,每一步的奖励是0,赢得游戏则奖励为+1,输掉则为-1。
- AlphaGo没有使用Actor-Critic Methods,而是先训练好policy network后,再用policy network去训练value network
AlphaGo与人类下棋
AlphaGo下棋时,使用了policy network与value network进行蒙特卡洛树搜索(MCTS)。MCTS步骤:
- Selection:观测到当前棋盘的状态,按照动作的分数选出一个动作a,这个动作只是假想的,并不一定会执行。这里的分数计算有一个很巧妙的公式
- Expansion:假想对手走一步,根据策略网络得到的概率去走,得到新状态
- Evaluation:价值网络给动作a打分v,让游戏进行到结束得到结果r,最后让 v + r 2 \frac{v+r}{2} 2v+r作为动作a的最终分数
- Backup:用 v + r 2 \frac{v+r}{2} 2v+r更新动作a的分数