《强化学习:原理与Python实现》更新与勘误

(2019年12月第1版第3次印刷)

Gym 0.25版本更新了API,GitHub代码已相应更新。代码以GitHub上为准。

行数计算方法

本勘误文档中,行数计算“第i行”(i=0,1,2,)是从0开始计数的。小节标题、公式、内联代码、注意、本章要点记入行数,章标题、图、表、代码清单及它们的题注不计入行数。空行不计入行数。

第17页第6行

作者注: “轨道”又称为“轨迹”。本书中这两个词混用。

第20页第2行

作者注: 这种带折扣的回报定义既可以用于回合制任务,也可以用于连续性任务,是一种统一的表示。

第20页第9行

R¯=limt+E[1tτ=0tRτ]

改为

R¯=limt+E[1tτ=1tRτ]

第22页图2-2b)中图注

vπ(𝘴)

改为

vπ(𝘴)

第28页第0行

Δ=(1γ)(1(1αxβy))>0

改为

Δ=(1γ)(1(1αxβy)γ)>0

第28页第1行

分母部分

改为

分子部分

第29页正文第2行

γ<14β1α

改为

γ14β1α

第30页

作者注:用线性规划求解最优状态价值的详细证明可见《Markov Decision Processes: Discrete Stochastic Dynamic Programming》(Martin Puterman)的第6.9节。证明大致如下:当c(𝘴)为Markov决策过程的初始状态分布时,原问题和对偶问题的目标都是Markov决策过程的平均回合奖励,原问题的最优解是最优状态价值。对c(𝘴)做灵敏度分析可知,无论c(𝘴)取什么分布,对偶问题均有解(这利用到对偶问题的可行域就是带折扣的状态动作对组成的分布所在的空间),所以原问题的最优解都是不变的。也就是说,Markov决策过程的最优状态价值和初始状态分布无关。进一步,可以在原问题中放宽𝘴c(𝘴)=1这个限制,原问题的解依然不变,只是优化目标进行了放缩。

第34页第9行

计算这个动态规划问题

改为

计算这个线性规划问题

第39页第1行

v(𝘴)

改为

v(𝘴)

第39页第25行

(fix point)

改为

(fixed point)

第42页第9行

对于两个确定性的策略

改为

对于策略

第48页3.5节

作者注:Gym 0.19版本将FrozenLake-v0改为FrozenLake-v1。

作者注:Gym 0.22删除了DiscreteEnv类,所以env.unwrapped.nS和env.unwrapped.nA不再可用。建议用env.observation_space.n替换env.unwrapped.nA,用env.action_space.n替换env.unwrapped.nA。

第56页第10行

同时满足{αk:k=1,2,}

改为

{αk:k=1,2,}同时满足

第58页最后一行

𝘴

改为

𝘴

第66页4.3节

作者注:Gym 0.20版本将Blackjack-v0改为Blackjack-v1。

第67页第3行

范围为3~21的int型数值

改为

范围为4~21的int型数值

第72页4.3.4节正文第1行,第73页正文第0行

evaluate_action_monte_carlo_importance_resample

改为

evaluate_monte_carlo_importance_sample

第72页代码清单4-7第0行,第73页正文第7行

evaluate_monte_carlo_importance_resample

改为

evaluate_monte_carlo_importance_sample

第73页代码清单4-8第0行,第74页正文第0行,第74页正文第3行

monte_carlo_importance_resample

改为

monte_carlo_importance_sample

第85页算法5-10输入

输入:环境(无数学描述)、策略π

改为

输入:环境(无数学描述)、如果是策略评估还需要输入策略π

第85页算法5-10第2.3.1步

根据π(𝘚t+n)决定

改为

根据b(𝘚t+n)决定

第91页算法5-13参数部分、第92页算法5-14参数部分

参数:资格迹参数β

改为

参数:资格迹参数λβ

第91页算法5-13第2.3.5步

改为

2.2.5(更新价值)q(𝘴,𝘢)q(𝘴,𝘢)+αe(𝘴,𝘢)[Uq(𝘚,𝘈)],𝘴S,𝘢A(𝘴);

第91页算法5-13第2.3.6步

退出2.2步

改为

退出2.3步

第92页算法5-14第2.3.3步

