使用 Tensorflow 代理進行強化學習 [2022]
已發表: 2021-01-01隨著 DeepMind 的 AlphaGo 方法最近在擊敗世界圍棋冠軍選手方面取得成功,強化學習獲得了寶貴的人氣。 AlphaGo 方法部分是通過對深度神經網絡的強化學習來教育的。
這種學習方式是機器學習與經典有監督和無監督範式相比的一個顯著特徵。 在強化學習中,網絡使用深度神經網絡響應環境數據(稱為狀態),並影響代理的行為以嘗試優化獎勵。
這種技術幫助網絡學習如何進行體育運動,例如 Atari 或其他視頻遊戲,或者可以重寫為遊戲形式的其他挑戰。 在本教程中,一個常見的強化學習模型,我將介紹 Q 學習的廣泛原理,並演示如何將深度 Q 學習融入 TensorFlow。
目錄
強化學習簡介
如上所述,強化學習由一些基本實體或原則組成。 它們是:創造條件和獎勵的環境,以及在給定環境中執行動作的實體。 在下圖中,您可以看到這種交互:
在這種情況下,智能體的任務是分析它接收到的狀態和激勵信息,並選擇一種行為來最大化它從獎勵中接收到的輸入。 代理通過與世界的重複接觸來學習,或者換句話說,通過重複玩遊戲來學習。
為了成功,代理必須:

1. 了解狀態、行為和由此產生的激勵之間的聯繫
2. 確定從 (1) 中選擇的最佳著法
實施 (1) 需要定義一組可用於通知 (2) 和 (2) 的原則,稱為操作策略。 使用深度 Q 應用 (1) 和 (2) 的最常見方法之一是 Deep Q 網絡和 epsilon-greedy 策略。
學習:最受初學者歡迎的 5 個 TensorFlow 項目
Q學習
Q 學習是一種基於價值的方式來傳遞數據以判斷代理可以採取哪些行動。 創建一個表格來總結在一個狀態下對多個遊戲採取行動的好處是一個最初直觀的概念,即生成作為行動基礎的原則。 這將跟踪最有益的運動。 首先,讓我們考慮一個簡單的遊戲,每個狀態都有 3 個狀態和兩個潛在動作——一張表可以代表這個遊戲的獎勵:
行動 1 | 行動 2 | |
狀態 1 | 0 | 10 |
狀態 2 | 10 | 0 |
狀態 3 | 0 | 10 |
在上表中可以看到,對於這個簡單的遊戲,當智能體處於狀態 1 並採取行動 2 時,如果採取行動 1,它將獲得 10 的獎勵,但獎勵為零。 在狀態 2 中,條件相反,狀態 3 最終類似於狀態 1。如果代理任意探索這個遊戲併計算出在三種狀態中的任何一種中獲得最多獎勵的行為(例如,將這些知識存儲在一個數組中),所以上表的實際形式將有效地被知道。
換句話說,如果代理真的選擇了它過去學到的提供最高獎勵的行為(有效地學習了上表的某種形式),它就會學會如何有效地玩遊戲。 當簡單地通過求和構建表格是合適的時候,為什麼我們需要像 Q 學習和神經網絡這樣的奇思妙想?
遞延獎勵
嗯,第一個明顯的答案是上面的遊戲非常簡單,只有 3 個狀態和每個狀態 2 個動作。 真正的遊戲要復雜得多。 上述案例中的延遲獎勵原則是另一個缺失的重要概念。 智能體必須學會採取措施正確玩最逼真的遊戲,這可能不一定會帶來獎勵,但可能會在以後產生顯著的獎勵。
行動 1 | 行動 2 | |
狀態 1 | 0 | 5 |
狀態 2 | 0 | 5 |
狀態 3 | 0 | 5 |
狀態 4 | 20 | 0 |
如果在上述博弈中的所有狀態下都採取了行動 2,則智能體回到狀態 1,即回到起點。 在狀態 1 到 3 中,它甚至獲得了 5 分。 因此,如果在所有狀態 1-3 中都採取了行動 1,則代理將前往下一個狀態,但在進入狀態 4 之前不會獲得獎勵,此時它將獲得 20 的獎勵。
換句話說,如果代理不採取行動 2 來獲得 5 的瞬時獎勵,它會更好,而是可以選擇行動 1 連續通過狀態以獲得 20 的獎勵。代理希望能夠當延遲獎勵值太高時,選擇導致延遲獎勵的行為。
另請閱讀: Tensorflow 圖像分類
Q 學習法則
這鼓勵我們澄清 Q 學習規則。 在深度 Q 學習中,神經網絡需要將當前狀態 s 作為向量,並為該狀態下的每個潛在行為 a 返回一個 Q 值,即對於兩者都需要返回 Q(s, a) s和a。 這個 Q(s, a) 需要在訓練中通過以下規則進行修改:

