首页
/
每日頭條
/
圖文
/
python量化與機器學習
python量化與機器學習
更新时间:2024-10-13 19:21:55

Q-learning 是強化學習中的一種常見的算法,近年來由于深度學習革命而取得了很大的成功。本教程不會解釋什麼是深度 Q-learning,但我們将通過 Q-learning 算法來使得代理學習如何玩 tic-tac-toe 遊戲。盡管它很簡單,但我們将看到它能産生非常好的效果。

要理解本教程,不必有任何關于強化學習的知識,但最好有一定的微積分和線性代數基礎。首先,我們将通過一些必要的背景知識來快速了解強化學習,然後我們将介紹 Q-learning 算法,最後我們将介紹如何通過它來使得一個代理學會玩 tic-tac-toe。

強化學習簡介

強化學習是指代理在不同狀态的環境中,根據某種獎勵函數來優化其行為的一門學科。在本教程中,環境是 tic-tac-toe 遊戲,它有明确定義的動作,代理必須決定選擇哪些動作才能赢得遊戲。此外,代理人赢得遊戲将獲得一定獎勵,這鼓勵它在遊戲中學習更好的策略。

強化學習的一個常見框架是(有限)馬爾可夫決策過程(MDP, Markov Decision Process)。它幫助我們定義一組動作和狀态,代理基于這些動作和狀态進行決策。

MDP 通常包括有:

· 一組有限的動作 A(在遊戲面闆上所有可以放置标記的位置)

· 一組有限的狀态 S(遊戲面闆上的所有可能情形)

· 一種獎勵函數 R(s,a)

