人工智能和機器學習受數據驅動的趨勢日益明顯。仿真技術不僅強大,而且魅力無窮,有望釋放兩者的全部潛能。本書的主要內容有:用Unity引擎和仿真技術,解決機器學習和人工智能問題。用游戲引擎合成圖像訓模。創(chuàng)建仿真環(huán)境,訓練強化學習和模仿學習模型。采用PPO等高效通用算法解決基于仿真的機器學習問題。用不同方法訓練多種機器學習模型。用PyTorch、Unity ML-Agents和Perception工具集,打通機器學習工具和業(yè)界標準游戲開發(fā)工具。
編輯推薦
仿真和合成是未來人工智能和機器學習的核心部分。試想程序員、數據科學家和機器學習工程師無需汽車就能開發(fā)自動駕駛汽車的大腦,該是多么了不起的成就。用仿真技術合成人造數據,訓練傳統(tǒng)機器學習模型,可擺脫對真實世界信息的依賴。這一切才剛剛開始。
這本實用寶典將帶你探索基于仿真和合成的機器學習和人工智能,重點介紹兩大技術在強化學習和模仿學習中的應用。人工智能和機器學習受數據驅動的趨勢日益明顯。仿真技術不僅強大,而且魅力無窮,有望釋放兩者的全部潛能。
專家推薦
當今時代,數據需求旺盛,數據獲取卻不易。創(chuàng)建高保真仿真環(huán)境,跟開展更強大的研究和開發(fā)機器學習應用之間的聯(lián)系,比以往更緊密。本書是機器學習研究員和Unity開發(fā)者進入這一領域的敲門磚。
Dominic Monn
機器學習工程師
前言歡迎閱讀本書!它融我們兩大摯愛于一體:電子游戲引擎和人工智能。寫作過程,我們自是非常享受。閱讀過程,希望你也能收獲同樣快樂。確切來講,本書將探討Unity 的用法。過去,人常稱其為游戲引擎,但如今又傾向改稱創(chuàng)造和運營交互式實時3D 內容的平臺。這一串詞語可真不少,但基本可歸結為:Unity 是3D 內容開發(fā)平臺。盡管過去它一直用于電子游戲開發(fā),但綜合利用3D 圖像、物理仿真和某種輸入,它也可用于開發(fā)任何可用3D 表示的內容。你若有平臺創(chuàng)造和運營交互式實時3D 內容,再借助機器學習工具,就可利用跟真實世界有幾分相像的自創(chuàng)3D 世界,訓練機器學習模型。盡管它跟真實世界并非一模一樣,但自己發(fā)揮想象,腦補其區(qū)別,不也很有趣嗎,而且該種3D 世界跟真實世界確有某些合理的有用聯(lián)系(如它既可為真實世界機器學習應用生成數據,又可生成可遷移到機器人等真實世界物體的模型)。本書所言真實世界是指物理世界。Unity 和機器學習結合,是創(chuàng)建仿真體(simulation)和合成數據(synthetic data)的好方法。兩者正是本書的兩大不同主題。本書所用資源我們建議你在閱讀本書各章過程,最好邊讀邊自己敲代碼。寫代碼如遇難題解決不了,又或只想保存一份我們的代碼,你可從我們網站(http://wwwsecretlabcomau/books/practical-simulations)找到所需內容。本書我們要做的某些項目,需使用特定資源。這些資源我們已放到上述網站,建議下到本地,以便查找、使用。本書讀者和讀法本書是為對機器學習感興趣的程序員和軟件工程師而寫,只要從事相關領域就可以,并非一定要做機器學習工程師才能讀。你對機器學習產生過興趣,或正要在機器學習領域做更多工作,那么本書就是為你而寫。你是游戲開發(fā)者,現已多少了解Unity 或其他游戲引擎,正打算學習機器學習(用于游戲或其他應用),那么本書也適合你。你即使已成為機器學習專家,仍是本書目標讀者,但不妨換種讀法。毋庸擔心,我們不會太過深入解釋機器學習的原理和方法。因此,即使你已掌握PyTorch 和類似框架的內部工作原理,本書仍適合你。倘若你對機器學習的了解還不夠深入,你也不必擔心。本書可讀性強,你讀起來不會有困難。Unity 仿真和合成,屬于那種你無需理解其復雜細節(jié)就能跑起來的技術。真好用。。ㄟ記得前人這句著名的話吧譯注1)用在這里也十分貼切。因此,只要你從事軟件、機器學習或游戲開發(fā),本書就是為你而寫。你都能從本書找到適合自己的內容。我們將教你足夠的Unity 和機器學習知識。你可以此為起點,沿自己感興趣的技術路線繼續(xù)學習。內容編排本書包括三部分。第一部分仿真和合成基礎介紹仿真和合成兩大主題,并通過一個基于兩者的項目帶你逐漸熟悉它們。第二部分為樂趣和收益而模擬世界專講仿真。仿真主題遠比合成主題宏大,因此這是本書的重頭戲。這一部分,我們將做一系列仿真項目。做的過程,幾乎逐步講解,期間捎帶補充概念,介紹方法。等到這一部分結束,仿真的多種不同路徑,你已了然于胸,可按需選擇。第三部分用合成數據獲得真實結果專講合成。這一部分雖比仿真短得多,但仍極為關鍵。你將學到用Unity 合成數據的基礎。學完這一部分,你基本就能按需合成數據。本書用法我們用一個個小項目來組織本書內容。希望你能跟我們一道完成。期間如癡迷于自己的想法,你還可將其加到項目中來(視自己情況而定,并非一定要這么做)。我們采用基于項目的方法,是因為我們認為該方法最適合學習你需要的Unity 游戲引擎和機器學習知識。我們不打算教你掌握Unity 的一切,而且本書限于篇幅,也不可能放下機器學習所有細節(jié)。而我們通過一個個項目,就可以做到按需引入或排除內容。這些項目系我們精心挑選,希望你也能喜歡!我們的任務仿真部分的任務如下:? 第2 章開發(fā)一個能自己滾向目標的小球(你可能覺得很神奇,不過確實如此)。? 第4 章開發(fā)一個能自己推方塊的立方體。它能將方塊推入目標區(qū)域。? 第5 章開發(fā)一輛簡易自動駕駛小車。它能沿軌道行駛。? 第6 章開發(fā)一個撿幣小球。它經過訓練,學習我們示范的撿幣方法后,能學會自己撿。? 第8 章采用課程學習技術開發(fā)一個拋物智能體。它能向目標拋石塊。? 第9 章開發(fā)一群立方體。它們能一起將方塊推向目標。? 第10 章開發(fā)一個顛球智能體。它能利用視覺輸入(如攝像機)而非準確度量值,使其頂部小球保持平衡。? 第11 章介紹一種用Python 連接和操縱仿真體的方法。合成部分的任務如下:? 第3 章隨機擲骰子并為其生成其圖像。? 第13 章改變地板和骰子顏色,改進骰子圖像生成器。? 第14 章生成背景復雜且位置多樣的超市商品圖像。這些圖像可脫離Unity,訓練智能體。排版約定本書排版遵循以下約定:斜體表示新術語、URL、郵件地址、文件名和文件擴展名。等寬字體(Constant width)表示程序片段和正文出現的編程元素,如變量、函數名、數據庫、數據類型、環(huán)境變量、聲明和關鍵字。也用于命令和命令行輸出。加粗等寬字體(Constant width bold)表示應由用戶原封不動輸入的命令或其他文本。等寬斜體(Constant with italic)表示應該使用用戶輸入的值或根據上下文確定的值替換的文本。使用代碼示例本書配套材料(代碼示例、練習和勘誤等)請從http://secretlabcomau/books/practical-simulations 下載。本書是為幫你完成工作而寫。一般來講,書中示例代碼,你用于自己項目和文檔,無需聯(lián)系并征得我們許可,但大量復制代碼另議。例如,你編寫的程序使用書中多處代碼,無需我們授權,但出售或分發(fā) OReilly 圖書示例代碼,則需我們授權。引用本書內容或示例代碼回答問題,無需授權。但在你的產品文檔大量使用本書示例代碼,則需我們授權。引用時如能添加內容出處,我們非常感激,當然這并非必須。出處通常要標明書名、作者、出版社和ISBN。例如:Practical Simulations for Machine Learning,by Paris and Mars Buttfield-Addison, Tim Nugent, and Jon Manning Copyright 2022 Secret Lab, 978-1-492-08992-6。如果你覺得示例代碼的使用方式可能不當或超出上述許可范圍,請聯(lián)系我們加以確認,郵箱是 permissions@oreillycom。OReilly 在線學習平臺(OReilly Online Learning)近40 年來,OReilly Media 致力于提供技術和商業(yè)培訓、知識和卓越見解,來幫助眾多公司取得成功。公司獨有的專家和改革創(chuàng)新者網絡通過OReilly 書籍、文章以及在線學習平臺,分享他們的專業(yè)知識和實踐經驗。OReilly 在線學習平臺按照您的需要提供實時培訓課程、深入學習渠道、交互式編程環(huán)境以及來自OReilly 和其他200 多家出版商的大量書籍與視頻資料。更多信息,請訪問網站:https://wwworeillycom/。聯(lián)系我們任何有關本書的意見或疑問,請按照以下地址聯(lián)系出版社。美國:OReilly Media, Inc1005 Gravenstein Highway NorthSebastopol, CA 95472中國:北京市西城區(qū)西直門南大街2 號成銘大廈C 座807 室(100035)奧萊利技術咨詢(北京)有限公司我們?yōu)楸緯隽艘粋網頁,將勘誤信息、示例和其他附加信息列在上面。其地址是https://oreilly/practical-sims-for-ML。對本書的評論或技術性問題,請發(fā)電子郵件至:errata@oreillycomcn。如欲了解OReilly 圖書、培訓課程、會議和新聞的更多信息,請訪問網站:http://wwworeillycom。我們的Facebook:http://facebookcom/oreilly。我們的Twitter:http://twittercom/oreillymedia。我們的YouTube:http://youtubecom/oreillymedia。致謝Mars 想感謝家人和本書其他幾位作者的支持。她還想感謝塔斯馬尼亞大學信息與通信技術學院的同仁和澳大利亞技術社區(qū)所給予的所有機會。Jon 感謝父母和日益壯大的大家族其他成員的大力支持。Paris 想把感謝送給母親,沒有她,他幾乎不可能做任何趣事,更不必說寫書。他還想感謝妻子Mars(同為本書作者)和所有朋友(他有幸跟其中幾位共同寫作本書。。Tim 感謝父母和其他家人坦然接受自己相當平凡的人生。我們幾位作者一致感謝人中翹楚Michele Cronin,其技能和建議對本書成書極其寶貴。Paris 為自己在我們會議期間經常帶偏話題而抱歉,但大家能聊得投機,其實很有意思!我們真心期盼未來跟你做更多項目!我們特別感謝友人 O Reilly Media 前編輯Rachel Roumeliotis。開會間隙,我們一起喝咖啡的時光令人懷念。寫作過程,我們跟OReilly Media 多位員工打過交道,真心謝謝他們。我們特別感謝Chris Faucher,其團隊不僅工作出色,而且對我們有驚人的耐心。我們還想把感謝送給優(yōu)秀的文字編輯Elizabeth Oliver。你專業(yè)、有趣、才華橫溢。寫書真令人恐懼。我們要深深感謝Tony Gray 和Apple University Consortium(http://wwwauceduau)使勁推了我們和本頁提及的其他同仁一把。若不是他們,我們就不會寫這本書。而且,Tony,你現在也投身寫作,真對不!我們還想感謝Neal Goldstein。寫書過程興奮又辛酸,皆拜其所賜。我們非常感激MacLab 伙計們(他們頗有自知之明,并一如既往監(jiān)督Admiral Dolphin 團隊那不可避免的自我封神行徑) 的大力支持。我們還想感謝Christopher Lueg 教授、Leonie Ellis 博士以及塔斯馬尼亞大學的新老員工對我們的百般寬容。我們還要感謝 Dave J、Jason I、Adam B、Josh D、Andrew B 和Jess L 等給予我們靈感和幫助的所有人。我們特別感謝蘋果公司團隊,沒有其工程師、作者和藝術師等員工的辛勤工作,本書(和大量同類書籍)就不可能問世。我們還想感謝技術審校!他們把關徹底,反饋專業(yè),對我們工作充滿熱情。本書問世,也離不開他們。他們那極其挑剔的態(tài)度,我們很欣賞!真心話!最后,非常感謝你購買本書,我們很感激!期待你的反饋!
Paris Buttfield-Addison是游戲設計師、計算研究員和法律精英。他還是游戲開發(fā)工作室Secret Lab的聯(lián)合創(chuàng)始人。Mars Buttfield-Addison是塔斯馬尼亞大學計算和機器學習研究員。Tim Nugent是移動端應用開發(fā)者、游戲設計師和計算研究員。Jon Manning是軟件工程專家,精通Swift、C#和Objective-C。他同為Secret Lab的聯(lián)合創(chuàng)始人。他開發(fā)的對話框架Yarn Spinner廣泛應用于游戲開發(fā)。
目錄
前言 1
第一部分 仿真和合成基礎
第1 章 仿真和合成簡介 11
11 機器學習全新天地 12
12 研究領域12
121 仿真 13
122 合成 14
13 工具 14
131 Unity 14
132 用Unity ML-Agents 調用PyTorch 16
133 Unity ML-Agents Toolkit17
134 Unity Perception 包 17
14 技術 18
141 強化學習 18
142 模仿學習 19
143 混合學習 20
144 技術小結 21
15 項目 22
151 仿真項目 22
152 合成項目 23
16 小結和下一步學習內容 23
第2 章 創(chuàng)建首個仿真作品 25
21 人人都記得其首個仿真作品 25
22 仿真作品26
23 開始動手27
24 創(chuàng)建Unity 項目 29
25 ML-Agents 包 33
26 環(huán)境 34
261 地板 34
262 目標 36
27 智能體 37
271 啟動和停止智能體 41
272 讓智能體觀察環(huán)境 45
273 讓智能體在環(huán)境采取行動 45
274 獎懲智能體行為 46
275 修飾智能體 47
276 為智能體提供人工控制系統(tǒng) 50
28 訓練仿真智能體 52
281 用TensorBoard 監(jiān)控訓練 54
282 訓練結束 55
29 我們講了這么多,到底是什么意思? 58
210 下一步學習內容 62
第3 章 首次合成數據 63
31 Unity Perception 包 63
32 數據合成過程 64
33 創(chuàng)建Unity 項目 66
34 創(chuàng)建場景72
341 獲取骰子模型 72
342 創(chuàng)建簡易場景 72
35 準備合成78
351 測試合成情景 82
352 設置標簽 84
353 檢查標簽 86
36 下一步學習內容 87
第二部分 為樂趣和收益而模擬世界
第4 章 創(chuàng)建更高級仿真體 91
41 推塊機搭建步驟 92
42 創(chuàng)建Unity 項目 92
43 環(huán)境 92
431 地板 93
432 墻體 95
433 方塊 99
434 目標 100
435 智能體 103
436 環(huán)境 110
44 訓練和測試 117
第5 章 開發(fā)自動駕駛小車 119
51 搭環(huán)境 120
511 軌道 121
512 小車 127
513 機器學習配置 130
52 訓練仿真體 140
521 訓練 141
522 訓練結束 143
第6 章 模仿學習簡介 145
61 仿真環(huán)境146
611 創(chuàng)建地面 147
612 制作目標 148
613 小球智能體 152
614 攝像機 154
62 搭建仿真155
621 智能體組件 156
622 添加啟發(fā)式控制 159
623 觀察項和目標 161
63 生成數據和訓練 163
631 生成訓練數據 163
632 做好配置,準備訓練164
633 模型,開訓 166
634 用訓好的模型運行 167
64 理解和使用模仿學習 168
第7 章 高級模仿學習 169
71 初識GAIL 169
72 按我言行行事 171
721 GAIL 情景 171
722 修改智能體的動作 174
723 修改觀察項 176
724 重置智能體 177
725 更新智能體屬性 178
726 演示時間 178
73 用GAIL 訓練 179
74 運行智能體和后續(xù)工作 182
第8 章 課程學習簡介 185
81 機器學習領域的課程學習 186
82 課程學習情景 188
83 在Unity 開發(fā) 189
831 創(chuàng)建地面 190
832 創(chuàng)建目標 190
833 智能體 191
84 搭建仿真項目 192
841 讓智能體名副其實 192
842 動作 194
843 觀察項 199
844 人工啟發(fā)式控制 199
85 創(chuàng)建課程202
851 重置環(huán)境 202
852 課程配置 203
86 訓練 207
87 運行 207
88 課程和其他方法的對比 209
89 下一步學習內容 210
第9 章 合作學習 211
91 合作學習仿真項目 211
911 在Unity 搭環(huán)境 212
912 編碼實現智能體 221
913 編寫環(huán)境管理器 224
914 編寫方塊代碼 230
915 完善環(huán)境和智能體 232
92 訓練智能體,使其學會合作 239
93 多智能體合作或單一巨智能體 240
第10 章 攝像機在仿真項目的應用 243
101 觀察項和攝像機傳感器 243
102 構建只有攝像機的智能體245
1021 編碼實現只使用攝像機的智能體 246
1022 為智能體添加新攝像機 251
1023 見智能體之所見 253
103 訓練基于攝像機的智能體258
104 攝像機和你自己 260
第11 章 當ML-Agents 遇到Python 263
111 Python 一路下潛 263
112 試驗環(huán)境 264
113 用Python 能做什么? 271
1131 使用自己環(huán)境 271
1132 完全自定義訓練 276
114 用Python 有什么意義? 278
第12 章 仿真方法揭秘 281
121 超參數(和普通參數) 282
1211 參數 282
1212 獎賞參數 283
1213 超參數 285
122 算法 286
123 Unity 推斷引擎和集成功能 288
1231 使用ML-Agents Gym Wrapper 289
1232 側通道 292
第三部分 用合成數據獲得真實結果
第13 章 創(chuàng)建更高級的合成數據 297
131 為場景添加隨機元素 297
1311 地板顏色隨機化 298
1312 攝像機位置隨機化 300
132 下一步學習內容 304
第14 章 合成商品圖像 307
141 創(chuàng)建Unity 環(huán)境 307
142 Perception Camera 311
143 逐步提高圖像合成質量 325
144 使用合成數據 326