『壹』 最強alphago怎樣煉成
最強alphago怎樣煉成
Q: Deepmind Zero的訓練為什麼如此穩定?深層次的增強學習是不穩定和容易遺忘的,自我對局也是不穩定和容易遺忘的,如果沒有一個好的基於模仿的初始化狀態和歷史檢查點,二者結合在一起應該是一個災難...但Zero從零開始,我沒有看到論文中有這部分的內容,你們是怎麼做到的呢?
David Silver:在深層增強學習上,AlphaGo Zero與典型的無模式演算法(如策略梯度或者Q學習)採用的是完全不同的演算法。通過使用AlphaGo搜索,我們可以極大改進策略和自我對局的結果,然後我們會用簡單的、基於梯度的更新來訓練下一個策略及價值網路。比起基於簡便的基於梯度的策略改進,這樣的做法會更加穩定。
Q:我注意到ELO等級分增長的數據只與到第40天,是否是因為論文截稿的原因?或者說之後AlphaGo的數據不再顯著改善?
David Silver:AlphaGo已經退役了!這意味著我們將人員和硬體資源轉移到其他AI問題中,我們還有很長的路要走吶。
Q:關於論文的兩個問題:
Q1:您能解釋為什麼AlphaGo的殘差塊輸入尺寸為19x19x17嗎?我不知道為什麼每個對局者需要用8個堆疊的二進制特徵層來描述?我覺得1、2個層就夠了啊。雖然我不是100%理解圍棋的規則,但8個層看起來也多了點吧?
Q2:由於整個通道使用自我對局與最近的/最好的模型進行比較,你們覺得這對於採用參數空間的特定SGD驅動軌跡對否會有過擬合的風險?
David Silver:說起來使用表徵可能比現在用的8層堆疊的做法更好!但我們使用堆疊的方式觀察歷史數據有三個原因:1)它與其他領域的常見輸入一致;2)我們需要一些歷史狀態來表示被KO;3)如果有一些歷史數據,我們可以更好地猜測對手最近下的位置,這可以作為一種關注機制(註:在圍棋中,這叫「敵之要點即我之要點」),而第17層用於標注我們現在究竟是執黑子還是白子,因為要考慮貼目的關系。
Q:有了強大的棋類引擎,我們可以給玩家一個評級——例如Elo圍棋等級分就是通過棋手對局的分析逐步得出的,那麼AlphaGo是否可以對過去有等級分前的棋手的實力進行分析?這可能為研究人類的認知提供一個平台。
Julian Schrittwieser:感謝分享,這個主意很棒!
我認為在圍棋中這完全可以做到,或許可以用最佳應對和實際應對的價值差異或者政策網路給每一手位置評估得到的概率來進行?我有空的時候試一下。
Q: 既然AlphaGo已經退役了,是否有將其開源的計劃?這將對圍棋社區和機器學習研究產生巨大的影響。還有,Hassabis在烏鎮宣稱的圍棋工具將會什麼時候發布?
David Silver:現在這個工具正在准備中。不久後你就能看到新的消息。
Q:AlphaGo開發過程中,在系統架構上遇到的最大障礙是什麼?
David Silver:我們遇到的一個重大挑戰是在和李世石比賽的時候,當時我們意識到AlphaGo偶爾會受到我們所謂的「妄想」的影響,也就是說,程序可能會錯誤理解當前盤面局勢,並在錯誤的方向上持續許多步。我們嘗試了許多方案,包括引入更多的圍棋知識或人類元知識來解決這個問題。但最終我們取得了成功,從AlphaGo本身解決了這個問題,更多地依靠強化學習的力量來獲得更高質量的解決方案。
圍棋愛好者的問題
Q:1846年,在十四世本因坊跡目秀策與十一世井上幻庵因碩的一盤對局中,秀策下的第127手讓幻庵因碩一時驚急兩耳發赤,該手成為扭轉敗局的「耳赤一手」。如果是AlphaGo,是否也會下出相同的一首棋?
Julian Schrittwieser:我問了樊麾,他的回答是這樣的:
當時的圍棋不貼目,而AlphaGo的對局中,黑棋需貼7.5目。貼目情況不同造成了古今棋局的差異,如果讓AlphaGo穿越到當年下那一手,很有可能下的是不同的另一個地方。
Q:從已發布的AlphaGo相互對局看,執白子的時間更為充裕,因而不少人猜測,7.5目的貼目太高了(註:現代圍棋的貼目數也在不斷變化,如在30年前,當時通行的是黑子貼白子5.5目)。
如果分析更大的數據集,是否可以對圍棋的規則得出一些有趣的結論?(例如,執黑或者執白誰更有優勢,貼目應該更高還是更低)
Julian Schrittwieser:從我的經驗和運行的結果看,7.5目的貼目對雙方來說是均勢的,黑子的勝率略高一些(55%左右)。
Q:你能給我們講一下第一手的選擇嗎?ALphaGo是否會下出我們前所未見的開局方式?比如說,第一手下在天元或者目外,甚至更奇怪的地方?如果不是,這是否是一種「習慣」,或者說AlphaGo有強烈的「信念」認為星位、小目、三三是更好的選擇?
David Silver:在訓練中我們看到ALphaGo嘗試過不同方式的開局——甚至剛開始訓練的時候有過第一手下在一一!
即便在訓練後期,我們仍然能看到四、六位超高目的開局,但很快就恢復到小目等正常的開局了。
Q:作為AlphaGo的超級粉絲,有一個問題一直在我心中:AlphaGo可以讓職業棋手多少子?從論文中我們知道AlphaGo可以下讓子棋,我也知道AlphaGo恐怕讓不了柯潔兩子,但我想你們一定很好奇,你們是否有做內部測試?
David Silver:我們沒有和人類棋手下讓子棋。當然,我們在測試不同版本的時候下過讓子棋,在AlphaGo Master>AlphaGo Lee>ALphaGo Fan這三個版本中,後一個版本均可讓三子擊敗前一個版本。但是,因為AlphaGo是自我訓練的,所以尤其擅長打敗自己的較弱的前一版本,因此我們不認為這些訓練方式可以推廣到和人類選手的讓子棋中。
Q:你們有沒有想過使用生成對抗網路(GAN)?
David Sliver:從某種意義來講,自我對弈就是對抗的過程。每一次結果的迭代都是在試圖找到之前版本的「反向策略」。
傳言終結者
Q:我聽說AlphaGo在開發初期被引導在某一個具體的方向訓練以解決對弈中展現出的弱點。現在它的能力已經超過了人類,是否需要另外的機制來進一步突破?你們有做了什麼樣的工作?
David Silver:實際上,我們從未引導過AlphaGo來解決具體的弱點。我們始終專注於基礎的機器學習演算法,讓AlphaGo可以學習修復自己的弱點。
當然你不可能達到100%的完美,所以缺點總會存在。 在實踐中,我們需要通過正確的方法來確保訓練不會落入局部最優的陷阱,但是我們從未使用過人為的推動。
關於DeepMind公司
Q:我這里有幾個問題:在DeepMind工作是什麼感受?AlphaGo團隊成員都有誰?你能介紹一下AlphaGo團隊工作分配的情況嗎?下一個重大挑戰是什麼?
David Silver:在DeepMind工作感覺好極了:)——這不是一個招聘廣告,但我感覺每天可以在這里做我喜歡的事實在是太幸運了。有很多(多到忙不過來!:))很酷的項目去參與。
我們很幸運有許多大牛在AlphaGo工作。您可以通過查看相應的作者列表來獲取更詳細的信息。
Q: 你覺得本科生是否可以在人工智慧領域取得成功?
Julian Schrittwiese:當然。我本人就只有計算機科學學士學位,這一領域變化迅速,我認為您可以從閱讀最新的論文和試驗中來進行自學。另外,去那些做過機器學習項目的公司實習也是很有幫助的。
關於演算法的擴展和其他項目
Q:Hassabis今年三月份在劍橋的一個演講中表示,AlphaGo項目未來目標之一是對神經網路進行解釋。我的問題是:ALphaGo在神經網路結構上取得了什麼樣的進展,或者說,對AlphaGo,神經網路仍然是神秘的黑盒子?
David Silver:不僅僅是ALphaGo,可解釋性是我們所有項目的一個非常有意思的課題。Deepmind內部有多個團隊從不同方式來探索我們的系統,最近有團隊發表了基於認知心理學技術去嘗試破譯匹配網路內部發生了什麼,效果非常不錯!
Q: 很高興看到AlphaGo Zero的好成績。我們的一篇NIPS論文中也提到了對於深度學習和搜索樹之間效率的相似問題,因此我對於在更長的訓練過程中的行為尤其感興趣。
AlphaGo的訓練過程中,創建學習目標的蒙特卡洛樹搜索的貪心演算法、策略網路的貪心演算法、以及在訓練過程中價值功能變化的貪心演算法之間的相對表現如何?這種自我對局學習的方法是否可以應用在最近的星際爭霸 II API中?
David Silver:感謝介紹您的論文!真不敢相信這篇論文在我們4月7日投稿的時候已經發布了。事實上,它與我們的學習演算法的策略組件非常相似(盡管我們也有一個值組件),您可以參考我們的方法和強化學習中的討論,也很高興看到在其他游戲中使用類似方法。
Q:為什麼早期版本的AlphaGo沒有嘗試自我對弈?或者說,AlphaGo之前也嘗試過自我對弈但效果不好?
我對這個領域的發展和進步程度感到好奇。相比起今天,在兩年前在設計一個自主訓練的AlphaGo的瓶頸在哪裡?今天我們見到的「機器學習直覺」又是經歷了什麼樣的系統迭代過程?
David Silver:創建一個可以完全從自我學習的系統一直是加強學習的一個開放性問題。 我們最初的嘗試包括你能查到的許多類似的演算法,是相當不穩定的。 我們做了很多嘗試,最終AlphaGo Zero演算法是最有效的,而且似乎已經破解了這個特定的問題。
Q:你認為機器人什麼時候能夠有效解決現實世界關於高度、尺寸方面的問題(例如,自己學習如何抓取任何形狀、尺寸、位置垃圾的設備)?策略梯度方法是否是實現這一目標的關鍵點?
Julian Schrittwieser:這主要是由於價值/政策網路上的雙重改進,包括更好的訓練和更好的架構。具體參見論文圖4對不同網路架構的比較。
Q:據說擊敗柯潔的ALphaGo Master的功耗只是擊敗李世石的AlphaGo Lee的1/10。你們做了什麼樣的優化呢?
Julian Schrittwieser:這主要是由於價值/政策網路上的雙重改進,包括更好的訓練和更好的架構。具體參見論文圖4對不同網路架構的比較。(你確認不是上一個問題的答案嗎)
Q:看起來在增強學習中使用或模擬Agent的長期記憶是一個很大的障礙。 展望未來,您覺得我們是否能以一種新的思維方式解決這一點? 還是說需要等待我們技術可以實現一個超級網路?
Julian Schrittwieser:是的,長期記憶可能是一個重要的因子,例如在「星際爭霸」游戲中,你可能已經做出了上千個動作,但你還要記住你派出的偵察兵。
我認為現在已經有了令人振奮的組件(神經圖靈機!),但是我認為我們在這方面仍有很大的改進空間。
Q:David,我看過你的演講視頻,你提到增強學習可以用於金融交易, 你有沒有真實世界的例子? 你會如何處理黑天鵝事件(過去沒有遇到過的情況)?
David Silver:已經發表增強學慣用於現實世界的財務演算法的論文非常少見,但有一些經典論文值得一看,例如Nevmyvaka、Kearns在2006寫的那篇和Moody、Safell在2001年寫的那篇。
Q:你們和Facebook幾乎同時研究圍棋問題,你們能更快獲得大師級表現的優勢是什麼?
對於那些無法獲得像AlphaGo如此多的訓練數據的領域如何開展機器學習或者增強學習?
David_Silver:Facebook更側重於監督學習,我們選擇更多地關注強化學習,因為我們認為AlphaGo最終將超越人類的知識。 我們最近的結果實際上表明,監督學習方法可以讓人大吃一驚,但強化學習絕對是遠遠超出人類水平的關鍵之處。
『貳』 這個神經網路訓練有沒有梯度消失,或者梯度爆炸,具體怎麼看阿
增加網路的非線性能力,從而擬合更多的非線性過程。ReLU在一定程度上能夠防止梯度消失,但防止梯度消失不是用它的主要原因,主要原因是求導數簡單。一定程度是指,右端的不會趨近於飽和,求導數時,導數不為零,從而梯度不消失,但左端問題依然存在,一樣掉進去梯度也會消失。所以出現很多改進的ReLU。
『叄』 BP神經網路的MATLAB訓練Gradient是什麼意思Performance是什麼意思,大神能解釋一下嗎謝謝了
Gradient是梯度的意思,BP神經網路訓練的時候涉及到梯度下降法,表示為梯度下降的程度與訓練過程迭代次數(步長)的關系。Performance是神經網路傳遞誤差大小的意思,表示為均方差與訓練過程迭代次數(步長)的關系。
『肆』 如何更好的理解分析深度卷積神經網路
用局部連接而不是全連接,同時權值共享。
局部連接的概念參考局部感受域,即某個視神經元僅考慮某一個小區域的視覺輸入,因此相比普通神經網路的全連接層(下一層的某一個神經元需要與前一層的所有節點連接),卷積網路的某一個卷積層的所有節點只負責前層輸入的某一個區域(比如某個3*3的方塊)。這樣一來需要訓練的權值數相比全連接而言會大大減少,進而減小對樣本空間大小的需求。
權值共享的概念就是,某一隱藏層的所有神經元共用一組權值。
這兩個概念對應卷積層的話,恰好就是某個固定的卷積核。卷積核在圖像上滑動時每處在一個位置分別對應一個「局部連接」的神經元,同時因為「權值共享」的緣故,這些神經元的參數一致,正好對應同一個卷積核。
順便補充下,不同卷積核對應不同的特徵,比如不同方向的邊(edge)就會分別對應不同的卷積核。
激活函數f(x)用ReLU的話避免了x過大梯度趨於0(比如用sigmoid)而影響訓練的權值的情況(即GradientVanishing)。同時結果會更稀疏一些。
池化之後(例如保留鄰域內最大或採納平均以舍棄一些信息)一定程度也壓制了過擬合的情況。
總體來說就是重復卷積-relu來提取特徵,進行池化之後再作更深層的特徵提取,實質上深層卷積網路的主要作用在於特徵提取。最後一層直接用softmax來分類(獲得一個介於0~1的值表達輸入屬於這一類別的概率)。
『伍』 TensorForce是怎樣煉成的
TensorForce是怎樣煉成的
本文將圍繞一個實際的問題進行介紹:應用強化學習的社區可以如何從對腳本和單個案例的收集更進一步,實現一個強化學習 API——一個用於強化學習的 tf-learn 或 skikit-learn?在討論 TensorForce 框架之前,我們將談一談啟發了這個項目的觀察和思想。如果你只想了解這個 API,你可以跳過這一部分。我們要強調一下:這篇文章並不包含對深度強化學習本身的介紹,也沒有提出什麼新模型或談論最新的最佳演算法,因此對於純研究者來說,這篇文章可能並不會那麼有趣。
開發動機
假設你是計算機系統、自然語言處理或其它應用領域的研究者,你一定對強化學習有一些基本的了解,並且有興趣將深度強化學習(deep RL)用來控制你的系統的某些方面。
對深度強化學習、DQN、vanilla 策略梯度、A3C 等介紹文章已經有很多了,比如 Karpathy 的文章對策略梯度方法背後的直觀思想就進行了很好的描述。另外,你也能找到很多可以幫助上手的代碼,比如 OpenAI 上手智能體、rllab以及 GitHub 上許多特定的演算法。
但是,我們發現在強化學習的研究框架開發和實際應用之間還存在一個巨大的鴻溝。在實際應用時,我們可能會面臨如下的問題:
•強化學習邏輯與模擬句柄的緊密耦合:模擬環境 API 是非常方便的,比如,它們讓我們可以創建一個環境對象然後將其用於一個 for 循環中,同時還能管理其內部的更新邏輯(比如:通過收集輸出特徵)。如果我們的目標是評估一個強化學習思想,那麼這就是合理的,但將強化學習代碼和模擬環境分開則要艱難得多。它還涉及到流程式控制制的問題:當環境就緒後,強化學習代碼可以調用它嗎?或者當環境需要決策時,它會調用強化學習智能體嗎?對於在許多領域中實現的應用強化學習庫,我們往往需要後者。
•固定的網路架構:大多數實現案例都包含了硬編碼的神經網路架構。這通常並不是一個大問題,因為我們可以很直接地按照需求加入或移除不同的網路層。盡管如此,如果有一個強化學習庫能夠提供聲明式介面的功能,而無需修改庫代碼,那麼情況就會好得多。此外,在有的案例中,修改架構(出人意外地)要難得多,比如當需要管理內部狀態的時候(見下文)。
•不兼容狀態/動作介面:很多早期的開源代碼都使用了流行的 OpenAI Gym 環境,具有平坦的狀態輸入的簡單介面和單個離散或連續動作輸出。但 DeepMind Lab 則使用了一種詞典格式,一般具有多個狀態和動作。而 OpenAI Universe 則使用的是命名關鍵事件(named key events)。理想情況下,我們想讓強化學習智能體能處理任意數量的狀態和動作,並且具有潛在的不同類型和形狀。比如說,TensorForce 的一位作者正在 NLP 中使用強化學習並且想要處理多模態輸入,其中一個狀態在概念上包含兩個輸入——一張圖像和一個對應的描述。
•不透明的執行設置和性能問題:寫 TensorFlow 代碼的時候,我們很自然地會優先關注邏輯。這會帶來大量重復/不必要的運算或實現不必要的中間值。此外,分布式/非同步/並行強化學習的目標也有點不固定,而分布式 TensorFlow 需要對特定的硬體設置進行一定程度的人工調節。同樣,如果最終有一種執行配置只需要聲明可用設備或機器,然後就能在內部處理好其它一切就好了,比如兩台有不同 IP 的機器可以運行非同步 VPG。
明確一下,這些問題並不是要批評研究者寫的代碼,因為這些代碼本來就沒打算被用作 API 或用於其它應用。在這里我們介紹的是想要將強化學習應用到不同領域中的研究者的觀點。
TensorForce API
TensorForce 提供了一種聲明式介面,它是可以使用深度強化學習演算法的穩健實現。在想要使用深度強化學習的應用中,它可以作為一個庫使用,讓用戶無需擔心所有底層的設計就能實驗不同的配置和網路架構。我們完全了解當前的深度強化學習方法往往比較脆弱,而且需要大量的微調,但這並不意味著我們還不能為強化學習解決方案構建通用的軟體基礎設施。
TensorForce 並不是原始實現結果的集合,因為這不是研究模擬,要將原始實現用在實際環境的應用中還需要大量的工作。任何這樣的框架都將不可避免地包含一些結構決策,這會使得非標準的事情變得更加惱人(抽象泄漏(leaky abstractions))。這就是為什麼核心強化學習研究者可能更傾向於從頭打造他們的模型的原因。使用 TensorForce,我們的目標是獲取當前最佳研究的整體方向,包含其中的新興見解和標准。
接下來,我們將深入到 TensorForce API 的各個基本方面,並討論我們的設計選擇。
創建和配置智能體
這個示例中的狀態和動作是更一般的狀態/動作的短形式(short-form)。比如由一張圖像和一個描述構成多模態輸入按如下方式定義。類似地,也可以定義多輸出動作。注意在整個代碼中,單個狀態/動作的短形式必須被持續不斷地用於與智能體的通信。
配置參數依賴於所用的基本智能體和模型。
TensorForce 目前提供了以下強化學習演算法:
•隨機智能體基線(RandomAgent)
•帶有 generalized advantage estimation 的 vanilla 策略梯度(VPGAgent)
•信任區域策略優化(TRPOAgent)
•深度 Q 學習/雙深度 Q 學習(DQNAgent)
•規范化的優勢函數(NAFAgent)
•對專家演示的深度 Q 學習(DQFDAgent)
•Asynchronous Advantage Actor-Critic(A3C)(可以隱含地通過 distributed 使用)
最後一項的意思是說並沒有 A3CAgent 這樣的東西,因為 A3C 實際上描述的是一種非同步更新的機制,而不是一種特定的智能體。因此,使用分布式 TensorFlow 的非同步更新機制是通用 Model 基類的一部分,所有智能體都衍生於此。正如論文《Asynchronous Methods for Deep Reinforcement Learning》中描述的那樣,A3C 是通過為 VPGAgent 設置 distributed flag 而隱含地實現的。應該指出,A3C 並不是對每種模型而言都是最優的分布式更新策略(對一些模型甚至完全沒意義),我們將在本文結尾處討論實現其它方法(比如 PAAC)。重要的一點是要在概念上將智能體和更新語義的問題與執行語義區分開。
我們還想談談模型(model)和智能體(agent)之間的區別。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 智能體。
神經網路配置
強化學習的一個關鍵問題是設計有效的價值函數。在概念上講,我們將模型看作是對更新機制的描述,這有別於實際更新的東西——在深度強化學習的例子中是指一個(或多個)神經網路。因此,模型中並沒有硬編碼的網路,而是根據配置不同的實例化。
在上面的例子中,我們通過編程創造了一個網路配置作為描述每一層的詞典列表。這樣的配置也可以通過 JSON 給出,然後使用一個效用函數將其變成一個網路構建器(network constructor)。
默認的激活層是 relu,但也還有其它激活函數可用(目前有 elu、selu、softmax、tanh 和 sigmoid)。此外也可以修改層的其它性質.
我們選擇不使用已有的層實現(比如來自 tf.layers),從而能對內部運算施加明確的控制,並確保它們能與 TensorForce 的其餘部分正確地整合在一起。我們想要避免對動態 wrapper 庫的依賴,因此僅依賴於更低層的 TensorFlow 運算。
我們的 layer 庫目前僅提供了非常少的基本層類型,但未來還會擴展。
到目前為止,我們已經給出了 TensorForce 創建分層網路的功能,即一個採用單一輸入狀態張量的網路,具有一個層的序列,可以得出一個輸出張量。但是在某些案例中,可能需要或更適合偏離這樣的層堆疊結構。最顯著的情況是當要處理多個輸入狀態時,這是必需的,使用單個處理層序列無法自然地完成這一任務。
我們目前還沒有為自動創建對應的網路構建器提供更高層的配置介面。因此,對於這樣的案例,你必須通過編程來定義其網路構建器函數,並像之前一樣將其加入到智能體配置中。
內部狀態和 Episode 管理
和經典的監督學習設置(其中的實例和神經網路調用被認為是獨立的)不同,強化學習一個 episode 中的時間步取決於之前的動作,並且還會影響後續的狀態。因此除了其每個時間步的狀態輸入和動作輸出,可以想像神經網路可能有內部狀態在 episode 內的對應於每個時間步的輸入/輸出。下圖展示了這種網路隨時間的工作方式:
這些內部狀態的管理(即在時間步之間前向傳播它們和在開始新 episode 時重置它們)可以完全由 TensorForce 的 agent 和 model 類處理。注意這可以處理所有的相關用例(在 batch 之內一個 episode,在 batch 之內多個 episode,在 batch 之內沒有終端的 episode)。
在這個示例架構中,稠密層的輸出被送入一個 LSTM cell,然後其得出該時間步的最終輸出。當向前推進該 LSTM 一步時,其內部狀態會獲得更新並給出此處的內部狀態輸出。對於下一個時間步,網路會獲得新狀態輸入及這個內部狀態,然後將該 LSTM 又推進一步並輸出實際輸出和新的內部 LSTM 狀態,如此繼續……
對於帶有內部狀態的層的自定義實現,該函數不僅必須要返回該層的輸出,而且還要返回一個內部狀態輸入佔位符的列表、對應的內部狀態輸出張量和一個內部狀態初始化張量列表(這些都長度相同,並且按這個順序)。
預處理狀態
我們可以定義被應用於這些狀態(如果指定為列表的詞典,則可能是多個狀態)的預處理步驟.
這個 stack 中的每一個預處理器都有一個類型,以及可選的 args 列表和/或 kwargs 詞典。比如 sequence 預處理器會取最近的四個狀態(即:幀)然後將它們堆疊起來以模擬馬爾可夫屬性。隨便一提:在使用比如之前提及的 LSTM 層時,這顯然不是必需的,因為 LSTM 層可以通過內部狀態建模和交流時間依賴。
探索
探索可以在 configuration 對象中定義,其可被智能體應用到其模型決定所在的動作上(以處理多個動作,同樣,會給出一個規范詞典)。比如,為了使用 Ornstein-Uhlenbeck 探索以得到連續的動作輸出,下面的規范會被添加到配置中。
用 Runner 效用函數使用智能體
讓我們使用一個智能體,這個代碼是在我們測試環境上運行的一個智能體,我們將其用於連續積分——一個為給定智能體/模型的工作方式驗證行動、觀察和更新機制的最小環境。注意我們所有的環境實現(OpenAI Gym、OpenAI Universe、DeepMind Lab)都使用了同一個介面,因此可以很直接地使用另一個環境運行測試。
Runner 效用函數可以促進一個智能體在一個環境上的運行過程。給定任意一個智能體和環境實例,它可以管理 episode 的數量,每個 episode 的最大長度、終止條件等。Runner 也可以接受 cluster_spec 參數,如果有這個參數,它可以管理分布式執行(TensorFlow supervisors/sessions/等等)。通過可選的 episode_finished 參數,你還可以周期性地報告結果,還能給出在最大 episode 數之前停止執行的指標。
正如在引言中說的一樣,在一個給定應用場景中使用 runner 類取決於流程式控制制。如果使用強化學習可以讓我們合理地在 TensorForce 中查詢狀態信息(比如通過一個隊列或網路服務)並返回動作(到另一個隊列或服務),那麼它可被用於實現環境介面,並因此可以使用(或擴展)runner 效用函數。
更常見的情況可能是將 TensorForce 用作驅動控制的外部應用庫,因此無法提供一個環境句柄。對研究者來說,這可能無足輕重,但在計算機系統等領域,這是一個典型的部署問題,這也是大多數研究腳本只能用於模擬,而無法實際應用的根本原因。
另外值得提及的一點是聲明式的中心配置對象使得我們可以直接用超參數優化為強化學習模型的所有組件配置介面,尤其還有網路架構。
進一步思考
我們希望你能發現 TensorForce 很有用。到目前為止,我們的重點還是讓架構先就位,我們認為這能讓我們更持續一致地實現不同的強化學習概念和新的方法,並且避免探索新領域中的深度強化學慣用例的不便。
在這樣一個快速發展的領域,要決定在實際的庫中包含哪些功能是很困難的。現在的演算法和概念是非常多的,而且看起來在 Arcade Learning Environment (ALE) 環境的一個子集上,每周都有新想法得到更好的結果。但也有一個問題存在:許多想法都只在易於並行化或有特定 episode 結構的環境中才有效——對於環境屬性以及它們與不同方法的關系,我們還沒有一個准確的概念。但是,我們能看到一些明顯的趨勢:
•策略梯度和 Q 學習方法混合以提升樣本效率(PGQ、Q-Prop 等):這是一種合乎邏輯的事情,盡管我們還不清楚哪種混合策略將占上風,但是我們認為這將成為下一個「標准方法」。我們非常有興趣理解這些方法在不同應用領域(數據豐富/數據稀疏)的實用性。我們一個非常主觀的看法是大多數應用研究者都傾向於使用 vanilla 策略梯度的變體,因為它們易於理解、實現,而且更重要的是比新演算法更穩健,而新演算法可能需要大量的微調才能處理潛在的數值不穩定性(numerical instabilities)。一種不同的看法是非強化學習研究者可能只是不知道相關的新方法,或者不願意費力去實現它們。而這就激勵了 TensorForce 的開發。最後,值得考慮的是,應用領域的更新機制往往沒有建模狀態、動作和回報以及網路架構重要。
•更好地利用 GPU 和其他可用於並行/一步/分布式方法的設備(PAAC、GA3C 等):這一領域的方法的一個問題是關於收集數據與更新所用時間的隱含假設。在非模擬的領域,這些假設可能並不成立,而理解環境屬性會如何影響設備執行語義還需要更多的研究。我們仍然在使用 feed_dicts,但也在考慮提升輸入處理的性能。
•探索模式(比如,基於計數的探索、參數空間雜訊……)
•大型離散動作空間、分層模型和子目標(subgoal)的分解。比如 Dulac-Arnold 等人的論文《Deep Reinforcement Learning in Large Discrete Action Spaces》。復雜離散空間(比如許多依賴於狀態的子選項)在應用領域是高度相關的,但目前還難以通過 API 使用。我們預計未來幾年會有大量成果。
•用於狀態預測的內部模塊和基於全新模型的方法:比如論文《The Predictron: End-To-End Learning and Planning》。
•貝葉斯深度強化學習和關於不確定性的推理
總的來說,我們正在跟蹤這些發展,並且將會將此前錯過的已有技術(應該有很多)納入進來;而一旦我們相信一種新想法有變成穩健的標准方法的潛力,我們也會將其納入進來。在這個意義上,我們並沒有與研究框架構成明確的競爭,而是更高程度的覆蓋。
『陸』 梯度下降演算法是指什麼 神經網路
梯度下降演算法是神經網路在每代更新網路權值的一種方法。
神經網路還有很多其他更新權值的方法,不只這一種