Python神經進化網絡實戰 Hands-On Neuroevolution with Python

Omelianenko, Iaroslav 黃永強 譯

  • Python神經進化網絡實戰-preview-1
  • Python神經進化網絡實戰-preview-2
  • Python神經進化網絡實戰-preview-3
Python神經進化網絡實戰-preview-1

商品描述

本書詳細闡述了與神經進化網絡開發相關的基本解決方案,主要包括神經進化方法概述、Python庫和環境設置、使用NEAT進行XOR求解器優化、擺桿平衡實驗、自主迷宮導航、新穎性搜索優化方法、基於超立方體的NEAT和視覺辨別、ES-HyperNEAT和視網膜問題、協同進化和SAFE方法、深度神經進化等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。 本書適合作為高等院校電腦及相關專業的教材和教學參考書,也可作為相關開發人員的自學教材和參考手冊。

作者簡介

雅羅斯拉夫爾·連奧米恩科擔任首席技術官和研究主管超過10年。
他是機器學習研究領域的活躍成員,並在arXiv、ResearchGate平台以及Preprints等刊物上發表了若干篇研究論文。
10多年前,他開發了用於手機遊戲的自主代理,此後一直從事機器學習的應用。
在過去的5年中,他積極參與有關將深度機器學習方法應用於身份驗證、個人特徵識別、協作機器人技術和合成智能等的研究。
他還是一名活躍的軟件開發人員,使用Go語言創建了開源神經進化算法的實現。

目錄大綱

目 錄

1部分 進化計算算法和神經進化方法的基本原理

1章 神經進化方法概述 3
1.1 進化算法和基於神經進化的方法 3
1.1.1 遺傳算子 5
1.1.2 基因組編碼方案 7
1.1.3 協同進化 9
1.1.4 模塊化和層次結構 9
1.2 關於NEAT算法10
1.2.1 NEAT編碼方案10
1.2.2 結構變異12
1.2.3 使用創新數字交13
1.2.4 物種形成14
1.3 基於立方體的NEAT 16
1.3.1 複合模式生成網絡16
1.3.2 基板配置18
1.3.3 不斷進化的連接CPPN和HyperNEAT算法18
1.4 可進化基板HyperNEAT 20
1.4.1 立方體中的信息模式20
1.4.2 使用樹作為有效的信息提取器21
1.4.3 ES-HyperNEAT算法23
1.5 新穎性搜索優化方法26
1.5.1 新穎性搜索與自然進化26
1.5.2 新穎性度量27
1.6 小結29
1.7 延伸閱讀29

2章 Python庫和環境設置31
2.1 適用於神經進化實驗的Python庫31
2.1.1 NEAT-Python 31
2.1.2 NEAT-Python用法示例32
2.1.3 PyTorch NEAT 33
2.1.4 PyTorch NEAT用法示例34
2.1.5 MultiNEAT 35
2.1.6 MultiNEAT用法示例36
2.1.7 深度神經進化37
2.1.8 比較Python神經進化庫40
2.2 環境設定41
2.2.1 Pipenv 41
2.2.2 Virtualenv 42
2.2.3 Anaconda 43
2.3 小結44

2部分 運用神經進化方法解決經典計算機科學問題

3章 使用NEAT進行XOR求解器優化47
3.1 技術要求47
3.2 XOR問題基礎知識47
3.3 XOR實驗的目標函數49
3.4 參數選擇50
3.4.1 NEAT部分50
3.4.2 DefaultStagnation部分51
3.4.3 DefaultReproduction部分51
3.4.4 DefaultSpeciesSet部分52
3.4.5 DefaultGeme部分52
3.4.6 XOR實驗參數54
3.5 運行XOR實驗56
3.5.1 環境設置56
3.5.2 XOR實驗源代碼57
3.5.3 運行實驗並分析結果60
3.6 練習65
3.7 小結67