Q(s,a) = Q(s,a) + alp[r+γmax Q(s',a ') – Q(s,a)] + alp[r+ γmax Q(s',a')
這條法律需要一些拆包才能升級。 其次,您可以看到 Q(s, a) 的新值需要通過在上述等式的右側插入一些額外的位來更改其現有值。 從左到右切換。 暫時忘記阿爾法。 在方括號內,我們看到第一個單詞是 r,它代表在各州採取行動所獲得的獎勵。
這是即時獎勵; 尚未涉及延遲滿足。 下一個詞是遞延激勵估計。 首先,我們有一個 γ 值,它可以忽略延遲獎勵效應,它總是介於 0 和 1 之間。稍後會詳細介紹。 下一項 maxa'Q(s, 'a') 是下一個條件中可用的最大 Q 值。
讓我們讓事情變得簡單一些——代理從狀態開始,採取行動 a,在狀態結束,然後代碼指定狀態中 Q 的最大值,即 max a 'Q(s',a')。 那麼,為什麼要考慮 Max a 'Q(s',a') 意義呢? 如果它生效並處於狀態 s,則表示將全部可能的獎勵交給處理程序。
然而,考慮到永遠等待可能的激勵對代理來說是不可取的,γ 對這個值打了折扣——代理最好用最少的時間瞄準最大的獎品。 請注意,Q(s',a)' 值還隱含地保留了之後經濟的最高折扣激勵,即 Q(s',a)',因為它保持了狀態 Q(s',a) 的折扣動機' 等等。
這是因為智能體不僅會根據即時獎勵 r 選擇動作,還會根據潛在的未來折扣激勵來選擇動作。
深度 Q 學習
深度 Q 學習在整個訓練階段都遵循 Q 學習更新規律。 換句話說,創建一個將狀態 s 作為其輸入的神經網絡,然後訓練網絡為狀態 s 中的每個行為生成適當的 Q(s, a) 值。 然後將通過採取具有最大 Q(s, a) 值的動作(通過從神經網絡的輸出中獲取 argmax)來選擇代理的動作。 這可以在下圖的第一步中看到:
動作選擇和訓練步驟——深度 Q 學習

一旦進行了此轉移並選擇了一個動作,代理將執行該動作。 然後,代理將獲得有關從該狀態採取行動的激勵措施的反饋。 按照 Q 學習指南,我們現在要做的下一步是訓練網絡。 在第二部分中,這可以在上圖中看到。
狀態向量 s 是網絡訓練的 x 輸入數組,y 輸出訓練樣本是動作選擇過程中收集的 Q(s, a) 向量。 但是,對應於動作 a 的 Q(s,a) 值之一被設置為具有 r+γQ(s',a') 的目標,如上圖所示。 通過以這種方式訓練網絡來告訴代理什麼行為將是其長期利益的最佳選擇,網絡的 Q(s, a) 輸出向量將隨著時間的推移變得更強。
強化學習的優點:
- 強化學習可用於解決傳統方法無法克服的極具挑戰性的挑戰。
- 選擇這種策略是為了產生長期的結果,這是很難實現的。
- 這種學習模式有點類似於人類的學習。 因此,它接近於完美。
- 該模型將糾正在測試階段發生的錯誤。
- 如果模型糾正了錯誤,則發生相同錯誤的機會會略低。
- 它將為要解決的特定問題創建最佳範例。
強化學習的缺點
- 強化學習作為一種方案在許多不同方面都是不正確的,但正是這種品質使它變得有用。
- 過多的強化學習會導致狀態不堪重負,從而降低結果。
- 強化學習不適合用於解決基本問題。
- 強化學習需要大量的智能和大量的計算。 這是數據飢渴。 這就是為什麼它非常適合視頻遊戲,因此您可以一遍又一遍地玩遊戲,並且似乎可以獲得很多細節。
- 強化學習假設宇宙是馬爾可夫的,但事實並非如此。 馬爾可夫模型描述了一系列可能的事件,其中每次發生的概率僅取決於前一個事件中達到的條件。
接下來是什麼?
如果您想掌握機器學習並學習如何訓練代理玩井字遊戲、訓練聊天機器人等,請查看 upGrad 的機器學習和人工智能 PG 文憑課程。
什麼是 TensorFlow?
Python 是機器學習中常用的編程語言,它帶有大量的函數庫。 TensorFlow 就是谷歌推出的此類 Python 庫之一,它支持快速高效的數值計算。 它是由 Google 創建和維護的開源庫,廣泛用於開發深度學習模型。 TensorFlow 還與其他包裝庫一起使用以簡化流程。 與其他一些也用於深度學習的數值庫不同,TensorFlow 是為應用程序的研究和開發以及生產環境功能而開發的。 它可以在具有單 CPU、移動設備和分佈式計算機系統的機器上執行。
在機器學習中還有哪些其他庫,例如 TensorFlow?
在早期,機器學習工程師過去常常為不同的機器學習算法手動編寫所有代碼。 現在,每次為類似的算法、統計和數學模型編寫相同的代碼行不僅耗時,而且效率低下且乏味。 作為一種解決方法,引入了 Python 庫以重用函數並節省時間。 Python 的庫集合龐大且用途廣泛。 除了 TensorFlow,Python 最常用的一些庫是 Theano、Numpy、Scipy、Pandas、Matplotlib、PyTorch、Keras 和 Scikit-learn。 Python 庫也很容易與 C/C++ 庫兼容。
使用 TensorFlow 有什麼優勢?
TensorFlow 的眾多優勢使其成為在深度學習和機器學習中開發計算模型的非常流行的選擇。 首先,它是一個開源平台,通過圖形表示支持增強的數據可視化格式。 程序員還可以輕鬆地使用它來調試節點,從而節省時間並消除檢查整個神經網絡代碼長度的需要。 TensorFlow 支持各種操作,開發者可以在這個平台上構建任何類型的模型或系統。 它很容易與其他編程語言兼容,如 Ruby、C++ 和 Swift。