來自本科生的暴擊:清華開源「天授」強化學習平臺,純PyTorch實現

2021-01-16 機器之心Pro

機器之心報導

項目作者:thu-ml

參與:思、肖清

訓練模型的極速,與 1500 行原始碼的精簡,清華大學新開源強化學習平臺「天授」。值得注意的是,該項目的兩位主要作者目前都是清華大學的本科生。

是否你也有這樣的感覺,成熟 ML 工具的源碼很難懂,各種繼承與處理關係需要花很多時間一點點理清。在清華大學開源的「天授」項目中,它以極簡的代碼實現了很多極速的強化學習算法。重點是,天授框架的源碼很容易懂,不會有太複雜的邏輯關係。

項目地址:https://github.com/thu-ml/tianshou

天授(Tianshou)是純 基於 PyTorch 代碼的強化學習框架,與目前現有基於 TensorFlow 的強化學習庫不同,天授的類繼承並不複雜,API 也不是很繁瑣。最重要的是,天授的訓練速度非常快,我們試用 Pythonic 的 API 就能快速構建與訓練 RL 智能體。

目前天授支持的 RL 算法有如下幾種:

Policy Gradient (PG)Deep Q-Network (DQN)Double DQN (DDQN) with n-step returnsAdvantage Actor-Critic (A2C)Deep Deterministic Policy Gradient (DDPG)Proximal Policy Optimization (PPO)Twin Delayed DDPG (TD3)Soft Actor-Critic (SAC)另外,對於以上代碼天授還支持並行收集樣本,並且所有算法均統一改寫為基於 replay-buffer 的形式。

速度與輕量:「天授」的靈魂

天授旨在提供一個高速、輕量化的 RL 開源平臺。下圖為天授與各大知名 RL 開源平臺在 CartPole 與 Pendulum 環境下的速度對比。所有代碼均在配置為 i7-8750H + GTX1060 的同一臺筆記本電腦上進行測試。值得注意的是,天授實現的 VPG(vanilla policy gradient)算法在 CartPole-v0 任務中,訓練用時僅為 3 秒。

以上測試使用了 10 個不同的 seed。CartPole 和 Pendulum 任務中的累積獎賞閾值分別設置為 195.0 與-250.0。可能會有讀者感覺這兩個任務比較簡單,不太能突出框架的優勢。該項目也表示,在這幾天內,他們會更新天授在 Atari Pong / Mujoco 任務上的性能。

天授,只需 1500 行代碼

非常令人驚訝的是,天授平臺整體代碼量不到 1500 行,其實現的 RL 算法大多數都少於百行代碼。單從數量上來說,這樣的代碼量已經非常精簡了,各種類與函數之間的關係應該也容易把握住。

項目表示,天授雖然代碼量少,但可讀性並不會有損失。我們可以快速瀏覽整個框架,並理解運行的流程與策略到底是什麼樣的。該項目提供了很多靈活的 API,例如可以便捷地使用如下代碼令策略與環境交互 n 步:

result = collector.collect(n_step=n)

或者,如果你想通過採樣的批量數據訓練給定的策略,可以這樣寫:

result = policy.learn(collector.sample(batch_size))

正是通過大量精簡的 API 構造 RL 模型,天授才能保持在 1500 行代碼內。例如我們可以看看 DQN 的模型代碼,它是非常流行的一種強化學習模型,在天授內部,DQN 模型真的只用了 99 行代碼就完成了。當然,這 99 行代碼是不包含其它公用代碼塊的。

如下為 DQN 的主要代碼結構,我們省略了部分具體代碼,各個 RL 策略都會繼承基本類的結構,然後重寫就夠了。可以發現,在常規地定義好模型後,傳入這個類就能創建策略。DQN 策略的各種操作都會寫在一起,後續配置 Collector 後就能直接訓練。

項目作者把所有策略算法都模塊化為 4 部分:

__init__:初始化策略process_fn:從 replay buffer 中處理數據__call__:給定環境觀察結果計算對應行動learn:給定批量數據學習策略

實際體

天授很容易安裝,直接運行「pip install tianshou」就可以。下面我們將該項目克隆到本地,實際測試一下。

!git clone https://github.com/thu-ml/tianshou!pip3 install tianshouimport osos.chdir('tianshou')