4章 擺桿平衡實驗69
4.1 技術要求69
4.2 單桿平衡問題69
4.2.1 單桿平衡器的運動方程70
4.2.2 狀態公式和控制動作72
4.2.3 求解器與模擬器之間的交互72
4.3 單桿平衡實驗的目標函數74
4.3.1 小車-擺桿裝置模擬74
4.3.2 模擬循環75
4.3.3 基因組適應度評估77
4.4 單桿平衡實驗78
4.4.1 參數選擇78
4.4.2 工作環境設置79
4.4.3 實驗運行程序的實現80
4.4.4 運行單桿平衡實驗82
4.5 練習1 85
4.6 雙桿平衡問題85
4.6.1 系統狀態和運動方程86
4.6.2 強化信號89
4.6.3 初始條件和狀態更新89
4.6.4 控制動作91
4.6.5 求解器與模擬器之間的相互作用91
4.7 雙桿平衡實驗的目標函數92
4.8 雙桿平衡實驗93
4.8.1 參數選擇93
4.8.2 工作環境設置95
4.8.3 實驗運行程序的實現95
4.8.4 運行雙桿平衡實驗96
4.9 練習2 100
4.10 小結100

5章 自主迷宮導航103
5.1 技術要求103
5.2 迷宮導航問題103
5.3 迷宮模擬環境105
5.3.1 迷宮導航代理105
5.3.2 迷宮模擬環境的實現107
5.3.3 傳感器數據生成108
5.3.4 代理位置更新109
5.3.5 代理記錄存儲111
5.3.6 代理記錄可視化113
5.4 使用適應度評分的目標函數定義114
5.5 使用簡單迷宮地形運行實驗115
5.5.1 參數選擇116
5.5.2 迷宮配置文件117
5.5.3 工作環境設置118
5.5.4 實驗運行程序的實現118
5.5.5 基因組適應度評估120
5.5.6 運行簡單迷宮導航實驗121
5.5.7 代理記錄可視化125
5.6 練習1 126
5.7 使用難以解決的迷宮配置運行實驗​​126
5.7.1 參數選擇127
5.7.2 工作環境設置和實驗運行程序實現127
5.7.3 運行困難級迷宮導航實驗127
5.8 練習2 130
5.9 小結130

6章 新穎性搜索優化方法131
6.1 技術要求131
6.2 新穎性搜索優化方法131
6.3 新穎性搜索實現的基礎132
6.3.1 關於veltyItem 133
6.3.2 關於veltyArchive 133
6.4 適應度函數與新穎性評分136
6.4.1 新穎性評分136
6.4.2 新穎性度量指標139
6.4.3 適應度函數139
6.4.4 種適應度評估函數140
6.4.5 個體適應度評估函數142
6.5 使用簡單迷宮配置進行實驗145
6.5.1 參數選擇145
6.5.2 工作環境設置146
6.5.3 實驗運行程序的實現146
6.5.4 運行新穎性搜索優化的簡單迷宮導航實驗150
6.5.5 代理記錄可視化153
6.5.6 練習1 155
6.6 使用難以解決的迷宮配置進行實驗155
6.6.1 參數選擇和工作環境設置156
6.6.2 運行難以解決的迷宮導航實驗156
6.6.3 練習2 158
6.7 小結159

3部分 神經進化方法

7章 基於立方體的NEAT和視覺辨別163
7.1 技術要求163
7.2 使用CPPN對ANN進行間接編碼163
7.2.1 CPPN編碼164
7.2.2 基於立方體的增強拓撲的神經進化165
7.3 視覺辨別實驗的基礎知識165
7.4 視覺辨別實驗設置167
7.4.1 視覺辨別器測試環境168
7.4.2 可視域定義168
7.4.3 視覺辨別器環境170
7.4.4 實驗運行程序175
7.4.5 實驗運行程序函數175
7.4.6 基板生成器函數179
7.4.7 適應度評估180
7.5 視覺辨別實驗182
7.5.1 參數選擇182
7.5.2 工作環境設置183
7.5.3 運行視覺辨別實驗184
7.6 練習188
7.7 小結188

8章 ES-HyperNEAT和視網膜問題189
8.1 技術要求189
8.2 手動建立的神經節點拓撲形態和基於進化配置的神經網絡拓撲形態190
8.3 樹信息提取和ES-HyperNEAT基礎知識191
8.4 模塊化視網膜問題的基礎知識193
8.5 目標函數定義195
8.6 模塊化視網膜實驗設置196
8.6.1 初始基板配置196
8.6.2 模塊化視網膜問題的測試環境197
8.6.3 可視對象定義197
8.6.4 視網膜環境定義198
8.7 實驗運行程序201
8.7.1 實驗運行程序的函數201
8.7.2 基板生成器函數205
8.7.3 適應度評估206
8.8 模塊化視網膜實驗208
8.8.1 參數選擇208
8.8.2 工作環境設置209
8.8.3 運行模塊化視網膜實驗210
8.9 練習214
8.10 小結214

