這本書(shū)是針對(duì)計(jì)算機(jī)科學(xué)專業(yè)大學(xué)生和軟件工程師的。本課程旨在介紹深度強(qiáng)化學(xué)習(xí),無(wú)需事先了解相關(guān)主題。但是,我們假設(shè)讀者對(duì)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)有基本的了解,并且對(duì)Python編程有中級(jí)的了解。一些使用PyTorch的經(jīng)驗(yàn)也是有用的,但不是必需的。
第1章 強(qiáng)化學(xué)習(xí)簡(jiǎn)介 1
1.1 強(qiáng)化學(xué)習(xí) 1
1.2 強(qiáng)化學(xué)習(xí)中的MDP 6
1.3 強(qiáng)化學(xué)習(xí)中的學(xué)習(xí)函數(shù) 9
1.4 深度強(qiáng)化學(xué)習(xí)算法 11
1.4.1 基于策略的算法 12
1.4.2 基于值的算法 13
1.4.3 基于模型的算法 13
1.4.4 組合方法 15
1.4.5 本書(shū)中的算法 15
1.4.6 同策略和異策略算法 16
1.4.7 小結(jié) 16
1.5 強(qiáng)化學(xué)習(xí)中的深度學(xué)習(xí) 17
1.6 強(qiáng)化學(xué)習(xí)與監(jiān)督學(xué)習(xí) 19
1.6.1 缺乏先知 19
1.6.2 反饋稀疏性 20
1.6.3 數(shù)據(jù)生成 20
1.7 總結(jié) 21
第一部分 基于策略的算法和基于值的算法
第2章 REINFORCE 25
2.1 策略 26
2.2 目標(biāo)函數(shù) 26
2.3 策略梯度 27
2.3.1 策略梯度推導(dǎo) 28
2.4 蒙特卡羅采樣 30
2.5 REINFORCE算法 31
2.5.1 改進(jìn)的REINFORCE算法 32
2.6 實(shí)現(xiàn)REINFORCE 33
2.6.1 一種最小化REINFORCE的實(shí)現(xiàn) 33
2.6.2 用PyTorch構(gòu)建策略 36
2.6.3 采樣動(dòng)作 38
2.6.4 計(jì)算策略損失 39
2.6.5 REINFORCE訓(xùn)練循環(huán) 40
2.6.6 同策略內(nèi)存回放 41
2.7 訓(xùn)練REINFORCE智能體 44
2.8 實(shí)驗(yàn)結(jié)果 47
2.8.1 實(shí)驗(yàn):評(píng)估折扣因子的影響 47
2.8.2 實(shí)驗(yàn):評(píng)估基準(zhǔn)線的影響 49
2.9 總結(jié) 51
2.10 擴(kuò)展閱讀 51
2.11 歷史回顧 51
第3章 SARSA 53
3.1 Q函數(shù)和V函數(shù) 54
3.2 時(shí)序差分學(xué)習(xí) 56
3.2.1 時(shí)序差分學(xué)習(xí)示例 59
3.3 SARSA中的動(dòng)作選擇 65
3.3.1 探索和利用 66
3.4 SARSA算法 67
3.4.1 同策略算法 68
3.5 實(shí)現(xiàn)SARSA 69
3.5.1 動(dòng)作函數(shù):ε-貪婪 69
3.5.2 計(jì)算Q損失 70
3.5.3 SARSA訓(xùn)練循環(huán) 71
3.5.4 同策略批處理內(nèi)存回放 72
3.6 訓(xùn)練SARSA智能體 74
3.7 實(shí)驗(yàn)結(jié)果 76
3.7.1 實(shí)驗(yàn):評(píng)估學(xué)習(xí)率的影響 77
3.8 總結(jié) 78
3.9 擴(kuò)展閱讀 79
3.10 歷史回顧 79
第4章 深度Q網(wǎng)絡(luò) 81
4.1 學(xué)習(xí)DQN中的Q函數(shù) 82
4.2 DQN中的動(dòng)作選擇 83
4.2.1 Boltzmann策略 86
4.3 經(jīng)驗(yàn)回放 88
4.4 DQN算法 89
4.5 實(shí)現(xiàn)DQN 91
4.5.1 計(jì)算Q損失 91
4.5.2 DQN訓(xùn)練循環(huán) 92
4.5.3 內(nèi)存回放 93
4.6 訓(xùn)練DQN智能體 96
4.7 實(shí)驗(yàn)結(jié)果 99
4.7.1 實(shí)驗(yàn):評(píng)估網(wǎng)絡(luò)架構(gòu)的影響 99
4.8 總結(jié) 101
4.9 擴(kuò)展閱讀 102
4.10 歷史回顧 102
第5章 改進(jìn)的深度Q網(wǎng)絡(luò) 103
5.1 目標(biāo)網(wǎng)絡(luò) 104
5.2 雙重DQN 106
5.3 優(yōu)先級(jí)經(jīng)驗(yàn)回放 109
5.3.1 重要性抽樣 111
5.4 實(shí)現(xiàn)改進(jìn)的DQN 112
5.4.1 網(wǎng)絡(luò)初始化 113
5.4.2 計(jì)算Q損失 113
5.4.3 更新目標(biāo)網(wǎng)絡(luò) 115
5.4.4 包含目標(biāo)網(wǎng)絡(luò)的DQN 116
5.4.5 雙重DQN 116
5.4.6 優(yōu)先級(jí)經(jīng)驗(yàn)回放 117
5.5 訓(xùn)練DQN智能體玩Atari游戲 123
5.6 實(shí)驗(yàn)結(jié)果 128
5.6.1 實(shí)驗(yàn):評(píng)估雙重DQN與PER的影響 128
5.7 總結(jié) 132
5.8 擴(kuò)展閱讀 132
第二部分 組合方法
第6章 優(yōu)勢(shì)演員–評(píng)論家算法 135
6.1 演員 136
6.2 評(píng)論家 136
6.2.1 優(yōu)勢(shì)函數(shù) 136
6.2.2 學(xué)習(xí)優(yōu)勢(shì)函數(shù) 140
6.3 A2C算法 141
6.4 實(shí)現(xiàn)A2C 143
6.4.1 優(yōu)勢(shì)估計(jì) 144
6.4.2 計(jì)算價(jià)值損失和策略損失 147
6.4.3 演員–評(píng)論家訓(xùn)練循環(huán) 147
6.5 網(wǎng)絡(luò)架構(gòu) 148
6.6 訓(xùn)練A2C智能體 150
6.6.1 在Pong上使用n步回報(bào)的A2C算法 150
6.6.2 在Pong上使用GAE的A2C算法 153
6.6.3 在BipedalWalker上使用n步回報(bào)的A2C算法 155
6.7 實(shí)驗(yàn)結(jié)果 157
6.7.1 實(shí)驗(yàn):評(píng)估n步回報(bào)的影響 158
6.7.2 實(shí)驗(yàn):評(píng)估GAE中的影響 159
6.8 總結(jié) 161
6.9 擴(kuò)展閱讀 162
6.10 歷史回顧 162
第7章 近端策略優(yōu)化算法 165
7.1 替代目標(biāo)函數(shù) 165
7.1.1 性能突然下降 166
7.1.2 修改目標(biāo)函數(shù) 168
7.2 近端策略優(yōu)化 174
7.3 PPO算法 177
7.4 實(shí)現(xiàn)PPO 179
7.4.1 計(jì)算PPO的策略損失 179
7.4.2 PPO訓(xùn)練循環(huán) 180
7.5 訓(xùn)練PPO智能體 182
7.5.1 在Pong上使用PPO算法 182
7.5.2 在BipedalWalker上使用PPO算法 185
7.6 實(shí)驗(yàn)結(jié)果 188
7.6.1 實(shí)驗(yàn):評(píng)估GAE中的影響 188
7.6.2 實(shí)驗(yàn):評(píng)估裁剪變量的影響 190
7.7 總結(jié) 192
7.8 擴(kuò)展閱讀 192
第8章 并行方法 195
8.1 同步并行 196
8.2 異步并行 197
8.2.1 Hogwild!算法 198
8.3 訓(xùn)練A3C智能體 200
8.4 總結(jié) 203
8.5 擴(kuò)展閱讀 204
第9章 算法總結(jié) 205
第三部分 實(shí)踐細(xì)節(jié)
第10章 深度強(qiáng)化學(xué)習(xí)工程實(shí)踐 209
10.1 軟件工程實(shí)踐 209
10.1.1 單元測(cè)試 210
10.1.2 代碼質(zhì)量 215
10.1.3 Git工作流 216
10.2 調(diào)試技巧 218
10.2.1 生命跡象 219
10.2.2 策略梯度診斷 219
10.2.3 數(shù)據(jù)診斷 220
10.2.4 預(yù)處理器 222
10.2.5 內(nèi)存 222
10.2.6 算法函數(shù) 222
10.2.7 神經(jīng)網(wǎng)絡(luò) 222
10.2.8 算法簡(jiǎn)化 225
10.2.9 問(wèn)題簡(jiǎn)化 226
10.2.10 超參數(shù) 226
10.2.11 實(shí)驗(yàn)室工作流 226
10.3 Atari技巧 228
10.4 深度強(qiáng)化學(xué)習(xí)小結(jié) 231
10.4.1 超參數(shù)表 231
10.4.2 算法性能比較 234
10.5 總結(jié) 238
第11章 SLM Lab 239
11.1 SLM Lab算法實(shí)現(xiàn) 239
11.2 Spec文件 241
11.2.1 搜索Spec語(yǔ)法 243
11.3 運(yùn)行SLM Lab 246
11.3.1 SLM Lab指令 246
11.4 分析實(shí)驗(yàn)結(jié)果 247
11.4.1 實(shí)驗(yàn)數(shù)據(jù)概述 247
11.5 總結(jié) 249
第12章 神經(jīng)網(wǎng)絡(luò)架構(gòu) 251
12.1 神經(jīng)網(wǎng)絡(luò)的類型 251
12.1.1 多層感知機(jī) 252
12.1.2 卷積神經(jīng)網(wǎng)絡(luò) 253
12.1.3 循環(huán)神經(jīng)網(wǎng)絡(luò) 255
12.2 選擇網(wǎng)絡(luò)族的指導(dǎo)方法 256
12.2.1 MDP與POMDP 256
12.2.2 根據(jù)環(huán)境選擇網(wǎng)絡(luò) 259
12.3 網(wǎng)絡(luò)API 262
12.3.1 輸入層和輸出層形狀推斷 264
12.3.2 自動(dòng)構(gòu)建網(wǎng)絡(luò) 266
12.3.3 訓(xùn)練步驟 269
12.3.4 基礎(chǔ)方法的使用 270
12.4 總結(jié) 271
12.5 擴(kuò)展閱讀 271
第13章 硬件 273
13.1 計(jì)算機(jī) 273
13.2 數(shù)據(jù)類型 278
13.3 在強(qiáng)化學(xué)習(xí)中優(yōu)化數(shù)據(jù)類型 280
13.4 選擇硬件 285
13.5 總結(jié) 285
第四部分 環(huán)境設(shè)計(jì)
第14章 狀態(tài) 289
14.1 狀態(tài)示例 289
14.2 狀態(tài)完整性 296
14.3 狀態(tài)復(fù)雜性 297
14.4 狀態(tài)信息損失 301
14.4.1 圖像灰度 301
14.4.2 離散化 302
14.4.3 散列沖突 303
14.4.4 元信息損失 303
14.5 預(yù)處理 306
14.5.1 標(biāo)準(zhǔn)化 307
14.5.2 圖像預(yù)處理 308
14.5.3 時(shí)間預(yù)處理 310
14.6 總結(jié) 313
第15章 動(dòng)作 315
15.1 動(dòng)作示例 315
15.2 動(dòng)作完整性 318
15.3 動(dòng)作復(fù)雜性 319
15.4 總結(jié) 323
15.5 擴(kuò)展閱讀:日常事務(wù)中的動(dòng)作設(shè)計(jì) 324
第16章 獎(jiǎng)勵(lì) 327
16.1 獎(jiǎng)勵(lì)的作用 327
16.2 獎(jiǎng)勵(lì)設(shè)計(jì)準(zhǔn)則 328
16.3 總結(jié) 332
第17章 轉(zhuǎn)換函數(shù) 333
17.1 可行性檢測(cè) 333
17.2 真實(shí)性檢測(cè) 335
17.3 總結(jié) 337
后記 339
附錄A 深度強(qiáng)化學(xué)習(xí)時(shí)間線 343
附錄B 示例環(huán)境 345
B.1 離散環(huán)境 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 連續(xù)環(huán)境 350
B.2.1 Pendulum-v0 350
B.2.2 BipedalWalker-v2 350
參考文獻(xiàn) 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