該項目在 test 文件夾下提供了諸多算法的測試示例,下面我們在 CartPole 任務下逐個測試一番。

!python test/discrete/test_pg.py

!python test/discrete/test_ppo.py

!python test/discrete/test_a2c.py

!python test/discrete/test_dqn.py

以上分別為 VPG、PPO、A2C 與 DQN 在 P100 GPU 上的訓練結果。可以看到,我們的測試結果與項目提供的結果出入不大。

由於 CartPole 任務在強化學習中相對簡單,相當於圖像識別中的 MNIST。為更進一步測試該 RL 框架的性能,我們也在 MinitaurBulletEnv-v0 任務中對其進行了測試。

Minitaur 是 PyBullet 環境中一個四足機器人運動控制任務,其觀測值為該機器人的位置、姿態等 28 個狀態信息,控制輸入為電機的轉矩(每條腿 2 個電機,總共 8 個電機),策略優化的目標為最大化機器人移動速度的同時最小化能量消耗。也就是說,agent 需要根據獎賞值自主地學習到由 28 個狀態信息到 8 個控制輸入的映射關係。

使用 SAC 算法在 Minitaur 任務中的訓練結果如下圖所示:

需要注意的是,天授的 SAC 實現在 Minitaur 任務中僅訓練了不到 200k 步即能獲得以上控制策略,效果可以說是很不錯的。

項目作者,清華本科生

在 GitHub 中,其展示了該項目的主要作者是 Jiayi Weng 與 Minghao Zhang,他們都是清華的本科生。其中 Jiayi Weng 今年 6 月份本科畢業,在此之前作為本科研究者與清華大學蘇航、朱軍等老師開展強化學習領域的相關研究。Minghao Zhang 目前是清華大學軟體學院的本科二年級學生,同時還修了數學專業。

作為本科生,該項目的兩位作者已經有了非常豐富的研究經驗,Jiayi Weng 去年夏季就作為訪問學生到訪 MILA 實驗室,並與 Yoshua Bengio 開展了關於意識先驗相關的研究。在 Jiayi Weng 的主頁中,我們可以看到在本科期間已經發了 IJCAI 的 Oral 論文。

Minghao Zhang 也有豐富的研究經驗,之前他在軟體學院 iMoon Lab 做關於 3D 視覺相關的研究,而後目前在清華交叉信息學院做研究助理,從事強化學習方面的研究。儘管離畢業還有不短的時間,Minghao Zhang 已經做出了自己的研究成果。

所以綜合來看,因為在本科已經有了豐富的科研經驗,並且做過多個項目,那麼在這個階段能做一個非常不錯的強化學習開源項目也就理所當然了。

接下來的工作

天授目前還處於初期開發階段,尚有一些未實現的功能或有待完善的地方。項目作者表示今後主要在以下幾個方面來完善該 RL 框架:

Prioritized replay bufferRNN supportImitation LearningMulti-agentDistributed training它們分別是提供更多 RL 環境的 benchmark、優先經驗回放、循環神經網絡支持、模仿學習、多智能體學習以及分布式訓練。

