-
當前位置:首頁 > 創(chuàng)意學院 > 技術 > 專題列表 > 正文
openai社區(qū)(openanolis 社區(qū))
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于openai社區(qū)的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
ChatGPT國內免費在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關鍵詞,就能返回你想要的內容,越精準,寫出的就越詳細,有微信小程序端、在線網頁版、PC客戶端
本文目錄:
一、一個pytorch的bug,居然能讓整個Python社區(qū)崩潰?
明敏 發(fā)自 凹非寺
量子位 報道 | 公眾號 QbitAI
到底是怎樣的一個bug,能讓95%的Pytorch庫中招,就連特斯拉AI總監(jiān)深受困擾?
還別說,這個bug雖小,但有夠“狡猾”的。
這就是最近Reddit上熱議的一個話題,是一位網友在使用再平常不過的Pytorch+Numpy組合時發(fā)現。
最主要的是,在代碼能夠跑通的情況下,它甚至還會影響模型的準確率!
除此之外,網友熱議的另外一個點,竟然是:
而是它到底算不算一個bug?
這究竟是怎么一回事?
事情的起因是一位網友發(fā)現,在PyTorch中用NumPy來生成隨機數時,受到數據預處理的限制,會多進程并行加載數據,但最后每個進程返回的隨機數卻是相同的。
他還舉出例子證實了自己的說法。
如下是一個示例數據集,它會返回三個元素的隨機向量。這里采用的批量大小分別為2,工作進程為4個。
然后神奇的事情發(fā)生了:每個進程返回的隨機數都是一樣的。
這個結果會著實讓人有點一頭霧水,就好像數學應用題求小明走一段路程需要花費多少時間,而你卻算出來了負數。
發(fā)現了問題后,這位網友還在GitHub上下載了超過10萬個PyTorch庫,用同樣的方法產生隨機數。
結果更加令人震驚:居然有超過95%的庫都受到這個問題的困擾!
這其中不乏PyTorch的官方教程和OpenAI的代碼,連特斯拉AI總監(jiān)Karpathy也承認自己“被坑過”!
但有一說一,這個bug想要解決也不難:只需要在每個epoch都重新設置seed,或者用python內置的隨機數生成器就可以避免這個問題。
到底是不是bug?
如果這個問題已經可以解決,為什么還會引起如此大的討論呢?
因為網友們的重點已經上升到了“哲學”層面:
這到底是不是一個bug?
在Reddit上有人認為:這不是一個bug。
雖然這個問題非常常見,但它并不算是一個bug,而是一個在調試時不可以忽略的點。
就是這個觀點,激起了千層浪花,許多人都認為他忽略了問題的關鍵所在。
這不是產生偽隨機數的問題,也不是numpy的問題,問題的核心是在于PyTorch中的DataLoader的實現
對于包含隨機轉換的數據加載pipeline,這意味著每個worker都將選擇“相同”的轉換。而現在NN中的許多數據加載pipeline,都使用某種類型的隨機轉換來進行數據增強,所以不重新初始化可能是一個預設。
另一位網友也表示這個bug其實是在預設程序下運行才出現的,應該向更多用戶指出來。
并且95%以上的Pytorch庫受此困擾,也絕不是危言聳聽。
有人就分享出了自己此前的慘痛經歷:
我認識到這一點是之前跑了許多進程來創(chuàng)建數據集時,然而發(fā)現其中一半的數據是重復的,之后花了很長的時間才發(fā)現哪里出了問題。
也有用戶補充說,如果 95% 以上的用戶使用時出現錯誤,那么代碼就是錯的。
順便一提,這提供了Karpathy定律的另一個例子:即使你搞砸了一些非?;敬a,“neural nets want to work”。
你有踩過PyTorch的坑嗎?
如上的bug并不是偶然,隨著用PyTorch的人越來越多,被發(fā)現的bug也就越來越多,某乎上還有PyTorch的坑之總結,被瀏覽量高達49w。
其中從向量、函數到model.train(),無論是真bug還是自己出了bug,大家的血淚史還真的是各有千秋。
所以,關于PyTorch你可以分享的經驗血淚史嗎?
歡迎評論區(qū)留言討論~
參考鏈接:
[1]https://tanelp.github.io/posts/a-bug-that-plagues-thousands-of-open-source-ml-projects/
[2]https://www.reddit.com/r/MachineLearning/comments/mocpgj/p_using_pytorch_numpy_a_bug_that_plagues/
[3]https://www.zhihu.com/question/67209417/answer/866488638
— 完 —
二、特斯拉自動駕駛儀3D技術將成為即將爆發(fā)的新引擎
摘要
1. 特斯拉即將發(fā)布的3D更新將增加AI輔助駕駛功能。
2. 未能意識到特斯拉在自動駕駛技術上的競爭優(yōu)勢的分析師和投資者,將會突然覺醒。
3.大多數金融模型仍將特斯拉視為傳統(tǒng)的 汽車 制造商,但這在未來將不再適用。
分析師和投資者系統(tǒng)性地低估了特斯拉(Tesla)在自動駕駛領域的競爭地位。對競爭環(huán)境的評估過于依賴于對演示視頻中自動駕駛 汽車 性能的定性判斷,以及其他公關、營銷和品牌塑造活動。從 歷史 上看,被指派到特斯拉的賣方分析師大多是 汽車 分析師,這意味著他們沒有時間或精力深度學習和研究機器人技術。這意味著特斯拉的自主優(yōu)勢正在被低估,或者根本無法在市場上定價。
在我撰寫關于特斯拉的文章的三年中,我一直堅持認為數據規(guī)模比幾乎所有其他事情都重要。我也一次又一次地指出,認為特斯拉在自動駕駛方面的進展將是平穩(wěn)而持續(xù)的,而不是磕磕絆絆、斷斷續(xù)續(xù)的。我推測,深度學習研發(fā)有兩個階段。數據收集和標記階段可能相對快速。速度取決于公司在野外擁有的機器人數量以及它雇傭的數據標簽工人數量。
接下來是一個緩慢而不可預測的階段,人工智能科學家和工程師致力于構建一個系統(tǒng),以適當的時間、合適的力度攝取標簽數據并輸出有用的機器人行為,比如轉向、加速和剎車。獲取數據就像給油箱加油。AI科學家和工程師的工作就像制造引擎一樣。從里程表的角度來看,進展可能是什么都沒有,然后,在一瞬間,點火開關被打開, 汽車 就啟動了。
AI非線性發(fā)展的一個顯著例子就是OpenAI在經典視頻 游戲 Montezuma's Revenge上的突破。這張圖表說明了一切:
在這種情況下,數據是從 游戲 中收集并自動標記,因此數據集創(chuàng)建階段要比科學和工程階段快得多。此外,蒙特祖瑪(Montezuma)的復仇在AI社區(qū)的整體進展也不是順利和持續(xù)的。
特斯拉在路上有超過90萬個機器人。在美國,其所有競爭對手的合計機器人數量不到2000輛,而且鑒于大多數測試都在美國進行,因此全球總數可能不會高很多。深度神經網絡的性能可預測地隨著數據的變化而變化,這樣的數據優(yōu)勢可以產生2倍到30倍的性能優(yōu)勢。
一個重要的警告是,數據需要手動或自動地標記。正如我所寫的那樣,特斯拉有許多很有前途的選擇來自動標記數據,并使用其龐大的車隊來使手動數據標記更加高效。(也就是說,在同樣的人力資源中獲得更多的神經網絡性能。)特斯拉的AI科學家和工程師面臨的挑戰(zhàn)是,尋求這些選擇,并讓它們在商業(yè)規(guī)模上像在概念的學術證明中那樣發(fā)揮作用。換句話說,就是制造一個能使用充足的燃料運行的引擎。
走向3D
顯然,特斯拉AI團隊目前最重要的工作是將計算機視覺從2D范式轉換為3D范式。埃隆·馬斯克(Elon Musk)在特斯拉第三行播客中首次描述了這一概念:
馬斯克最近詳細闡述了這一轉變所涉及的工作:
“Whole Mars
@WholeMarsBlog
回復@elonmusk @romanhistory1和@HardcoreHistory
自動駕駛儀的重寫怎么樣了?
你們叫它 PlaidNet么?
Elon Musk
@elonmusk
順利。團隊很出色,和他們一起工作是一種榮耀。幾乎所有的東西都需要重寫,包括我們的標簽軟件,所以從訓練到推理的每一步都是“3D”的。
2020年7月2日凌晨4:54”
2020年7月2日
回復了@elonmusk @WholeMarsBlog和其他兩個博客
反向召喚有什么更新嗎?
Elon Musk
@elonmusk
當我們轉換到新的軟件棧時,許多功能將同時發(fā)生。最有可能的是,它將在2到4個月內發(fā)布。接下來的問題是,什么樣的功能被證明足夠安全,可以讓用戶使用。
從2D到3D的轉變意味著什么?就我所能猜測到的來說,這與傳感器數據表示為神經網絡有關。
LiDAR激光脈沖通過在光線撞擊物體并返回傳感器時創(chuàng)建一個點來創(chuàng)建周圍物體的3D表示。世界的3D表示稱為點云。
2018年,來自康奈爾大學的計算機視覺研究人員(包括王燕和趙衛(wèi)麟)發(fā)表了一份預印本,顯示可以使用相機來創(chuàng)建3D點云,更重要的是,使用這種形式的表示方式不是2D圖像提高了神經網絡使用相機預測深度的能力。相機可以通過立體視覺獲得點,這也是人類和其他哺乳動物在一定距離下感知深度的方式。事實證明,使LiDAR(激光雷達)如此有效的不僅僅在于激光器,還有將LiDAR(激光雷達)輸入解析為點云的常見做法。Wang等人將利用相機生成點云的方法稱為“偽LiDAR(激光雷達)”。自2018年以來,其他研究人員也在此基礎上開展了研究。
如今,至少在某些學術基準上,偽LiDAR及其相關方法(如偽LiDAR ++和ViDAR(代表可視LiDAR或視頻LiDAR))在3D對象檢測和深度估計上與匹配LiDAR非常接近。據我了解,偽LiDAR ++的準確度大約是流行的KITTI Vision基準上LiDAR的三分之一。
今年早些時候,特斯拉的AI高級總監(jiān)安德烈·卡帕西(Andrej Karpathy)公開透露,特斯拉目前正在研究一種用于深度估算的偽LiDAR方法。回到2019年的自治日(Autonomy Day ),卡帕西演示了通過立體視覺獲得的3D深度信息:
在他最近的演講中,Karpathy分享了3D表示與2D表示中獲得的準確性的一小部分。這些可視化顯示了路緣檢測,左側是“ground truth”(可能來自LiDAR),右側是使用2D表示的基于攝像頭的檢測,中間是使用3D表示的基于攝像頭的檢測:
如果這一定性的結果真正代表了特斯拉的整體性能提升,那么3D更新必將給特斯拉的AI輔助駕駛軟件帶來巨大的改進。從外部來看,這種改善會出現突發(fā)性和斷續(xù)性。
錢來了
談到特斯拉和自治(autonomy)方面,大多數分析師和投資者采取的是“我看到就相信”的態(tài)度。當然,這是他們的權利,但在我看來,這意味著低估了特斯拉在2021年及以后的收益和現金流。在實現完全的自動駕駛之前,特斯拉將繼續(xù)大力推進AI輔助駕駛。特斯拉已經可以在紅綠燈和停車標志前自動停車:
AI輔助駕駛可以說是特斯拉使用者最喜歡的功能,也是特斯拉和其他 汽車 之間最明顯的區(qū)別。與之競爭的 汽車 制造商在實施無線軟件更新這樣的基礎技術方面進展緩慢,據我所知,還沒有一家公司像特斯拉那樣,公開宣布計劃圍繞其 汽車 生產建立一個深度學習渠道。我相信,2021年以后,差異化軟件將為特斯拉 汽車 帶來更多需求。
對于沒有其他附加組件的Model 3 Standard Range Plus,售價8,000美元的“完全自動駕駛功能”選項為購買價格的17%。這是一筆高利潤收入,因為下載軟件的邊際成本可以忽略不計。馬斯克多次表示,隨著功能的增加,價格將會上漲。此外,特斯拉計劃以每月訂購的形式銷售該軟件。這必將擴大客戶基礎。
AI輔助駕駛軟件帶來的收入不斷增長,意味著分析師們應該考慮特斯拉的預期利潤率,而不是僅與其業(yè)內同行進行比較。此外,特斯拉在軟件方面的優(yōu)勢證明了樂觀的增長假設。
摩根士丹利(Morgan Stanley)的亞當·喬納斯(Adam Jonas)最近發(fā)布了特斯拉2030年 汽車 銷量為600萬輛的看漲預測,認為特斯拉的股價將上漲2070美元。在我看來,考慮到特斯拉正步入 汽車 公司與人工智能(AI)和機器人公司之間的灰色地帶,這種2030年的銷量水平是合理的。目前尚不清楚,競爭對手如何能將 汽車 制造能力、軟件和人工智能能力迅速合并,以減緩特斯拉目前的高速增長軌跡。因此,即使股價在1400美元左右,我仍然認為該股仍有很大的上漲空間。
我們還可以考慮 汽車 銷售以外的問題。我預計,在“3D更新”向客戶推出后,會有更多的分析師和投資者開始認真考慮機器人(robotaxis)出租車。雖然鑒于這種不確定性,很難知道如何為機器人出租車(robotaxis)的機會定價。然而,私人市場投資者已經通過Waymo (GOOG, GOOGL)和Cruise (GM)成功做到了這一點。為什么特斯拉無法在公眾市場上做到這一點呢?
注:我/我們是long TSLA。這篇文章是我自己寫的,表達了我自己的觀點。我沒有因此得到補償(除了尋求阿爾法)。我和本文中提到的任何公司都沒有業(yè)務關系。
英文原文:https://seekingalpha.com/article/4357831-tesla-autopilot-3d-update-will-be-significant-stock-catalyst?li_source=LI&li_medium=liftigniter-widget
(未經同意,請勿轉載)
三、程序員們說說看:TensorFlow到底難不難學?
強化學習的進展速度遠遠低于深度學習。 雖然OpenAI Five和谷歌的AlphaGo等有值得注意的新聞突破,但實際情況下的強化學習實踐并未發(fā)生。
正如谷歌AI的團隊在這篇博文中提到的那樣,開發(fā)這類算法需要大量的實驗而沒有任何明確的方向。 不幸的是,大多數現有的框架都沒有這種靈活性。 如果你在這個領域工作或研究過,你就知道重現現有方法有多困難(如果不是不可能的話)。
因此,為了幫助加速研究,并希望讓社區(qū)更多地參與強化學習,Google AI團隊開放了一個名為Dopamine的TensorFlow框架,旨在通過使其更靈活和可重復性來創(chuàng)建研究。 根據團隊的官方文檔,他們的設計原則是:
簡單的實驗:幫助新用戶運行基準實驗
靈活的開發(fā):為新用戶提供新的創(chuàng)新想法
緊湊和可靠:為一些較舊和更流行的算法提供實現
可重復:確保結果可重復
意識到新人們根據基準檢查結果的重要性,研究人員還發(fā)布了整個培訓數據。 它可用作Python pickle文件,JSON文件和用戶可以可視化每個訓練迭代的網站。
我們對此有所了解
請注意,DeepMind對多巴胺的研究與Google AI的這項工作無關。 雖然兩者都在很大程度上植根于強化學習,但Google AI通過公開采購的方式參與了整個社區(qū)。 它肯定有助于它以TensorFlow為基礎,這是深度學習社區(qū)中每個人都熟悉的框架。
強化學習可能是一個令人生畏的主題,但我鼓勵大家嘗試一下。 這個領域仍然具有潛力,并將在未來幾年取得很大進展。 這是一個很好的入門資源,您也可以參考我們的文章了解初學者。
如果你想更加了解TensorFlow,或者說想實踐一下人工智能項目,谷歌的另一款工具或許可以幫到你,也就是谷歌的AIY Projects 項目。
在2017 年上半年,谷歌宣布了一個新的開源計劃--AIY Projects(AIY計劃),其目標是讓每個Maker(創(chuàng)客)都能DIY自己的 AI 人工智能產品,讓更多人能學習、探索并體驗人工智能。 AIY 全稱是 Artificial Intelligence Yourself ,顧名思義就是利用 AI 來進行的 DIY 功能套件。借助 AIY 項目,創(chuàng)客可以利用人工智能來實現更像人與人交流的人機交互。谷歌目前為 AIY Projects 推出了兩款硬件產品--AIY Voice Kit 和 AIY Vision Kit。
AIY Vision Kit(視覺套件)是一套簡單的計算機視覺系統(tǒng),可運行 3 種基于 TensorFlow 的類神經網路模型應用程序。
這次 AIY 計劃推出兩款新品,Edge TPU 是谷歌專用的 ASIC 芯片,專為在 Edge 運行 TensorFlow Lite ML 模型而設計, 用來處理 AI 預測部分。它的特點是比訓練模型的計算強度要小。而且 Edge TPU 還可以自己運行計算,不需要與多臺強大計算機相連,因此應用程序可以更快、更可靠地工作。它們可以在傳感器或網關設備中與標準芯片或微控制器共同處理 AI 工作。 針對Edge TPU的新設備是:AIY Edge TPU Dev 開發(fā)板和 AIY Edge TPU 加速器,二者皆采用 Google 的 Edge TPU 芯片。
四、TensorForce是怎樣煉成的
TensorForce是怎樣煉成的
本文將圍繞一個實際的問題進行介紹:應用強化學習的社區(qū)可以如何從對腳本和單個案例的收集更進一步,實現一個強化學習 API——一個用于強化學習的 tf-learn 或 skikit-learn?在討論 TensorForce 框架之前,我們將談一談啟發(fā)了這個項目的觀察和思想。如果你只想了解這個 API,你可以跳過這一部分。我們要強調一下:這篇文章并不包含對深度強化學習本身的介紹,也沒有提出什么新模型或談論最新的最佳算法,因此對于純研究者來說,這篇文章可能并不會那么有趣。
開發(fā)動機
假設你是計算機系統(tǒng)、自然語言處理或其它應用領域的研究者,你一定對強化學習有一些基本的了解,并且有興趣將深度強化學習(deep RL)用來控制你的系統(tǒng)的某些方面。
對深度強化學習、DQN、vanilla 策略梯度、A3C 等介紹文章已經有很多了,比如 Karpathy 的文章對策略梯度方法背后的直觀思想就進行了很好的描述。另外,你也能找到很多可以幫助上手的代碼,比如 OpenAI 上手智能體、rllab以及 GitHub 上許多特定的算法。
但是,我們發(fā)現在強化學習的研究框架開發(fā)和實際應用之間還存在一個巨大的鴻溝。在實際應用時,我們可能會面臨如下的問題:
•強化學習邏輯與模擬句柄的緊密耦合:模擬環(huán)境 API 是非常方便的,比如,它們讓我們可以創(chuàng)建一個環(huán)境對象然后將其用于一個 for 循環(huán)中,同時還能管理其內部的更新邏輯(比如:通過收集輸出特征)。如果我們的目標是評估一個強化學習思想,那么這就是合理的,但將強化學習代碼和模擬環(huán)境分開則要艱難得多。它還涉及到流程控制的問題:當環(huán)境就緒后,強化學習代碼可以調用它嗎?或者當環(huán)境需要決策時,它會調用強化學習智能體嗎?對于在許多領域中實現的應用強化學習庫,我們往往需要后者。
•固定的網絡架構:大多數實現案例都包含了硬編碼的神經網絡架構。這通常并不是一個大問題,因為我們可以很直接地按照需求加入或移除不同的網絡層。盡管如此,如果有一個強化學習庫能夠提供聲明式接口的功能,而無需修改庫代碼,那么情況就會好得多。此外,在有的案例中,修改架構(出人意外地)要難得多,比如當需要管理內部狀態(tài)的時候(見下文)。
•不兼容狀態(tài)/動作接口:很多早期的開源代碼都使用了流行的 OpenAI Gym 環(huán)境,具有平坦的狀態(tài)輸入的簡單接口和單個離散或連續(xù)動作輸出。但 DeepMind Lab 則使用了一種詞典格式,一般具有多個狀態(tài)和動作。而 OpenAI Universe 則使用的是命名關鍵事件(named key events)。理想情況下,我們想讓強化學習智能體能處理任意數量的狀態(tài)和動作,并且具有潛在的不同類型和形狀。比如說,TensorForce 的一位作者正在 NLP 中使用強化學習并且想要處理多模態(tài)輸入,其中一個狀態(tài)在概念上包含兩個輸入——一張圖像和一個對應的描述。
•不透明的執(zhí)行設置和性能問題:寫 TensorFlow 代碼的時候,我們很自然地會優(yōu)先關注邏輯。這會帶來大量重復/不必要的運算或實現不必要的中間值。此外,分布式/異步/并行強化學習的目標也有點不固定,而分布式 TensorFlow 需要對特定的硬件設置進行一定程度的人工調節(jié)。同樣,如果最終有一種執(zhí)行配置只需要聲明可用設備或機器,然后就能在內部處理好其它一切就好了,比如兩臺有不同 IP 的機器可以運行異步 VPG。
明確一下,這些問題并不是要批評研究者寫的代碼,因為這些代碼本來就沒打算被用作 API 或用于其它應用。在這里我們介紹的是想要將強化學習應用到不同領域中的研究者的觀點。
TensorForce API
TensorForce 提供了一種聲明式接口,它是可以使用深度強化學習算法的穩(wěn)健實現。在想要使用深度強化學習的應用中,它可以作為一個庫使用,讓用戶無需擔心所有底層的設計就能實驗不同的配置和網絡架構。我們完全了解當前的深度強化學習方法往往比較脆弱,而且需要大量的微調,但這并不意味著我們還不能為強化學習解決方案構建通用的軟件基礎設施。
TensorForce 并不是原始實現結果的集合,因為這不是研究模擬,要將原始實現用在實際環(huán)境的應用中還需要大量的工作。任何這樣的框架都將不可避免地包含一些結構決策,這會使得非標準的事情變得更加惱人(抽象泄漏(leaky abstractions))。這就是為什么核心強化學習研究者可能更傾向于從頭打造他們的模型的原因。使用 TensorForce,我們的目標是獲取當前最佳研究的整體方向,包含其中的新興見解和標準。
接下來,我們將深入到 TensorForce API 的各個基本方面,并討論我們的設計選擇。
創(chuàng)建和配置智能體
這個示例中的狀態(tài)和動作是更一般的狀態(tài)/動作的短形式(short-form)。比如由一張圖像和一個描述構成多模態(tài)輸入按如下方式定義。類似地,也可以定義多輸出動作。注意在整個代碼中,單個狀態(tài)/動作的短形式必須被持續(xù)不斷地用于與智能體的通信。
配置參數依賴于所用的基本智能體和模型。
TensorForce 目前提供了以下強化學習算法:
•隨機智能體基線(RandomAgent)
•帶有 generalized advantage estimation 的 vanilla 策略梯度(VPGAgent)
•信任區(qū)域策略優(yōu)化(TRPOAgent)
•深度 Q 學習/雙深度 Q 學習(DQNAgent)
•規(guī)范化的優(yōu)勢函數(NAFAgent)
•對專家演示的深度 Q 學習(DQFDAgent)
•Asynchronous Advantage Actor-Critic(A3C)(可以隱含地通過 distributed 使用)
最后一項的意思是說并沒有 A3CAgent 這樣的東西,因為 A3C 實際上描述的是一種異步更新的機制,而不是一種特定的智能體。因此,使用分布式 TensorFlow 的異步更新機制是通用 Model 基類的一部分,所有智能體都衍生于此。正如論文《Asynchronous Methods for Deep Reinforcement Learning》中描述的那樣,A3C 是通過為 VPGAgent 設置 distributed flag 而隱含地實現的。應該指出,A3C 并不是對每種模型而言都是最優(yōu)的分布式更新策略(對一些模型甚至完全沒意義),我們將在本文結尾處討論實現其它方法(比如 PAAC)。重要的一點是要在概念上將智能體和更新語義的問題與執(zhí)行語義區(qū)分開。
我們還想談談模型(model)和智能體(agent)之間的區(qū)別。Agent 類定義了將強化學習作為 API 使用的接口,可以管理傳入觀察數據、預處理、探索等各種工作。其中兩個關鍵方法是 agent.act(state) 和 agent.observe(reward, terminal)。agent.act(state) 返回一個動作,而 agent.observe(reward, terminal) 會根據智能體的機制更新模型,比如離策略記憶回放(MemoryAgent)或在策略批處理(BatchAgent)。注意,要讓智能體的內在機制正確工作,必須交替調用這些函數。Model 類實現了核心強化學習算法,并通過 get_action 和 update 方法提供了必要的接口,智能體可以在相關點處內在地調用。比如說,DQNAgent 是一個帶有 DQNModel 和額外一行(用于目標網絡更新)的 MemoryAgent 智能體。
神經網絡配置
強化學習的一個關鍵問題是設計有效的價值函數。在概念上講,我們將模型看作是對更新機制的描述,這有別于實際更新的東西——在深度強化學習的例子中是指一個(或多個)神經網絡。因此,模型中并沒有硬編碼的網絡,而是根據配置不同的實例化。
在上面的例子中,我們通過編程創(chuàng)造了一個網絡配置作為描述每一層的詞典列表。這樣的配置也可以通過 JSON 給出,然后使用一個效用函數將其變成一個網絡構建器(network constructor)。
默認的激活層是 relu,但也還有其它激活函數可用(目前有 elu、selu、softmax、tanh 和 sigmoid)。此外也可以修改層的其它性質.
我們選擇不使用已有的層實現(比如來自 tf.layers),從而能對內部運算施加明確的控制,并確保它們能與 TensorForce 的其余部分正確地整合在一起。我們想要避免對動態(tài) wrapper 庫的依賴,因此僅依賴于更低層的 TensorFlow 運算。
我們的 layer 庫目前僅提供了非常少的基本層類型,但未來還會擴展。
到目前為止,我們已經給出了 TensorForce 創(chuàng)建分層網絡的功能,即一個采用單一輸入狀態(tài)張量的網絡,具有一個層的序列,可以得出一個輸出張量。但是在某些案例中,可能需要或更適合偏離這樣的層堆疊結構。最顯著的情況是當要處理多個輸入狀態(tài)時,這是必需的,使用單個處理層序列無法自然地完成這一任務。
我們目前還沒有為自動創(chuàng)建對應的網絡構建器提供更高層的配置接口。因此,對于這樣的案例,你必須通過編程來定義其網絡構建器函數,并像之前一樣將其加入到智能體配置中。
內部狀態(tài)和 Episode 管理
和經典的監(jiān)督學習設置(其中的實例和神經網絡調用被認為是獨立的)不同,強化學習一個 episode 中的時間步取決于之前的動作,并且還會影響后續(xù)的狀態(tài)。因此除了其每個時間步的狀態(tài)輸入和動作輸出,可以想象神經網絡可能有內部狀態(tài)在 episode 內的對應于每個時間步的輸入/輸出。下圖展示了這種網絡隨時間的工作方式:
這些內部狀態(tài)的管理(即在時間步之間前向傳播它們和在開始新 episode 時重置它們)可以完全由 TensorForce 的 agent 和 model 類處理。注意這可以處理所有的相關用例(在 batch 之內一個 episode,在 batch 之內多個 episode,在 batch 之內沒有終端的 episode)。
在這個示例架構中,稠密層的輸出被送入一個 LSTM cell,然后其得出該時間步的最終輸出。當向前推進該 LSTM 一步時,其內部狀態(tài)會獲得更新并給出此處的內部狀態(tài)輸出。對于下一個時間步,網絡會獲得新狀態(tài)輸入及這個內部狀態(tài),然后將該 LSTM 又推進一步并輸出實際輸出和新的內部 LSTM 狀態(tài),如此繼續(xù)……
對于帶有內部狀態(tài)的層的自定義實現,該函數不僅必須要返回該層的輸出,而且還要返回一個內部狀態(tài)輸入占位符的列表、對應的內部狀態(tài)輸出張量和一個內部狀態(tài)初始化張量列表(這些都長度相同,并且按這個順序)。
預處理狀態(tài)
我們可以定義被應用于這些狀態(tài)(如果指定為列表的詞典,則可能是多個狀態(tài))的預處理步驟.
這個 stack 中的每一個預處理器都有一個類型,以及可選的 args 列表和/或 kwargs 詞典。比如 sequence 預處理器會取最近的四個狀態(tài)(即:幀)然后將它們堆疊起來以模擬馬爾可夫屬性。隨便一提:在使用比如之前提及的 LSTM 層時,這顯然不是必需的,因為 LSTM 層可以通過內部狀態(tài)建模和交流時間依賴。
探索
探索可以在 configuration 對象中定義,其可被智能體應用到其模型決定所在的動作上(以處理多個動作,同樣,會給出一個規(guī)范詞典)。比如,為了使用 Ornstein-Uhlenbeck 探索以得到連續(xù)的動作輸出,下面的規(guī)范會被添加到配置中。
用 Runner 效用函數使用智能體
讓我們使用一個智能體,這個代碼是在我們測試環(huán)境上運行的一個智能體,我們將其用于連續(xù)積分——一個為給定智能體/模型的工作方式驗證行動、觀察和更新機制的最小環(huán)境。注意我們所有的環(huán)境實現(OpenAI Gym、OpenAI Universe、DeepMind Lab)都使用了同一個接口,因此可以很直接地使用另一個環(huán)境運行測試。
Runner 效用函數可以促進一個智能體在一個環(huán)境上的運行過程。給定任意一個智能體和環(huán)境實例,它可以管理 episode 的數量,每個 episode 的最大長度、終止條件等。Runner 也可以接受 cluster_spec 參數,如果有這個參數,它可以管理分布式執(zhí)行(TensorFlow supervisors/sessions/等等)。通過可選的 episode_finished 參數,你還可以周期性地報告結果,還能給出在最大 episode 數之前停止執(zhí)行的指標。
正如在引言中說的一樣,在一個給定應用場景中使用 runner 類取決于流程控制。如果使用強化學習可以讓我們合理地在 TensorForce 中查詢狀態(tài)信息(比如通過一個隊列或網絡服務)并返回動作(到另一個隊列或服務),那么它可被用于實現環(huán)境接口,并因此可以使用(或擴展)runner 效用函數。
更常見的情況可能是將 TensorForce 用作驅動控制的外部應用庫,因此無法提供一個環(huán)境句柄。對研究者來說,這可能無足輕重,但在計算機系統(tǒng)等領域,這是一個典型的部署問題,這也是大多數研究腳本只能用于模擬,而無法實際應用的根本原因。
另外值得提及的一點是聲明式的中心配置對象使得我們可以直接用超參數優(yōu)化為強化學習模型的所有組件配置接口,尤其還有網絡架構。
進一步思考
我們希望你能發(fā)現 TensorForce 很有用。到目前為止,我們的重點還是讓架構先就位,我們認為這能讓我們更持續(xù)一致地實現不同的強化學習概念和新的方法,并且避免探索新領域中的深度強化學習用例的不便。
在這樣一個快速發(fā)展的領域,要決定在實際的庫中包含哪些功能是很困難的?,F在的算法和概念是非常多的,而且看起來在 Arcade Learning Environment (ALE) 環(huán)境的一個子集上,每周都有新想法得到更好的結果。但也有一個問題存在:許多想法都只在易于并行化或有特定 episode 結構的環(huán)境中才有效——對于環(huán)境屬性以及它們與不同方法的關系,我們還沒有一個準確的概念。但是,我們能看到一些明顯的趨勢:
•策略梯度和 Q 學習方法混合以提升樣本效率(PGQ、Q-Prop 等):這是一種合乎邏輯的事情,盡管我們還不清楚哪種混合策略將占上風,但是我們認為這將成為下一個「標準方法」。我們非常有興趣理解這些方法在不同應用領域(數據豐富/數據稀疏)的實用性。我們一個非常主觀的看法是大多數應用研究者都傾向于使用 vanilla 策略梯度的變體,因為它們易于理解、實現,而且更重要的是比新算法更穩(wěn)健,而新算法可能需要大量的微調才能處理潛在的數值不穩(wěn)定性(numerical instabilities)。一種不同的看法是非強化學習研究者可能只是不知道相關的新方法,或者不愿意費力去實現它們。而這就激勵了 TensorForce 的開發(fā)。最后,值得考慮的是,應用領域的更新機制往往沒有建模狀態(tài)、動作和回報以及網絡架構重要。
•更好地利用 GPU 和其他可用于并行/一步/分布式方法的設備(PAAC、GA3C 等):這一領域的方法的一個問題是關于收集數據與更新所用時間的隱含假設。在非模擬的領域,這些假設可能并不成立,而理解環(huán)境屬性會如何影響設備執(zhí)行語義還需要更多的研究。我們仍然在使用 feed_dicts,但也在考慮提升輸入處理的性能。
•探索模式(比如,基于計數的探索、參數空間噪聲……)
•大型離散動作空間、分層模型和子目標(subgoal)的分解。比如 Dulac-Arnold 等人的論文《Deep Reinforcement Learning in Large Discrete Action Spaces》。復雜離散空間(比如許多依賴于狀態(tài)的子選項)在應用領域是高度相關的,但目前還難以通過 API 使用。我們預計未來幾年會有大量成果。
•用于狀態(tài)預測的內部模塊和基于全新模型的方法:比如論文《The Predictron: End-To-End Learning and Planning》。
•貝葉斯深度強化學習和關于不確定性的推理
總的來說,我們正在跟蹤這些發(fā)展,并且將會將此前錯過的已有技術(應該有很多)納入進來;而一旦我們相信一種新想法有變成穩(wěn)健的標準方法的潛力,我們也會將其納入進來。在這個意義上,我們并沒有與研究框架構成明確的競爭,而是更高程度的覆蓋。
以上就是關于openai社區(qū)相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內容。
推薦閱讀:
2022年銷售工作計劃怎么寫(2022年銷售工作計劃怎么寫呢)