𝘴S,𝘢A

改为

𝘴S

第92页算法5-14第2.3.5步

改为

2.2.5(更新价值)v(𝘴)v(𝘴)+αe(𝘴)[Uv(𝘚)],𝘴S

第96页代码清单5-6第14行

改为

第102页第12行

t=0T[Gtv(𝘚t;w)]2

改为

t=0T1[Gtv(𝘚t;w)]2

第104页算法6-4第2.2.4步,第106页算法6-6第2.3.5步(共2处)

(更新动作价值函数)

改为

(更新价值函数)

第105页算法6-5第2.1步

增加

初始化资格迹z0

第114页第5行

算法6-10

改为

算法6-9

第114页6.4.4节

本节将“duel network”译作“对偶网络”有误。可译为“决斗网络”。相应的“对偶Q网络”、“对偶深度Q网络”可改为“决斗Q网络”、“决斗深度Q网络”。

第118页

作者注:

砖瓦编码是一种历史悠久的特征构造方法,可用于回归、分类等问题。目前学术界倾向于用神经网络代替砖瓦编码来构造特征。由于砖瓦编码和强化学习没有直接关联,本书没有用过多的篇幅介绍砖瓦编码。

实际使用砖瓦编码时,不需要精确计算砖瓦的数量,常随意的大致估计砖瓦的数量作为特征数。如果设置的特征数大于真实的砖瓦数量,那么有些特征永远不会取到,有些浪费;如果设置的特征数小于真实的砖瓦数量,那么有多个砖瓦需要共享特征,具体逻辑可以见代码清单6-3中“冲突处理”部分。这些浪费和冲突往往不会造成明显的性能损失。

第118页砖瓦数计算:每个大网格的网格宽度刚好是整个取值范围的1/8。所以,第0层大网格每个维度有8个大网格;第1~7层由于有偏移,每个维度需要有9个大网格才能覆盖整个取值范围。第117页图6-3b的情况略有不同:这个图中每个维度的取值范围不是大网格的长度的整数倍。所以有些层偏移后,不需要更多的大网格也可以覆盖整个取值范围。

第126页最后一行

=𝘴Pr[𝘚t=𝘴]vπ(θθ)(𝘚t)

改为

=𝘴Pr[𝘚t=𝘴]vπ(θθ)(𝘴)

第127页第10行

=E[𝘢qπ(θθ)(𝘚0,𝘢)π(𝘢|𝘚0;θθ)]+E[𝘢γqπ(θθ)(𝘚1,𝘢)π(𝘢|𝘚1;θθ)]+γ2E[vπ(θθ)(𝘚1)]

改为

=E[𝘢qπ(θθ)(𝘚0,𝘢)π(𝘢|𝘚0;θθ)]+E[𝘢γqπ(θθ)(𝘚1,𝘢)π(𝘢|𝘚1;θθ)]+γ2E[vπ(θθ)(𝘚2)]

第128页第10行

增量αγtGtπ(𝘈t|𝘚t;θθt)

改为

增量αγtGtπ(𝘈t|𝘚t;θθ)

第129页第15行

随机变量B(𝘚)=τ=1t1γτtRτ

改为

随机变量B(𝘚)=τ=0t1γτtRτ+1

第131页算法7-3第2.3步

2.3(初始化回报和权重)

改为

2.3(初始化回报)

第137页代码清单7-1中learn()函数

改为

第142页算法8.3第2.3.2步

作者注:这里的更新式子遵循了论文原文而没有考虑累积折扣。推导出现折扣是正确的;更新时考虑折扣也是正确和合理的。

第143页第5行,第143页算法8.4第2.3.4步(共2处)

lnπ(𝘈𝘚;w)

改为

lnπ(𝘈𝘚;θθ)

第144页第7~11行

Eπ(θθ)[t=0+γtaπk(𝘚t,𝘈t)]

=Eπ(θθ)[t=0+γt(Rt+γvπ(θθk)(𝘚t+1)vπ(θθk)(𝘚t))]

=Eπ(θθ)[vπ(θθk)(𝘚0)+t=0+γtRt]

=E𝘚0[vπ(θθk)(𝘚0)]+Eπ(θθ)[t=0+γtRt]