相關焦點

  • 新智元專訪:清華大學深度強化學習框架「天授」開源|900星
    天授的核心開發者接受了新智元專訪,團隊成員著重強調了天授系統的5大技術優勢:代碼簡潔、模塊化、可復現性、接口靈活以及訓練速度快。相較於其他PyTorch強化學習框架,天授0.2具有結構簡單、二次開發友好的特點,整個框架代碼1500行左右,支持主流的強化學習算法DQN、A2C等,同時設計了靈活的接口,用戶可以定製自己的訓練方法。
  • 來自本科生的暴擊:進騰訊的大牛開源LeetCode刷題經驗
    所以在制定計劃的時候可以讓這個計劃變得更「有趣"和針對性,讓它看起來更容易實現一點,才會更容易堅持。以「兩數相加」為例。」部分便是關於這道題目的解答。」獲取下載地址。以上就是來自普通本科生的暴擊,感謝閱讀!
  • 強化學習如何真正實現任務自動化?不妨試試「兩步走」策略
    雷鋒網 AI 科技評論按:作為行為主義學派的重要技術,近年來,強化學習在 Atari 遊戲領域大放異彩。然而,人們要想將強化學習技術真正應用於現實世界任務,還有很長的一段路要走。本文將真實世界強化學習任務抽象為「簡化」和「求解」的兩個步驟,從馬爾科夫決策過程的角度,討論了普適性的基於強化學習的自動化技術。
  • 深度強化學習入門難?這份資料手把手教會你
    機器之心整理參與:一鳴深度強化學習在機器學習領域的熱度一直很高。最近,GitHub 開源了一份深度強化學習的教程,總結了從 DQN 到彩虹模型的理論和代碼實現。讀者朋友可以根據需要學習研究。教程代碼基於 PyTorch,可在 Colab 中運行。深度強化學習是強化學習中的重要研究領域。
  • 深度強化學習走入「死胡同」,繼續死磕電子遊戲還是另闢蹊徑?
    有無數的報告記錄了深度強化學習模型做出的各種意想不到的動作。強化學習通常被劃分為除監督機器學習和無監督機器學習以外的第三類,但在我看來,它其實就是監督學習。當前的強化學習實現步驟是這樣的:你開始訓練模型,然後你看著它失敗然後「死掉」,接著你花費大量的時間一次又一次調整獎勵函數,直到你「有可能」得到一個理想的結果,但僅僅是「有可能」。
  • 使用PyTorch進行主動遷移學習:讓模型預測自身的錯誤
    本文詳細說明主動遷移學習, 它是主動學習和遷移學習技術的結合,本文將實現書籍  Human-in-the-Loop Machine Learning 中的所有用到 PyTorch 的方法。,你應該在接觸本文中更高級的方法之前,親自嘗試實現更簡單的主動學習策略。
  • 重磅| Torch7團隊開源PyTorch:Python優先的深度學習框架
    據官網介紹,PyTorch 是一個 Python 優先的深度學習框架,能夠在強大的 GPU 加速基礎上實現張量和動態神經網絡。PyTorch 介紹在粒度層面(granular level)上,PyTorch 庫包含了以下組件:使用 PyTorch 的原因通常有二:作為 numpy 的替代,以便使用強大的 GPU;將其作為一個能提供最大的靈活性和速度的深度學習研究平臺。
  • 寫給純小白的深度學習環境搭建寶典:pytorch+tensorflow
    每天給小編五分鐘,小編用自己的代碼,讓你輕鬆學習人工智慧。本文將手把手帶你快速搭建你自己的深度學習環境,然後實現自己的第一個深度學習程序。野蠻智能,小白也能看懂的人工智慧。如果你對循環神經網絡的基本原理還不了解,可以通過小編的精講深度學習RNN三大核心點,三分鐘掌握循環神經網絡進行簡單了解。下面進入實戰環節。
  • 深度學習框架 PyTorch 為何值得學
    PyTorch 強調從研究到生產來源:https://pytorch.org根據官網介紹,PyTorch 是一個開源的深度學習平臺,提供從研究原型到生產部署的無縫路徑(An open source2018 年 4 月,PyTorch V 0.4.0 發布,新特性包括 Tensor 和 Variable 合併,強化 Numpy 風格的 Tensor 構建等,並正式支持 Windows 系統。
  • Torch7 開源 PyTorch:Python 優先深度學習框架
    據官網介紹,PyTorch 是一個 Python 優先的深度學習框架,能夠在強大的 GPU 加速基礎上實現張量和動態神經網絡。PyTorch 是一個 Python 軟體包,其提供了兩種高層面的功能:如有需要,你也可以復用你最喜歡的 Python 軟體包(如 numpy、scipy 和 Cython)來擴展 PyTorch。
  • 奔馳純電平臺發布,但2025之前還有一半「油改電」
    奔馳純電平臺發布,但2025之前還有一半「油改電」雅斯頓我要分享「汽車發明者再次發明汽車」這句口號曾經在奔馳推出首款純電動SUV奔馳EQC時飽受質疑。但是,EQC仍然很難跳出「油改電」的框架,比如它的空間與燃油車相當,但是放在純電動車領域毫無優勢;比如它無法放下更大的電池包,續航低於市場預期;比如純電系統讓它的靜謐性高於傳統豪華車,但是因為改變了底盤結構,導致駕駛質感打折。而更重要的一點是,從燃油車平臺升級而來的奔馳EQC,在產品性能和質感上沒有達到跨級別的變化,但是定價早已上升了一個臺階。
  • 清華開源遷移學習算法庫:基於PyTorch實現,支持輕鬆調用已有算法
    清華大學大數據研究中心機器學習研究部長期致力於遷移學習研究。近日,該課題部開源了一個基於 PyTorch 實現的高效簡潔遷移學習算法庫:Transfer-Learn。使用該庫,可以輕鬆開發新算法,或使用現有算法。
  • PyTorch為何如此高效好用?來探尋深度學習框架的內部架構
    C/C++中 Python 擴展對象的簡介你可能知道可以藉助 C/C++擴展 Python,並開發所謂的「擴展」。PyTorch 的所有繁重工作由 C/C++實現,而不是純 Python。tensorFromBlob() 方法將創建一個新張量,但只有在為這一張量創建一個新「存儲」之後。存儲是指存儲數據指針的地方,它並不在張量結構內部。張量存儲正是我們下一節要討論的內容。張量存儲張量的實際原始數據並不是立即保存在張量結構中,而是保存在我們稱之為「存儲(Storage)」的地方,它是張量結構的一部分。
  • 探索新的強化學習算法遇到困難?不怕不怕,谷歌為你帶來「多巴胺」
    雷鋒網 AI 科技評論按:強化學習的研究如此火熱,但強化學習的研究中又有如此之多的實踐上的困難。「工欲善其事,必先利其器」,谷歌就推出了一個強化學習研究專用的框架幫自己減負、加速。雷鋒網 AI 科技評論把谷歌的介紹博客編譯如下。在過去的幾年中,強化學習研究中湧現了許多重大技術進展。
  • OpenAI全面擁抱PyTorch,TensorFlow:我哪裡比不上它?
    通過標準化的 PyTorch 框架,OpenAI 可以建立起基於它的平臺,使得自家的各種模型和應用都能進行框架和工具的復用。另外一個選擇 PyTorch 的重要原因是:用它來實現各種新的想法特別容易,特別是在 GPU 集群上。OpenAI 在博客中說,自從選擇了 PyTorch,他們可以將研究思路到生成模型的迭代開發時間從周壓縮到天。
  • Pytorch編寫代碼基本步驟思想
    一、前言在我們要用pytorch構建自己的深度學習模型的時候,基本上都是下面這個流程步驟,寫在這裡讓一些新手童鞋學習的時候有一個大局感覺,無論是從自己寫,還是閱讀他人代碼,按照這個步驟思想(默念4大步驟,找數據定義、找model定義、(找損失函數、優化器定義),主循環代碼邏輯),直接去找對應的代碼塊,會簡單很多。
  • Caffe2 代碼全部併入 PyTorch:深度學習框架格局劇震
    昨日,Caffe2 的 Github 頁面突然出現了一個「巨大的改動」:Caffe2 開原始碼正式併入 PyTorch,至此,Facebook 主力支持的兩大深度學習框架已合二為一。
  • 圖靈獎得主力推:PyTorch 1.3 今天發布
    本次更新最大的亮點在於對行動裝置的支持、挑戰傳統張量的「命名張量」,以及更好的性能改進。今天,PyTorch1.3 發布了。圖靈獎得主,被譽為「深度學習三座山頭」之一的 LeCun 發推稱讚。本次 PyTorch1.3 更新增加了很多的新特性,包括無縫行動裝置部署、量化模型以加速推斷、前端改進(如對張量進行命名和創建更乾淨的代碼)。
  • PyTorch 1.7發布,支持CUDA 11、Windows分布式訓練
    開發者對 PyTorch 1.7 的態度有開發者對 PyTorch 1.7「支持 Windows 上的分布式訓練」這一新功能表示讚賞:以及樂見於「PyTorch 對 CUDA 11 的支持」:依然有人趁機表白 PyTorch,並列出偏好 PyTorch 的原因,如報錯易讀、代碼直觀、易於實驗。
  • pytorch深度學習一
    pytorch最近正在學習深度學習相關的課程,近幾年深度學習可謂十分火熱,不論是在工業界還是學術界都想往深度學習上靠一靠,甚至是在隔壁的機械學院都有很多實驗室研究深度學習,近期也是實驗室的要求,我也要完成學習pytorch