· 轉移函數 T(s,a,s')

轉換函數給出了在執行動作 a 時從狀态 s 移動到 s' 的概率。當我們不确定動作是否總是産生期望結果時,轉移函數十分必要。但是需要注意的是,對于 tic-tac-toe 遊戲,我們确切地知道每個動作會做什麼,所以我們不會使用轉移函數。

python量化與機器學習(Python手寫強化學習Q-learning算法玩井字棋)1

在本例中,當前玩家可以執行六個可能的操作

MDP框架幫助我們将問題形式化,這樣我們就可以根據當前狀态确定哪些操作将在遊戲期間使代理的總回報最大化。本教程中獎勵函數 R(s,a) 将非常簡單:

· 如果代理在狀态 s 執行一個操作 ,最終赢得遊戲,那麼 R(s,)=1.

· 如果代理在狀态 s 執行一個操作 ,最終輸了遊戲,那麼 R(s,)=-1.

· 否則,R(s,)=0.

在強化學習中,我們通常找到一個最優策略,代理通過該策略決定選擇哪些動作。本教程中我們使用 Q-learning,簡單地将策略表示為當代理處于s狀态時執行動作 a 使函數 Q(s,a) 最大化:

python量化與機器學習(Python手寫強化學習Q-learning算法玩井字棋)2

Q-learning 中的狀态更新

Q(s,a) 即代理在 s 狀态下選擇動作 a,則在遊戲最後給出對應的獎勵或懲罰。由于代理希望将其報酬最大化,因此它會選擇使 Q 最大化的動作。

python量化與機器學習(Python手寫強化學習Q-learning算法玩井字棋)3

在場景中,首先計算當前玩家X所有動作的Q值,然後選擇Q值最大的動作

要計算 Q(s,a),代理必須探索所有可能的狀态和動作,同時從獎勵函數 R(s,a) 獲得反饋。在 tic-tac-toe 遊戲中,我們通過讓代理與對手進行多場比賽來疊代更新 Q(s,a),用于更新 Q 的方程如下:

python量化與機器學習(Python手寫強化學習Q-learning算法玩井字棋)4

· 在當前狀态 s 下執行動作 a

· 考慮執行動作後的所有狀态,計算其中的最大 Q 值。是執行動作 a 之後的新狀态, 是下一個狀态中的最佳動作

· 學習率 α 決定我們覆蓋舊值的程度,本例中将使用 α=0.1

· 折現因子 γ 決定了在當前時間步 t 中,未來的獎勵應加權多少。通常選擇 γ=0.9

Q-learning 算法實現

為了得到一個經過充分訓練的代理,我們需要獲得 Q(s,a) 的值,這将通過讓兩個代理互相比賽來完成。首先,引入一個概率 ε,即每個代理選擇一個随機動作,否則,它将根據 Q(s,a) 選擇最佳動作。這樣,我們就保證了學習的平衡,使代理有時探索新的行為,而其他時候則利用代理已經學習到的信息來執行動作。

訓練階段可以通過以下僞代碼進行描述:

Initialise: Q(s,a) = 0, starting state s, starting player P, iterations N for t = 0 : N With probability ε : P picks random action a Else, pick action a that maximise Q(s,a) Observe new state ŝ and reward R(s,a) If current player is our agent, update Q(s,a) = (1-α)Q(s,a) α[R(s,a) γ*max(Q(ŝ,â))] s = ŝ Switch turn, P = the other player

值得注意的是,疊代次數 N 必須相對較大,本例中進行了大約 500000 次疊代。此外,Q(s,a) 可以通過 Python dict 的數據格式進行存儲;如果我們将 (s,a) 表示為整數,則可以通過二維數組的數據格式進行存儲。最後,可以随時間改變概率 ε,以強調在早期疊代中更多的随機探索,從而加快學習速度。

在用上述算法訓練代理之後,可以保存 Q(s,a) 并在想要進行比賽時加載它。然後,代理隻需遵循最優策略,選擇使 Q(s,a) 最大化的動作來赢得比賽。雖然由于 tic-tac-toe 遊戲并不複雜,代理并沒有獲得高級智能,但是嘗試這個方法可以學習如何實現 Q-learning 并了解它是如何工作的。

結語

本文首先介紹了馬爾可夫決策過程以及如何在強化學習中應用它。然後使用狀态、行動、獎勵函數來對 tic-tac-toe 遊戲進行建模。除此之外,我們還定義了函數 Q(s,a),該函數通過該狀态 s 中選擇動作 a 來量化預期的獎勵,并通過重複玩遊戲來計算 Q(s,a)。

作者:Rickard Karlsson

deephub翻譯組:oliver lee

本文github代碼: RickardKarl/bill-the-bot

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
漂流瓶怎樣用
漂流瓶怎樣用
小編一般都是自己寫文章,但是前兩天逛知乎的時候發現一篇很好玩的文章,經和作者溝通以後轉載過來。博大家一笑!同時深深折服于網友腦洞之大,大家還有什麼别的玩法請回複。還不去拖地還在這玩手機!單身汪還不去脫單還玩手機,活該你單身!我要土雞随便把奶...
2024-10-13
廚房天然氣每天都要關嗎
廚房天然氣每天都要關嗎
天然氣是一種無色無味的能源,在使用的過程中,要是出現天然氣洩漏,自己是很難察覺的。正确使用天然氣非常重要,但使用完是先關氣再關火?還是先關火再關氣呢?可能很少人知道...生活當中很多人認為應該是先關閉燃氣,再過一會關火。因為在使用天然氣後,...
2024-10-13
梁超怡小時候
梁超怡小時候
據港媒報道,《2022年香港小姐精選》19位佳麗名單将出爐,并将于9月14日進行最終決賽遴選出十位佳麗,其中素有“翻版孫藝珍”的梁超怡,成為衆佳麗中的熱門人選之一,快速吸引衆多網友關注,并迅速被起底。據悉,梁超怡早在參選香港小姐競選之前,早...
2024-10-13
銀魂伊麗莎白錦集
銀魂伊麗莎白錦集
銀魂伊麗莎白出場伊麗莎白自從第十五話·物似主人形是坂本送給桂的禮物,出場後,一直保有很高的上鏡率,甚至一度超過其主人桂,比如紅櫻篇,第156話·走入路邊攤需要微妙的勇氣,在蓮蓬篇(動畫232—236)詳細介紹了伊莉莎白的生世,包括生活的星球...
2024-10-13
懷孕期間發現有流産的征兆
懷孕期間發現有流産的征兆
文/孕嬰幫,版權歸本作者所有一般來說,女性在懷孕之後,是不會再來月經的,但也有一些媽媽會說自己在孕後還有來月經的現象,這到底是怎麼回事呢?孕後來月經的原因由于個體差異等原因,有些女性在懷孕後卵巢分泌的性激素,尤其是孕激素水平較低,導緻一小部...
2024-10-13
Copyright 2023-2024 - www.tftnews.com All Rights Reserved