6行代碼搞定基本的RL算法,速度圍觀Reddit高贊帖

2020-12-17 新智元

新智元報導

來源:reddit

編輯:張佳

【新智元導讀】今天和大家分享Reddit上的一個熱帖,樓主用PyTorch實現了基本的RL算法,而且每個算法都在一個文件夾中完成,即使沒有GPU,每個算法也可以在30秒內完成訓練。

近日,有開發人員用PyTorch實現了基本的RL算法,比如REINFORCE, vanilla actor-critic, DDPG, A3C, DQN 和PPO。這個帖子在Reddit論壇上獲得了195個贊並引發了熱議,一起來看一下吧。

特點如下:

每個算法都在一個文件中完成。

每個算法的長度可達100~150行代碼。

即使沒有GPU,每個算法也可以在30秒內完成訓練。

Envs固定在「CartPole-v1」上,你只需關注執行。

minimalRL-pytorch算法:

1. REINFORCE(66行)

2. TD Actor-Critic(97行)

3. DQN(113行,包括重放內存和目標網絡)

4. PPO(116行,包括GAE)

5. DDPG(149行,包括OU噪聲和軟目標更新)

6. A3C(116行)

7. 有什麼建議嗎?

依賴配置:

1. PyTorch

2. OpenAI GYM

使用:

# WorksonlywithPython 3.# e.g.python3REINFORCE.pypython3actor_critic.pypython3dqn.pypython3ppo.pypython3ddpg.pypython3a3c.py

評論中,不少朋友表示了對樓主的認可和感謝:

Dump7留言:「可以!這是我見過的最美的東西之一。我不是一個能用框架編寫NN的人。但我正在努力。這將在很大程度上幫助到我。謝謝你做了這個。但是你能為基本的CNN和RNN製作這樣的單一文件代碼嗎?」

CodeReclaimers表示:「謝謝你分享這個——我知道把代碼簡化到最少是很費事的。特別好的是,你的代碼將依賴配置控制在最低限度。通常都是,我去尋找可以學習的例子,要花至少30多分鐘來收集所有依賴配置,結果發現我的平臺上少了一些關鍵的東西。」

Reddit上的討論:

https://www.reddit.com/r/MachineLearning/comments/bt8sap/p_implementations_of_basic_rl_algorithms_with/

Github資源:

https://github.com/seungeunrho/minimalRL