=Eπ(θθk)[G0]+Eπ(θθ)[G0].

改为

Eπ(θθ)[t=0+γtaπ(θθk)(𝘚t,𝘈t)]

=Eπ(θθ)[t=0+γt(Rt+1+γvπ(θθk)(𝘚t+1)vπ(θθk)(𝘚t))]

=Eπ(θθ)[vπ(θθk)(𝘚0)+t=0+γtRt+1]

=E𝘚0[vπ(θθk)(𝘚0)]+Eπ(θθ)[t=0+γtRt+1]

=Eπ(θθk)[G0]+Eπ(θθ)[G0].

第144页第15行和第18行(共2处)

E𝘚t,𝘈tπ(θθ)[aπk(𝘚t,𝘈t)]

改为

E𝘚t,𝘈tπ(θθ)[aπ(θθk)(𝘚t,𝘈t)]

第146页算法8-5第2.3步

更新θθ以减小

改为

更新θθ以增大

第147页图8-1中间线的注记

l(θθ)

改为

l(θθ)

第150页第9行

αk(12(xk+αkpk)TF(xk+αkpk)gT(xk+αpk))=αkpkTFpkpkT(Fxkg)

改为

αk(12(xk+αkpk)TF(xk+αkpk)gT(xk+αkpk))=αkpkTFpk+pkT(Fxkg)

第150页第11行

αk=pkT(Fxkg)pkTFpk

改为

αk=pkT(gFxk)pkTFpk

第155页第28行

=𝘢π(𝘢|𝘚t;θθEMA)π(𝘢|𝘚t;θθ).

改为

=𝘢π(𝘢𝘚t;θθEMA)π(𝘢𝘚t;θθ)θθπ(𝘢𝘚t;θθ).

第150页算法8-7第2.1步

2.1 zFx

改为

2.1 zFp

第161页第4~5行

作者注:“动作价值网络和策略网络往往采用矢量形式的输出”指的是动作空间是离散动作空间的情况。如果动作空间是连续动作空间,往往用Gaussian形式的策略,详见GitHub代码。包括SAC算法在内的使用策略梯度的算法采用Gaussian形式策略后,策略被限制为了单峰(unimodal)形式。如果需要策略具有多峰(multimodal)形式,可以使用混合Gaussian模型(Gaussian Mixture Model,GMM)。

第161页8.6节

作者注:这个案例的动作空间是离散的。同时,本章介绍的算法,包括但不限于PPO、SAC等算法,也可用于动作空间是连续空间的情况。

第162页第17行

单5-7中的

改为

单5-3中的

第165页代码清单8-2前4行(中间有个空行不计入)

多缩进4个空格

第173页第9行

vπ(θθ)(𝘚t)

改为

vπ(θθ)(𝘴)

第173页第20行

=E[π(𝘚0;θθ)[𝘢qπ(θθ)(𝘚0,𝘢)]𝘢=π(𝘚0;θθ)]+γE[π(𝘚1;θθ)[𝘢qπ(θθ)(𝘚1,𝘢)]𝘢=π(𝘚1;θθ)]+γ2E[vπ(θθ)(𝘚1)]

改为

=E[π(𝘚0;θθ)[𝘢qπ(θθ)(𝘚0,𝘢)]𝘢=π(𝘚0;θθ)]+γE[π(𝘚1;θθ)[𝘢qπ(θθ)(𝘚1,𝘢)]𝘢=π(𝘚1;θθ)]+γ2E[vπ(θθ)(𝘚2)]

第174页第4行

ρπ(𝘴)=𝘴0Sp𝘚0(𝘴0)t=0+γtPr[𝘚t|𝘚0=𝘴0;θθ]d𝘴0

改为

ρπ(θθ)(𝘴)=t=0+γtPr[𝘚t=𝘴;π(θθ)], 𝘴S

作者注:从严格意义上说,有折扣的状态分布并不是概率分布,因为它的和不总是1。针对有折扣的状态分布的期望也只是采用了期望的形式。

第174页第7~11行

=t=0+𝘴p𝘚t(𝘴)γtπ(𝘴;θθ)[𝘴qπ(θθ)(𝘴,𝘢)]𝘢=π(𝘚t;θθ)d𝘴

