这本书是针对计算机科学专业大学生和软件工程师的。本课程旨在介绍深度强化学习,无需事先了解相关主题。但是,我们假设读者对机器学习和深度学习有基本的了解,并且对Python编程有中级的了解。一些使用PyTorch的经验也是有用的,但不是必需的。
第1章 强化学习简介 1
1.1 强化学习 1
1.2 强化学习中的MDP 6
1.3 强化学习中的学习函数 9
1.4 深度强化学习算法 11
1.4.1 基于策略的算法 12
1.4.2 基于值的算法 13
1.4.3 基于模型的算法 13
1.4.4 组合方法 15
1.4.5 本书中的算法 15
1.4.6 同策略和异策略算法 16
1.4.7 小结 16
1.5 强化学习中的深度学习 17
1.6 强化学习与监督学习 19
1.6.1 缺乏先知 19
1.6.2 反馈稀疏性 20
1.6.3 数据生成 20
1.7 总结 21
第一部分 基于策略的算法和基于值的算法
第2章 REINFORCE 25
2.1 策略 26
2.2 目标函数 26
2.3 策略梯度 27
2.3.1 策略梯度推导 28
2.4 蒙特卡罗采样 30
2.5 REINFORCE算法 31
2.5.1 改进的REINFORCE算法 32
2.6 实现REINFORCE 33
2.6.1 一种最小化REINFORCE的实现 33
2.6.2 用PyTorch构建策略 36
2.6.3 采样动作 38
2.6.4 计算策略损失 39
2.6.5 REINFORCE训练循环 40
2.6.6 同策略内存回放 41
2.7 训练REINFORCE智能体 44
2.8 实验结果 47
2.8.1 实验:评估折扣因子的影响 47
2.8.2 实验:评估基准线的影响 49
2.9 总结 51
2.10 扩展阅读 51
2.11 历史回顾 51
第3章 SARSA 53
3.1 Q函数和V函数 54
3.2 时序差分学习 56
3.2.1 时序差分学习示例 59
3.3 SARSA中的动作选择 65
3.3.1 探索和利用 66
3.4 SARSA算法 67
3.4.1 同策略算法 68
3.5 实现SARSA 69
3.5.1 动作函数:ε-贪婪 69
3.5.2 计算Q损失 70
3.5.3 SARSA训练循环 71
3.5.4 同策略批处理内存回放 72
3.6 训练SARSA智能体 74
3.7 实验结果 76
3.7.1 实验:评估学习率的影响 77
3.8 总结 78
3.9 扩展阅读 79
3.10 历史回顾 79
第4章 深度Q网络 81
4.1 学习DQN中的Q函数 82
4.2 DQN中的动作选择 83
4.2.1 Boltzmann策略 86
4.3 经验回放 88
4.4 DQN算法 89
4.5 实现DQN 91
4.5.1 计算Q损失 91
4.5.2 DQN训练循环 92
4.5.3 内存回放 93
4.6 训练DQN智能体 96
4.7 实验结果 99
4.7.1 实验:评估网络架构的影响 99
4.8 总结 101
4.9 扩展阅读 102
4.10 历史回顾 102
第5章 改进的深度Q网络 103
5.1 目标网络 104
5.2 双重DQN 106
5.3 优先级经验回放 109
5.3.1 重要性抽样 111
5.4 实现改进的DQN 112
5.4.1 网络初始化 113
5.4.2 计算Q损失 113
5.4.3 更新目标网络 115
5.4.4 包含目标网络的DQN 116
5.4.5 双重DQN 116
5.4.6 优先级经验回放 117
5.5 训练DQN智能体玩Atari游戏 123
5.6 实验结果 128
5.6.1 实验:评估双重DQN与PER的影响 128
5.7 总结 132
5.8 扩展阅读 132
第二部分 组合方法
第6章 优势演员–评论家算法 135
6.1 演员 136
6.2 评论家 136
6.2.1 优势函数 136
6.2.2 学习优势函数 140
6.3 A2C算法 141
6.4 实现A2C 143
6.4.1 优势估计 144
6.4.2 计算价值损失和策略损失 147
6.4.3 演员–评论家训练循环 147
6.5 网络架构 148
6.6 训练A2C智能体 150
6.6.1 在Pong上使用n步回报的A2C算法 150
6.6.2 在Pong上使用GAE的A2C算法 153
6.6.3 在BipedalWalker上使用n步回报的A2C算法 155
6.7 实验结果 157
6.7.1 实验:评估n步回报的影响 158
6.7.2 实验:评估GAE中的影响 159
6.8 总结 161
6.9 扩展阅读 162
6.10 历史回顾 162
第7章 近端策略优化算法 165
7.1 替代目标函数 165
7.1.1 性能突然下降 166
7.1.2 修改目标函数 168
7.2 近端策略优化 174
7.3 PPO算法 177
7.4 实现PPO 179
7.4.1 计算PPO的策略损失 179
7.4.2 PPO训练循环 180
7.5 训练PPO智能体 182
7.5.1 在Pong上使用PPO算法 182
7.5.2 在BipedalWalker上使用PPO算法 185
7.6 实验结果 188
7.6.1 实验:评估GAE中的影响 188
7.6.2 实验:评估裁剪变量的影响 190
7.7 总结 192
7.8 扩展阅读 192
第8章 并行方法 195
8.1 同步并行 196
8.2 异步并行 197
8.2.1 Hogwild!算法 198
8.3 训练A3C智能体 200
8.4 总结 203
8.5 扩展阅读 204
第9章 算法总结 205
第三部分 实践细节
第10章 深度强化学习工程实践 209
10.1 软件工程实践 209
10.1.1 单元测试 210
10.1.2 代码质量 215
10.1.3 Git工作流 216
10.2 调试技巧 218
10.2.1 生命迹象 219
10.2.2 策略梯度诊断 219
10.2.3 数据诊断 220
10.2.4 预处理器 222
10.2.5 内存 222
10.2.6 算法函数 222
10.2.7 神经网络 222
10.2.8 算法简化 225
10.2.9 问题简化 226
10.2.10 超参数 226
10.2.11 实验室工作流 226
10.3 Atari技巧 228
10.4 深度强化学习小结 231
10.4.1 超参数表 231
10.4.2 算法性能比较 234
10.5 总结 238
第11章 SLM Lab 239
11.1 SLM Lab算法实现 239
11.2 Spec文件 241
11.2.1 搜索Spec语法 243
11.3 运行SLM Lab 246
11.3.1 SLM Lab指令 246
11.4 分析实验结果 247
11.4.1 实验数据概述 247
11.5 总结 249
第12章 神经网络架构 251
12.1 神经网络的类型 251
12.1.1 多层感知机 252
12.1.2 卷积神经网络 253
12.1.3 循环神经网络 255
12.2 选择网络族的指导方法 256
12.2.1 MDP与POMDP 256
12.2.2 根据环境选择网络 259
12.3 网络API 262
12.3.1 输入层和输出层形状推断 264
12.3.2 自动构建网络 266
12.3.3 训练步骤 269
12.3.4 基础方法的使用 270
12.4 总结 271
12.5 扩展阅读 271
第13章 硬件 273
13.1 计算机 273
13.2 数据类型 278
13.3 在强化学习中优化数据类型 280
13.4 选择硬件 285
13.5 总结 285
第四部分 环境设计
第14章 状态 289
14.1 状态示例 289
14.2 状态完整性 296
14.3 状态复杂性 297
14.4 状态信息损失 301
14.4.1 图像灰度 301
14.4.2 离散化 302
14.4.3 散列冲突 303
14.4.4 元信息损失 303
14.5 预处理 306
14.5.1 标准化 307
14.5.2 图像预处理 308
14.5.3 时间预处理 310
14.6 总结 313
第15章 动作 315
15.1 动作示例 315
15.2 动作完整性 318
15.3 动作复杂性 319
15.4 总结 323
15.5 扩展阅读:日常事务中的动作设计 324
第16章 奖励 327
16.1 奖励的作用 327
16.2 奖励设计准则 328
16.3 总结 332
第17章 转换函数 333
17.1 可行性检测 333
17.2 真实性检测 335
17.3 总结 337
后记 339
附录A 深度强化学习时间线 343
附录B 示例环境 345
B.1 离散环境 346
B.1.1 CartPole-v0 346
B.1.2 MountainCar-v0 347
B.1.3 LunarLander-v2 347
B.1.4 PongNoFrameskip-v4 348
B.1.5 BreakoutNoFrameskip-v4 349
B.2 连续环境 350
B.2.1 Pendulum-v0 350
B.2.2 BipedalWalker-v2 350
参考文献 353
Contents
1IntroductiontoReinforcementLearning1
1.1ReinforcementLearning1
1.2ReinforcementLearningasMDP6
1.3LearnableFunctionsinReinforcementLearning9
1.4DeepReinforcementLearningAlgorithms11
1.4.1Policy-BasedAlgorithms12
1.4.2Value-BasedAlgorithms13
1.4.3Model-BasedAlgorithms13
1.4.4CombinedMethods15
1.4.5AlgorithmsCoveredinThisBook15
1.4.6On-PolicyandOff-PolicyAlgorithms16
1.4.7Summary16
1.5DeepLearningforReinforcementLearning17
1.6ReinforcementLearningandSupervisedLearning19
1.6.1LackofanOracle19
1.6.2SparsityofFeedback20
1.6.3DataGeneration201.7
Summary21
IPolicy-BasedandValue-BasedAlgorithms232REINFORCE25
2.1Policy26
2.2TheObjectiveFunction26
2.3ThePolicyGradient27
2.3.1PolicyGradientDerivation28
2.4MonteCarloSampling30
2.5REINFORCEAlgorithm31
2.5.1ImprovingREINFORCE32
2.6ImplementingREINFORCE33
2.6.1AMinimalREINFORCEImplementation33
2.6.2ConstructingPolicieswithPyTorch36
2.6.3SamplingActions38
2.6.4CalculatingPolicyLoss39
2.6.5REINFORCETrainingLoop40
2.6.6On-PolicyReplayMemory41
2.7TrainingaREINFORCEAgent44
2.8ExperimentalResults47
2.8.1Experiment:TheEffectofDiscountFactor
472.8.2Experiment:TheEffectofBaseline49
2.9Summary51
2.10FurtherReading51
2.11History51
3SARSA53
3.1TheQ-andV-Functions54
3.2TemporalDifferenceLearning56
3.2.1IntuitionforTemporalDifferenceLearning59
3.3ActionSelectioninSARSA65
3.3.1ExplorationandExploitation66
3.4SARSAAlgorithm67
3.4.1On-PolicyAlgorithms68
3.5ImplementingSARSA69
3.5.1ActionFunction:"-Greedy69
3.5.2CalculatingtheQ-Loss70
3.5.3SARSATrainingLoop71
3.5.4On-PolicyBatchedReplayMemory72
3.6TrainingaSARSAAgent74
3.7ExperimentalResults76
3.7.1Experiment:TheEffectofLearningRate77
3.8Summary78
3.9FurtherReading79
3.10History79
4DeepQ-Networks(DQN)81
4.1LearningtheQ-FunctioninDQN82
4.2ActionSelectioninDQN83
4.2.1TheBoltzmannPolicy86
4.3ExperienceReplay88
4.4DQNAlgorithm89
4.5ImplementingDQN91
4.5.1CalculatingtheQ-Loss91
4.5.2DQNTrainingLoop92
4.5.3ReplayMemory93
4.6TrainingaDQNAgent96
4.7ExperimentalResults99
4.7.1Experiment:TheEffectofNetworkArchitecture99
4.8Summary101
4.9FurtherReading102
4.10History102
5ImprovingDQN103
5.1TargetNetworks104
5.2DoubleDQN106
5.3PrioritizedExperienceReplay(PER)109
5.3.1ImportanceSampling111
5.4ModifiedDQNImplementation112
5.4.1NetworkInitialization113
5.4.2CalculatingtheQ-Loss113
5.4.3UpdatingtheTargetNetwork115
5.4.4DQNwithTargetNetworks116
5.4.5DoubleDQN116
5.4.6PrioritizedExperiencedReplay117
5.5TrainingaDQNAgenttoPlayAtariGames123
5.6ExperimentalResults128
5.6.1Experiment:TheEffectofDoubleDQNandPER128
5.7Summary132
5.8FurtherReading132
IICombinedMethods133
6AdvantageActor-Critic(A2C)135
6.1TheActor136
6.2TheCritic136
6.2.1TheAdvantageFunction136
6.2.2LearningtheAdvantageFunction140
6.3A2CAlgorithm141
6.4ImplementingA2C143
6.4.1AdvantageEstimation144
6.4.2CalculatingValueLossandPolicyLoss147
5NetworkArchitecture148
6.6TraininganA2CAgent150
6.6.1A2Cwithn-StepReturnsonPong150
6.6.2A2CwithGAEonPong153
6.6.3A2Cwithn-StepReturnsonBipedalWalker155
6.7ExperimentalResults157
6.7.1Experiment:TheEffectofn-StepReturns158
6.7.2Experiment:TheEffectofofGAE159
6.8Summary161
6.9FurtherReading162
6.10History162
7ProximalPolicyOptimization(PPO)165
7.1SurrogateObjective165
7.1.1PerformanceCollapse166
7.1.2ModifyingtheObjective168
7.2ProximalPolicyOptimization(PPO)174
7.3PPOAlgorithm177
7.4ImplementingPPO179
7.4.1CalculatingthePPOPolicyLoss179
7.4.2PPOTrainingLoop180
7.5TrainingaPPOAgent182
7.5.1PPOonPong182
7.5.2PPOonBipedalWalker185
7.6ExperimentalResults188
7.6.1Experiment:TheEffectofofGAE188
7.6.2Experiment:TheEffectofClippingVariable"190
7.7Summary192
7.8FurtherReading192
8ParallelizationMethods195
8.1SynchronousParallelization196
8.2AsynchronousParallelization197
8.2.1Hogwild!198
8.3TraininganA3CAgent200
8.4Summary203
8.5FurtherReading2049Algorithm
Summary205
IIIPracticalDetails207
10GettingDeepRLtoWork20
910.1SoftwareEngineeringPractices209
10.1.1UnitTests210
10.1.2CodeQuality215
10.1.3GitWorkflow216
10.2DebuggingTips218
10.2.1SignsofLife219
10.2.2PolicyGradientDiagnoses219
10.2.3DataDiagnoses220
10.2.4Preprocessor222
10.2.5Memory222
10.2.6AlgorithmicFunctions222
10.2.7NeuralNetworks222
10.2.8AlgorithmSimplification225
10.2.9ProblemSimplification226
10.2.10Hyperparameters226
10.2.11LabWorkflow226
10.3AtariTricks228
10.4DeepRLAlmanac231
10.4.1HyperparameterTables231
10.4.2AlgorithmPerformanceComparison234
10.5Summary238
11SLMLab239
11.1AlgorithmsImplementedinSLMLab239
11.2SpecFile241
11.2.1SearchSpecSyntax243
11.3RunningSLMLab246
11.3.1SLMLabCommands246
11.4AnalyzingExperimentResults247
11.4.1OverviewoftheExperimentData247
11.5Summary249
12NetworkArchitectures251
12.1TypesofNeuralNetworks251
12.1.1MultilayerPerceptrons(MLPs)252
12.1.2ConvolutionalNeuralNetworks(CNNs)253
12.1.3RecurrentNeuralNetworks(RNNs)255
12.2GuidelinesforChoosingaNetworkFamily256
12.2.1MDPsvs.POMDPs256
12.2.2ChoosingNetworksforEnvironments259
12.3TheNetAPI262
12.3.1InputandOutputLayerShapeInference264
12.3.2AutomaticNetworkConstruction266
12.3.3TrainingStep269
12.3.4ExposureofUnderlyingMethods270
12.4Summary271
12.5FurtherReading271
13Hardware273
13.1Computer273
13.2DataTypes278
13.3OptimizingDataTypesinRL280
13.4ChoosingHardware285
13.5Summary285
IVEnvironmentDesign287
14States289
14.1ExamplesofStates289
14.2StateCompleteness296
14.3StateComplexity297
14.4StateInformationLoss301
14.4.1ImageGrayscaling301
14.4.2Discretization302
14.4.3HashConflict303
14.4.4MetainformationLoss303
14.5Preprocessing306
14.5.1Standardization307
14.5.2ImagePreprocessing308
14.5.3TemporalPreprocessing310
14.6Summary313
15Actions315
15.1ExamplesofActions315
15.2ActionCompleteness318
15.3ActionComplexity319
15.4Summary323
15.5FurtherReading:ActionDesigninEverydayThings324
16Rewards327
16.1TheRoleofRewards327
16.2RewardDesignGuidelines328
16.3Summary332
17TransitionFunction333
17.1FeasibilityChecks333
17.2RealityCheck335
17.3Summary337
Epilogue339
ADeepReinforcementLearningTimeline343
BExampleEnvironments345B.1DiscreteEnvironments346
B.1.1CartPole-v0346
B.1.2MountainCar-v0347
B.1.3LunarLander-v2347
B.1.4PongNoFrameskip-v4348
B.1.5BreakoutNoFrameskip-v4349
B.2ContinuousEnvironments350
B.2.1Pendulum-v0350
B.2.2BipedalWalker-v2350References353
Index363