相關焦點

  • 集合三大類無模型強化學習算法,BAIR開源RL代碼庫rlpyt
    近日,BAIR 發布了 rlpyt 代碼庫,利用三類算法之間的共性,在共享的優化基礎架構上構建了這三類算法的實現。而 rlpyt 僅使用了一個包含 24 塊 CPU(2x Intel Xeon Gold 6126)和 3 塊 Titan-Xp GPU 的工作站,以每秒 16000 的步數完成實現。對於無法使用分布式基礎架構的情況而言,這已經足夠執行實驗了。未來研究的一種可能是:利用多 GPU 優化增加 replay ratio,從而加快學習速度。
  • 入門 | 三行Python代碼,讓數據預處理速度提高2到6倍
    本文可以教你僅使用 3 行代碼,大大加快數據預處理的速度。Python 是機器學習領域內的首選程式語言,它易於使用,也有很多出色的庫來幫助你更快處理數據。但當我們面臨大量數據時,一些問題就會顯現……目前,大數據(Big Data)這個術語通常用於表示包含數十萬數據點的數據集。在這樣的尺度上,工作進程中加入任何額外的計算都需要時刻注意保持效率。
  • 三行Python代碼,讓數據處理速度提高2到6倍
    ,大大加快數據預處理的速度。這意味著如果沒有進行優化,在數據預處理的時候會出現「一核有難九核圍觀」的情況——超過 50% 的算力都會被浪費。在當前四核處理器(英特爾酷睿 i5)和 6 核處理器(英特爾酷睿 i7)大行其道的時候,這種情況會變得更加明顯。
  • 谷歌大腦重磅研究:快速可微分排序算法,速度快出一個數量級
    現在,谷歌大腦針對這一問題,提出了一種快速可微分排序算法,並且,時間複雜度達到了O(nlogn),空間複雜度達為O(n)。速度比現有方法快出一個數量級!代碼的PyTorch、TensorFlow和JAX版本即將開源。
  • reddit高贊資源:20h系統性深度學習&強化學習課程,視頻、PPT、代碼全都有 | 免費
    最近,一套深度學習和強化學習的免費課程在reddit上引起網友關注,獲贊690+。只因其不僅形式豐富,還綜合了基礎理論和具體應用,幫你將幾何學、統計學等相關理論串聯起來,解決複雜的問題。對於初學者來說,稱得上是個學習大禮包了。
  • IT行業裡,好的程式設計師一天應該寫多少行代碼?
    5樓當拿到一個項目,首先是設計框架和確定合適的算法。最後才是寫代碼。前兩項是核心,後面的豆子由程式設計師來做。你看應該寫多少代碼?大牛們寫代碼不是靠寫的多少來衡量的,而是代碼中體現出的解決問題的思路。而程式設計師的真實情況卻是這樣:每天大部分時間都在改代碼,寫代碼,看代碼才是我們真實的工作日常,到底每天要寫多少行才是好程式設計師呢?
  • 不足 20 行 Python 代碼,高效實現 k-means 均值聚類算法!
    k-means均值算法雖然是聚類算法中比較簡單的一種,卻包含了豐富的思想內容,非常適合作為初學者的入門習題。關於 k-means 均值聚類算法的原理介紹、實現代碼,網上有很多,但運行效率似乎都有點問題。今天稍微有點空閒,寫了一個不足20行的 k-means 均值聚類算法,1萬個樣本平均耗時20毫秒(10次均值)。同樣的數據樣本,網上流行的算法平均耗時3000毫秒(10次均值)。
  • 伯克利提出綜合深度強化學習工具包rlpyt,同時調和3個深度學習無模型算法
    目前大部分是無模型的算法(model-free),可以分為三個主要的類別:深度Q學習,策略梯度法和Q值策略梯度法。由於這三類算法基於不同的學習機制,聚焦於不同的控制問題,面對著離散或連續的行為序列,它們各自發展出了彼此獨立的研究路線,目前很少有可以同時調和這三個方向的代碼實現。
  • 並行算法庫清單: 附各算法代碼實例!
    【IT168 資訊】並行算法採用並行程式語言NESL實現,該語言是卡內基梅隆大學Scandal項目中開發的一種程式語言。對於每個算法,團隊給出了一個簡短的描述以及複雜性評估(就工作和深度而言)。  在很多情況下,NESL代碼已經設置完畢,可以使用FORMs基本接口來運行算法。隨意更改數據或算法,並提交修改後的版本。
  • 幾行代碼搞定ML模型,低代碼機器學習Python庫正式開源
    想提高機器學習實驗的效率,把更多精力放在解決業務問題而不是寫代碼上?低代碼平臺或許是個不錯的選擇。最近,機器之心發現了一個開源低代碼機器學習 Python 庫 PyCaret,它支持在「低代碼」環境中訓練和部署有監督以及無監督的機器學習模型。
  • 這個算法僅10行代碼,憑什麼躋身十大算法?
    Boosting,也被稱為提升法,是一種可以用來減小監督式學習中偏差的機器學習算法,可以做非常準確的預測,實現也非常簡單——其創始人說用10行代碼就可以實現。作為一種元算法框架,提升法幾乎可以應用於所有目前流行的機器學習算法來進一步加強原算法的預測精度,自1990年被羅伯特·夏皮雷(Robert E. Schapire)提出以來,應用十分廣泛,產生了極大的影響。
  • 面試不再怕,程式設計師大佬教你20行Python代碼,搞懂LRU算法
    LRU算法在後端工程師面試中,是一個比較常出現的題目,這篇文章帶大家一起,理解LRU算法,並最終用Python輕鬆實現一個基於LRU算法的緩存。緩存是什麼先看一張圖,當我們訪問網頁,瀏覽器會給伺服器發請求,伺服器會經過一系列的運算,把頁面返回給瀏覽器。
  • 使用DDPG解決四軸飛行器速度控制
    、速度控制任務、懸浮控制任務。blob/master/rlschool/quadrotor/demo/demo_velocity_control.gif懸浮控制任務 https://github.com/PaddlePaddle/RLSchool/blob/master/rlschool/quadrotor/demo/demo_velocity_control.gif
  • 詳解JAVA數據結構與算法:排序算法
    3) 常見的排序算法分類(見右圖):l算法的時間複雜度度量一個程序(算法)執行時間的兩種方法1) 事 後統計的方 法 這種方法可 行 , 但 是有兩個 問題 :一是要想對設計的算法的運行性能進行評測, 需要 實 際運 行該程序;二是所得時間的統計量依賴於計算機的硬體、軟體等環境因 素 , 這種方式,要在同一臺計算機的相同狀態下運行,才能比較哪個算法 速 度更快 。
  • 開源項目《LeeDeepRL-Notes》發布
    李宏毅老師的《深度強化學習》是強化學習領域經典的中文教程之一,Datawhale開源項目組成員總結了李宏毅的強化學習視頻,實現了視頻教程的完整梳理和復現。提起李宏毅老師,熟悉強化學習的讀者朋友一定不會陌生。很多人選擇的強化學習入門學習材料都是李宏毅老師的臺大公開課視頻。現在,強化學習愛好者有更完善的學習資料了!
  • 基本初等函數 指數函數 代碼篇
    本文首發於微信公眾號:"算法與編程之美",歡迎關注,及時了解更多此系列博客。由於機器學習和數學密切相關,尤其是數學中的函數,因此我們非常有必要複習和了解基本的函數知識。上一篇文章中,我們為大家介紹了基本初等函數中的指數函數 基本初等函數 指數函數,本文將為大家介紹如何利用python語言完成函數的繪製。
  • 一位 Google 程式設計師的算法學習之路
    應用說老實話,自從本科實習之後,我就一直覺得算法除了面試時能用用,其它基本用不上,甚至還寫了一篇當時頗為自得現在讀起來極為傻逼的文章來黑那些動不動就」基礎」或」內功」的所謂」大牛」們,這裡摘取一段現在看起來很傻逼但當時卻覺得是真理的文字:所以那些動則就扯什麼算法啊基礎啊內功啊所謂的大牛們,請閉上你的嘴,條條大道通羅馬。
  • 一位Google程式設計師的算法學習之路
    依然是以前的傻逼學習方法:反覆研讀+一遍又一遍的把代碼抄寫到本子上,艱難的完成了這兩本書後,又讀了相當數量的編程實踐(Programming Practice)書籍,自我感覺編程能力又大幅提升,此外獲得新技能——紙上編碼。這也成為了我之後找工作面試的三板斧之一。
  • 10 行代碼,實現手寫數字識別
    不過隨著機器學習技術的普及,使用10幾行代碼,實現一個能夠識別手寫數字的程序,並不是一件難事。這是因為有太多的機器學習模型可以拿來直接用,比如tensorflow、caffe,在python下都有現成的安裝包,寫一個識別數字的程序,10幾行代碼足夠了。
  • 六行代碼實現你的第一個機器學習程序!
    接下來步入正題:寫一個能區分蘋果和橘子的代碼,若寫出大量規則是行不通的,因為現實生活中充滿著不確定因素,制定的規則往往會被打破。所以我們需要一種算法能自動生成規則,這就需要訓練一個分類器classifier(可以認為是一種方法:接收輸入數據後給它們分配標籤labels作為輸出)。而用來實現分類器的技術稱為監督學習(Supervised Learning)。