=t=0+𝘴(𝘴0𝘴0p𝘚0(𝘴0)Pr[𝘚t=𝘴|𝘴0=𝘴0;θθ]d𝘴0)γtπ(𝘴;θθ)[𝘴qπ(θθ)(𝘴,𝘢)]𝘢=π(𝘴;θθ)d𝘴

=𝘴(𝘴0p𝘚0(𝘴0)t=0+γtPr[𝘚t=𝘴|𝘴0=𝘴0;θθ]d𝘴0)π(𝘚t;θθ)[𝘢qπ(θθ)]𝘢=π(𝘴;θθ)d𝘴

=𝘴ρπ(θθ)(𝘴)π(𝘴;θθ)[𝘢qπ(θθ)(𝘴,𝘢)]𝘢=π(𝘴;θθ)d𝘴

=Eρπ(θθ)[π(𝘴;θθ)[𝘢qπ(θθ)(𝘴,𝘢)]𝘢=π(𝘴;θθ)]

改为

=t=0+𝘴Pr[𝘚t=𝘴;π(θθ)]γtπ(𝘴;θθ)[𝘢qπ(θθ)(𝘴,𝘢)]𝘢=π(𝘴;θθ)

=𝘴(t=0+γtPr[𝘚t=𝘴;π(θθ)])π(𝘴;θθ)[𝘢qπ(θθ)(𝘴,𝘢)]𝘢=π(𝘴;θθ)

=𝘴ρπ(θθ)(𝘴)π(𝘴;θθ)[𝘢qπ(θθ)]𝘢=π(𝘴;θθ)

=Eρπ(θθ)[π(𝘚;θθ)[𝘢qπ(θθ)(𝘚,𝘢)]𝘢=π(𝘚;θθ)]

第176页第12行

σ2eθ(t+s)E[0teθτdBt0seθτdBt]

改为

σ2eθ(t+s)E[0teθτdBτ0seθτdBτ]

第176页到第177页9.2节正文

改为

对于连续的动作空间,我们希望能够找到一个确定性策略,使得每条轨迹的回报最大。同策确定性算法利用策略π(θθ)生成轨迹,并在这些轨迹上求得回报的平均值,通过让平均回报最大,使得每条轨迹上的回报尽可能大。事实上,如果每条轨迹的回报都要最大,那么对于任意策略b采样得到的轨迹,我们都希望在这套轨迹上的平均回报最大。所以异策确定性策略算法引入确定性行为策略b,将这个平均改为针对策略b采样得到的轨迹,得到异策确定性梯度为Eρb[qπ(θθ)(𝘚,π(𝘚;θθ))]=Eρb[π(𝘚;θθ)[aqπ(θθ)(𝘚,𝘢)]𝘢=π(𝘚;θθ)]。这个表达式与同策的情形相比,期望运算针对的表达式相同。所以,异策确定性算法的迭代式与同策确定性算法的迭代式相同。

异策确定性算法可能比同策确定性算法性能好的原因在于,行为策略可能会促进探索,用行为策略采样得到的轨迹能够更加全面的探索轨迹空间。这时候,最大化对轨迹分布的平均期望时能够同时考虑到更多不同的轨迹,使得在整个轨迹空间上的所有轨迹的回报会更大。

与非确定性策略梯度相比,非确定性异策算法的迭代式中含有重采样因子π(𝘈t|𝘚t;θθ)b(𝘈t|𝘚t),而确定性异策算法中没有。这是因为,确定性的行为策略b并不对于确定性的目标策略π(θθ)绝对连续,重采样因子没有定义,所以不包括重采样因子。

第177页算法9-2第2.3.1步

2.3.1(执行)用b(𝘚)得到

改为

2.3.1(执行)用行为策略b(𝘚)得到

第180页9.3节

作者注:Gym 0.21版本将Pendulum-v0改为Pendulum-v1。

第180页图9-1

改为

第180页第4行

X轴是水平向下的,Y轴是水平向右的。

改为

X轴是水平向上的,Y轴是水平向左的。

第188页10.1节

作者注:Gym 0.21版本修改了Atari游戏环境的安装方式。

第191页表10-1(共4处)

NoFrameSkip

改为

NoFrameskip

第207页图11-3

改为