9章 協同進化和SAFE方法215
9.1 技術要求215
9.2 協同進化基礎知識和常見協同進化策略215
9.3 關於SAFE算法216
9.4 改進的迷宮實驗介紹217
9.4.1 迷宮求解代理217
9.4.2 迷宮環境218
9.5 適應度函數定義219
9.5.1 迷宮求解器的適應度函數219
9.5.2 目標函數候選者的適應度函數220
9.6 改進的新穎性搜索方法221
9.6.1 關於_add_velty_item函數221
9.6.2 關於evaluate_velty_score函數222
9.7 改進的迷宮實驗實現223
9.7.1 協同進化的種的創建223
9.7.2 創建目標函數候選者的種223
9.7.3 創建迷宮求解器的種224
9.8 協同進化種的適應度評估225
9.8.1 目標函數候選者的適應度評估225
9.8.2 迷宮求解器代理的適應度評估227
9.9 改進的迷宮實驗運行程序230
9.10 改進的迷宮實驗的參數設置和運行233
9.10.1 迷宮求解器種的參數233
9.10.2 目標函數候選者種的參數234
9.10.3 工作環境設置234
9.10.4 運行修改後的迷宮實驗234
9.11 練習237
9.12 小結237

10章 深度神經進化239
10.1 技術要求239
10.2 用於深度強化學習的深度神經進化240
10.3 使用深層神經進化訓練代理玩遊戲241
10.3.1 關於Frostbite遊戲241
10.3.2 將游戲畫面映到動作242
10.3.3 卷積層243
10.3.4 訓練遊戲代理的捲積神經網絡架構244
10.4 針對遊戲代理的強化學習訓練245
10.4.1 基因組編碼方案245
10.4.2 簡單遺傳算法247
10.5 訓練代理玩Frostbite遊戲248
10.5.1 Atari學習環境248
10.5.2 遊戲步進函數249
10.5.3 遊戲觀察函數249
10.5.4 重置Atari環境函數250
10.6 在GPU核心上的強化學習評估250
10.6.1 RLEvalutionWorker類251
10.6.2 ConcurrentWorkers類254
10.7 實驗運行程序256
10.7.1 實驗配置文件256
10.7.2 實驗運行程序的實現258
10.8 運行Frostbite遊戲實驗260
10.8.1 設置工作環境260
10.8.2 運行實驗262
10.8.3 可視化遊戲過程263
10.9 神經進化的可視檢查器264
10.9.1 建立工作環境264
10.9.2 使用VINE進行實驗的可視化264
10.10 練習266
10.11 小結266

4部分 複習和總結

11章 佳實踐和技巧提示269
11.1 從問題分析開始269
11.1.1 預處理數據269
11.1.2 理解問題領域272
11.1.3 編寫良好模擬器272
11.2 選擇佳搜索優化方法272
11.2.1 面向目標的搜索優化273
11.2.2 新穎性搜索優化273
11.3 可視化274
11.4 調整參數275
11.5 性能指標276
11.5.1 率277
11.5.2 召回率277
11.5.3 準確率278
11.5.4 F1分數278
11.5.5 ROC AUC 278
11.6 Python編碼技巧280
11.6.1 編碼技巧280
11.6.2 工作環境和編程工具281
11.7 小結282

12章 總結283
12.1 本書內容複習283
12.1.1 神經進化方法概述283
12.1.2 Python庫和環境設置285
12.1.3 使用NEAT進行XOR求解器優化285
12.1.4 擺桿平衡實驗286
12.1.5 自主迷宮導航287
12.1.6 新穎性搜索優化方法288
12.1.7 基於立方體的NEAT和視覺辨別289
12.1.8 ES-HyperNEAT和視網膜問題290
12.1.9 協同進化與SAFE方法290
12.1.10 深度神經進化291
12.2 相關資料292
12.2.1 優步AI實驗室292
12.2.2 alife.org 292
12.2.3 來自Reddit的開放式進化社區293
12.2.4 NEAT軟件目錄293
12.2.5 arXiv.org 293
12.2.6 NEAT算文293
12.3 小結294