標籤:如何 after 為我 put res head blog 而在 count
原文地址:https://www.nervanasys.com/demystifying-deep-reinforcement-learning/
作者簡介:
About the Author: Tambet Matiisen Tambet Matiisen is a PhD student in University of Tartu, Estonia. After working in industry for a while and founding his own SaaS startup, he decided to join academia again. He hates programming and is interested in making the machines learn the same way as humans do. He shares his life with dog-obsessed wife and two out of hand kids. At less busy moments he enjoys obscure flashbacks from 90s, like old-skool breakbeat or MSX home computers.下面是我的中文翻譯: RL
強化學習介於監督和非監督學習之間。而在有監督學習中,每個培訓範例都有一個目標標籤,在無監督學習中,一個根本沒有標籤,在強化學習中,一個有稀疏的和延時的標籤——獎勵。只有在這些獎勵的基礎上,代理人才能學會在環境中行為。
Figure 1: Atari Breakout game. Image credit: DeepMind.
雖然這個想法很直觀,但在實踐中有許多挑戰。例如,當你在突破賽中打磚塊並獲得一個獎勵時,它通常與你在獲得獎勵前所做的動作(划槳動作)無關。所有的艱苦工作都已經完成了,當你正確地放置球拍並把球彈回來。這就是所謂的信貸分配問題,也就是說,前一項行動中的哪一項是負責獲得獎勵和在何種程度上。
一旦你想出了一個收集一定數量的獎勵的策略,你應該堅持下去還是嘗試一些可能帶來更大回報的事情呢?在上面的突破遊戲中,一個簡單的策略是向左移動並在那裡等待。發射時,球往往飛得比右邊多,在你死前你很容易得分10分。你會滿意還是想要更多?這就是所謂的探索利用困境-你應該利用已知的工作策略或探索其他,可能更好的策略。
增強學習是我們學習知識的一個重要模型。我們父母的讚揚,學校的成績,工作的薪水,這些都是獎勵的例子。無論是在商業還是在關係中,信貸分配問題和勘探開發困境每天都在出現。這就是為什麼研究這個問題很重要,而遊戲是一個嘗試新方法的絕妙沙箱。
Markov Decision Process
現在的問題是,你如何使強化學習問題正式化,這樣你就可以對它進行推理了?最常見的方法是將其表示為馬爾可夫決策過程。
假設你是一個位於環境中的代理人(例如:突圍遊戲)。環境處於某種狀態。(例如,槳的位置、球的位置和方向、每一塊磚的存在等)。代理可以在環境中執行某些操作(把槳向左或向右移動)。這些行為有時會得到獎勵(如分數增加)。操作會改變環境並導致一個新的狀態,代理可以執行另一個操作,等等。您如何選擇這些操作的規則稱為策略。一般情況下的環境是隨機的,這意味著下一個狀態可能是隨機的(例如,當你失去一個球並發射一個新的,它朝一個隨機方向)。
Figure 2: Left: reinforcement learning problem. Right: Markov decision process.
一組狀態和動作,以及從一個狀態轉換到另一個狀態的規則群組成了馬爾可夫決策過程。經理過這樣一個過程(一次遊戲),形成一系列有限的狀態、動作和獎勵。
在這裡,Si代表狀態,Ai是動作,ri+1是動作結束後的獎勵。這次遊戲的結束狀態是Sn。(如“遊戲結束”螢幕)。馬爾可夫決策過程依賴於馬爾可夫假設,下一個狀態Si + 1的機率只取決於目前狀態Si和動作Ai,而不依賴於前面的狀態或動作。
Discounted Future Reward
要想達到在長期表現好,我們需要考慮的不僅僅是立即獎勵,我們同樣也要考慮未來會得到獎勵。我們應該如何達到這樣的效果?考慮運行一次馬爾可夫決策過程,我們可以計算這樣的一次決策的總的回報。
考慮一下,從t時刻起的總的回報可以如下面這樣表示:
但因為我們的環境是隨機不確定的,我們永遠不能夠確定,如果下次我們執行相同的動作時,我們將得到同樣的獎勵。我們行動的步數越多,它可能性的越多,也就是會越來越發散。因此,通常使用折扣未來獎勵(discounted future reward)代替。
這裡γ是0到1之間的折扣係數。越遙遠的獎勵,我們就越不把它當一回事。很容易看出,在時間t的折扣未來獎勵可以使用在時間t+1的折扣未來獎勵來表示。
如果我們設定了折扣因子γ=0,那麼我們的策略將是短視的,我們只依賴眼前的回報。如果我們想在即時獎勵和未來回報之間取得平衡,我們應該設定折扣係數為γ=0.9或這類的數字。如果我們的環境是確定的,並且相同的操作總是得到相同的獎勵,那麼我們可以設定折扣因子γ=1。
一個好的Proxy 原則是總是選擇一個能最大化(折扣)未來獎勵的行動。
Q-learning
在Q學習中,我們定義一個函數Q(s,a)表示當我們在狀態s中執行a動作時的最大折扣未來的獎勵,並從那個點繼續最佳化。
我們認為Q(s,a)的含義是:遊戲在狀態s實行動作a之後的最好的可能的分數是Q(s,a)。他被稱為Q函數,因為它表示給定狀態下某個動作的“品質”。
這聽起來像是一個令人費解的定義。如果我們僅僅知道當前的狀態和動作,而不知道在這個狀態和動作之後的狀態和動作,我們怎麼會在遊戲的末尾來進行對這個狀態和動作進行一個評分?是的,我們真的不行。但是,作為一個理論結構,我們可以假設存在這樣一個函數。閉上眼睛,重複五次:“q(s,a)存在,Q(s,a)存在,……”。感覺到了嗎?
如果你還不確信,那麼考慮一下擁有這樣一個函數的意義是什麼。假設你處於狀態,思考是否應該採取行動A或B。你想選擇在比賽結束時獲得最高分數的動作。一旦你有了神奇的Q函數,答案就很簡單。選擇具有最高值的行動!
這裡π代表政策的規則,指導我們如何在每個狀態選擇行動的規則。
好的,我們如何得到Q函數呢?讓我們只集中在一個轉換上面<s, a, r, s’>。就像上一節中的打折獎勵一樣,我們可以利用表達的狀態s’的Q函數來表達狀態s和行動a的Q函數。
這就是我們所說的貝爾曼公式。如果你想一想,這是非常合乎邏輯的——這種狀態和動作的最大未來獎賞是立即獎勵和下次狀態的最大未來獎勵。
強化學習中的主要思想是,我們可以反覆利用Bellman方程來近似Q函數。在最簡單的情況下,Q函數可以被作為一個table來進行實現,狀態和行動分別作為行和列。
Q學習演算法的要點如下所示:
α在演算法學習速率,控制多少以前的Q值和新提出的Q值之間的差異考慮在內。
特別是,當α=1,這就是Bellman等式。
我們在早期的學習階段,使用Q(s’,a’)的最大值來更新Q(s,a)的做法,有可能是錯的。然而,迭代逼近得更多,這個估計值就會更準確的。它已經表明,如果我們執行此更新的次數足夠多,那麼函數收斂,代表真實的Q值。
Deep Q Network
Breakout遊戲的環境的狀態可以由下面的幾個東西來進行定義:球的位置和方向,下面滑板的位置,每個磚塊的存在或不存在。然而,這種直觀的表述是特定於遊戲的。我們能想出更普遍的,適合所有遊戲的表示方法嗎?明顯的選擇是螢幕像素,它們隱含地包含了所有有關遊戲情況的資訊,除了球的速度和方向。兩個連續的螢幕就能夠計算這些。
如果我們如DeepMind論文中的同樣的預先處理用到遊戲畫面上。取出最後四張圖片,將他們重新剪裁為84×84,並且轉為256的灰階圖。我們將會得到約有25684×84×4 = 1067870個狀態.這麼大的數字,比宇宙的原子的數目還多的行數要存放在一個Q-table,是不可能做到的。有人可能會爭辯說,許多像素組合()不會出現,我們或許能用一個稀疏的表格,僅僅包含一些可以訪問到的點來急性表示。即便如此,大多數狀態都很少出現,但仍然會存在於Q-table中一段時間。理想情況下,我們很難預測哪些狀態是很少出現的。
這就是深入學習的有用武的地方。神經網路特別擅長於為高度結構化的資料提供良好的特性。我們可以用一個神經網路代表我們的Q函數,以狀態(四遊戲螢幕)和動作作為輸入和輸出對應的Q值。或者我們可以只是遊戲畫面,輸入和輸出的每一個可能的行動的Q值。這種方法的優點是,如果我們要執行更新或選擇最高Q值的行動,我們需要做的就是跑一次這個神經網路,然後就會得到立即所有可用行動的Q值。
Figure 3: Left: Naive formulation of deep Q-network. Right: More optimized architecture of deep Q-network, used in DeepMind paper.
The network architecture that DeepMind used is as follows:
這是一個經典卷積神經網路,它有三個卷積層,然後是兩個完全串連的層。熟悉對象識別網路的人可能會注意到沒有池層。但是,如果你真的考慮下它,池層會讓你有平移不變性,也就是網路會對照片中的對象的移動不敏感。這對於一個像ImageNet完全意義上的分類任務,但遊戲來說,球的位置是非常重要,決定了潛在的回報,我們不想放棄這個資訊!
輸入到網路四84×84灰階遊戲螢幕。網路的輸出為每個可能的動作的Q值(在Atari遊戲當中是18)。Q值可以是任何的真值,這使得它變成一個迴歸任務,可以進行簡單的平方誤差損失。
考慮一個轉換< s, a, r, s’ >。 在以前的Q-table演算法的更新規則必須與下列替代:
1、讓當前的狀態跑一次神經網路,來獲得所有行動的Q-values。
2、讓下一個狀態s’也跑一次神經網路,計算出這個輸出 max a’ Q(s’, a’).
3、然後設定Q(s,a)的Q函數為r + γmax a’ Q(s’, a’),對於所有其他的行動,將Q值設定為步驟1返回的那些值。對於所有其他的行動,將Q值目標一樣來自步驟1返回,使其他的輸出誤差0。
4、利用反向傳播更新權值。
Experience Replay
到現在,我們已經知道,如何去使用Q-learning和使用卷積神經網路來估計Q函數來對對未來的回報進行一個估計。但事實證明,使用非線性函數逼近的Q值不是很穩定。有一整套技巧,你必須用它來真正使它收斂。而且花了很長時間,幾乎一個星期在一個GPU上。
最重要的訣竅是經驗回放(experience replay)。在遊戲過程中,所有的經驗< s, a, r, s’>都儲存在回放記憶體中。在訓練網路的時候,從重播記憶中的隨機的小的批量(minibatches)會被用來取代最經常發生的轉換。這會打破了隨後的訓練樣本的相似性,這個反過來可能會將網路驅向一個局部的最小值。經驗回放同樣會使得訓練任務和一般的有監督學習更加相似,這會簡化調試和測試演算法的過程。人們可以真的從人類遊戲中收集所有的這些經驗,然後在此基礎上訓練網路。
Exploration-Exploitation
Q-learning是想要解決credit assignment problem,它會及時的向後傳播獎勵,直到這個獎勵到達到達那個關鍵的節點,這個關鍵的節點也就是獲得如此高獎勵的原因。但是我們還沒有處理exploration-exploitation這個困局。
首先觀察,當一個Q-table或一個Q-network隨機初始化之後,然後它的預測初始的時候,是隨機的。如果我們選擇一個行動的最高值,該行動實際上是隨機的和代理執行大概一次“探索”。隨著這個Q-函數收斂,它會返回更加一致的Q-值,那麼這個“探索”實際上慢慢減少了。所以可以說,Q-學習把探索作為演算法的一部分。但這種探索是“貪婪的”,它解決了它發現的第一個有效原則。解決上述問題的一個簡單而有效方法是:ε探索貪婪(ε-greedy exploration),也就是帶有機率ε,來選擇一個隨機的行動。在1-ε的機率下,遵循貪心的策略。在他們的系統DeepMind實際上隨著時間的推移會減少ε,從1到0。開始的時候,系統會完全隨機地最大化進行探索空間,然後它會固定到一個固定的探索率。
Deep Q-learning Algorithm
在上面的所有東西,組合成了最終的Deep Q-learning 演算法,包括了experience replay。
DeepMind其實還用了更多的技巧,比如說,目標網路(target network),錯誤剪裁(error clipping),回報剪裁(reward clipping)等等,但這些都超出了這介紹的範圍。這個演算法最令人驚異的部分是它能學到任何東西。想想看–因為我們的Q函數隨機初始化,它最初輸出完全是沒用的。並且我們使用這些沒用的東西(下個狀態的最優值)作為網路的目標,僅僅有時候,會出現一些小的獎勵。聽起來很瘋狂,怎麼能學到任何有意義的東西呢?事實是,它確實能夠學到。
Deep Q Network的淺析介紹