- 深度強化學習算法與實踐:基于PyTorch的實現
- 張校捷編著
- 1532字
- 2022-05-06 17:08:27
序
強化學習這個研究領域自從被人們發現后,一直是人工智能算法中的一大重要研究課題。因為強化學習算法自身僅從環境中獲取相應的學習數據,與人類的學習和認知過程接近,強化學習算法也是通用人工智能算法的一個強有力的候選。從2010年開始,隨著深度學習在人工智能領域的飛速發展,結合了深度學習模型和強化學習算法的深度強化學習算法也得到了飛速發展。深度強化學習算法具有強化學習算法對周圍環境的學習能力,同時還擁有深度模型強大的對數據的特征提取和擬合能力,它正被廣泛應用于各個領域。在一些原本認為人類占據優勢的領域(比如游戲領域),深度強化學習算法也逐漸打平甚至超越了人類的水平。例如,深度強化學習算法的高光時刻應該是AlphaGo在圍棋比賽中以較大的優勢贏得了人類世界冠軍的比賽。在引入深度學習模型后,AlphaGo使用的強化學習算法,也就是蒙特卡洛樹搜索算法的搜索能力有了顯著提高,甚至可以讓專業的運動員認為通過算法得到的某些棋子的落點是神來之筆,完全擺脫了人們對計算機算法呆板、不知變通的印象。當然,這些進展也有賴于硬件水平和算力的飛速提高。相信在不久的將來,隨著算力的繼續提高,人們可以開發出更復雜的深度學習模型,結合強化學習算法,最后逐漸逼近通用人工智能的理想。
作為一本深度強化學習的入門圖書,本書要解決的一大問題是如何幫助讀者快速學習相關領域的入門知識。一方面,筆者在初學強化學習算法的時候,看的書主要描述的都是強化學習的理論知識,關于算法見得最多的是描述算法如何實現的流程圖,相反很少涉及把算法轉化成具體的代碼內容。不同于一般的計算機算法,對于深度強化學習算法來說,實現細節是非常重要的,一些實現細節,比如特征提取、深度模型的超參數(如學習率、迷你批次大小等)對于模型的收斂至關重要。筆者在實現這些算法的過程中,很多情況下都會對具體的實現細節感到苦惱,常常需要仔細閱讀原始論文,甚至查看網上類似的實現,最后才能得到自己的能夠收斂的算法代碼。筆者覺得這些細節部分并非無關緊要,而是關乎算法在工程上是否能夠實現。如果講清楚了細節,很可能會為讀者節省寶貴時間,也能更好地幫助讀者理解深度強化學習算法需要解決的問題。另一方面,對于如何進行內容上的組織,筆者考慮再三,決定還是采取先理論基礎、后實踐的方式,在理論基礎方面,讀者可以隨意跳過一些覺得比較復雜的章節,先看具體的實現,等到需要回顧理論的時候再回頭參考相關的理論。最后,本文的參考內容除了少部分來源于教科書,大部分都來源于參考文獻,可以說盡可能提取這些參考文獻的精華部分,利用的參考文獻也盡可能新,除了一些經典算法,使用的參考文獻都是近五年來新的研究成果,筆者希望對最新的研究成果的歸納能夠對讀者把算法應用到實踐中有所啟發。
本書的另一個特點就是使用了PyTorch作為深度學習框架。作為一個成熟的深度學習框架,PyTorch的特點是使用方便,容易上手,而且容易和原生Python代碼集成(也就是所謂的“Pythonic”),筆者日常也比較偏愛這個深度學習框架,因此在撰寫本書的時候使用的是PyTorch來實現所有的強化學習算法。本書在成書時使用的PyTorch的版本是1.8,這個版本相對來說還是比較新的,但是筆者為了保持最大的向前兼容性,會盡可能避免使用最新的一些特性,理論上說,本書絕大部分代碼在PyTorch 1.0以上版本都能運行。另外,讀者如果希望對PyTorch進行快速入門,可以參考PyTorch官網的教程或者筆者之前的圖書《深入淺出PyTorch——從模型到源碼》。
本書配套的源代碼可以按照封底“讀者服務”的提示獲取。
最后,我想要感謝大家在成書過程中對我的支持和幫助,特別是電子工業出版社李利健編輯,在成書過程中給了我很大支持。還有我的師兄、師弟,以及業界的朋友,他們對本書的初稿提出了不少寶貴的意見。鑒于本書成書倉促,不免有錯漏之處,懇請讀者批評、指正。
張校捷
- Learn ECMAScript(Second Edition)
- Mastering NetBeans
- 程序員修煉之道:程序設計入門30講
- Machine Learning with R Cookbook(Second Edition)
- JavaScript+jQuery開發實戰
- Android NDK Beginner’s Guide
- PostgreSQL 11從入門到精通(視頻教學版)
- Spring+Spring MVC+MyBatis整合開發實戰
- Java網絡編程核心技術詳解(視頻微課版)
- C#程序設計(項目教學版)
- Java程序設計案例教程
- 大話Java:程序設計從入門到精通
- JavaScript動態網頁編程
- R語言數據可視化:科技圖表繪制
- 新印象:解構UI界面設計