這是我學習Reinforcement Learning的一篇記錄總結,參考了這本介紹RL比較經典的Reinforcement Learning: An Introduction (Drfit) 。這本書的正文部分對理論的分析與解釋做的非常詳細,並且也給出了對結論詳盡的解析,但是把問題的解決和實現都留到到了課后題,所以本篇文章主要側重與對Multi-Armed Bandit問題解決算法的實現以及對實現中可能遇到的問題進行一個總結與記錄。此外,如果困於書中對於理論解釋的冗長,可以參考下面這兩篇文章(推薦閱讀順序為:書 → 下面這兩篇 → 本篇):
《Reinforcement Learning》 讀書筆記 2:多臂Bandit(Multi-armed Bandits)
問題分析
Multi-Armed Bandit問題是一個十分經典的強化學習(RL)問題,翻譯過來為“多臂抽獎問題”。對於這個問題,我們可以將其簡化為一個最優選擇問題。
假設有K個選擇,每個選擇都會隨機帶來一定的收益,對每個個收益所服從的概率分布,我們可以認為是Banit一開始就設定好的。舉個例子,對三臂Bandit來說,每玩一次,可以選擇三個臂桿中的任意一個,那么動作集合Actions = [1, 2, 3],這里的1、2、3分別表示一號臂桿,二號臂桿和三號臂桿。掰動一號號臂桿時,獲得的收益服從均勻分布U(-1, 1),也就是說收益為從-1到1的一個隨機數,且收益的均值為0。那么二號臂桿和三號臂桿也同樣有自己收益的概率分布,分別為正態分布N(1, 1)和均勻分布U(-2, 1)。這里所需要解決關鍵問題就是,如何選擇動作來確保實驗者能獲得的收益最高。
我們可以從收益的概率分布上發現二號臂桿的收益均值最高,所以每次實驗拉動二號即可,最優選擇即為二號。但是對於實驗者來說收益概率分布是個黑箱,並不能做出直接判斷,所以我們使用RL來估計出那個最優的選擇。
算法實現
這里以Sample Average Epsilon-greedy算法為例,給出RL解決Multi-Armed Bandit問題的大致框架:
1. 隨機生成收益均值序列,這里我們假設所有選擇對應的收益概率分布均為方差相同的正態分布,只不過各個分布的均值不一,這里使用Matlab代碼來進行解釋
% 10-Armed Bandit K = 10; AverReward = randn([1 K]); % Reward for each Action per experiment % Reward(Action) = normrnd(AverReward(Action), 1);
2. 依據epsilon-greedy判斷當前應當選擇的動作。在每次實驗開始時,隨機一個大於0小於1的值,如果該值小於epsilon,則隨機選擇動作;如果大於,選擇當前平均收益最高的那個動作。
N = 1000 % 1000 experiments for n = 1:N [max i] = max(Q); if(max~=0 & rand(1) < 1 - epsilon) Action = i; else Action = unidrnd(K); end % Q is a set of records of current average reward. % Action is in {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} % Q(1) represents current average reward for action = 1. end
3. 使用增量形式實現更新當前平均收益Q值
N = 1000 % 1000 experiments for n = 1:N [max i] = max(Q); if(max~=0 & rand(1) < 1 - epsilon) Action = i; else Action = unidrnd(K); end % Q is a set of records of current average reward. % Action is in {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} % Q(1) represents current average reward for action = 1. Reward(Action) = normrnd(AverReward(Action), 1); N(Action) = N(Action) + 1; Q(Action) = (Reward(Action) - Q(Action))*(1/N(Action)) + Q(Action); end
評價指標
依據 Reinforcement Learning: An Introduction (Drfit) 中關於這一部分的結論分析,主要的兩個評價指標是Average Reward和Optimal Action Rate。這兩個指標都是用來評價不同算法的優劣程度的。這里的Average Reward和先前提到的當前收益均值是有所不同的。參照上一部分算法實現中給的例子,每次學習過程需要進行1000次實驗,每次學習完成后則會得到一個最優估計值,將最優估計值Q記錄下來並進行下一次學習,當進行n次學習后,評價收益均值即為這n個Q值的均值,給出Average Reward的計算方法:
需要注意的是,在計算Average Reward(AR)時,各動作的收益概率分布需要保持不變。不同的算法得到的AR值也不同,通常來說一個算法的AR值越高表明依據該算法獲得的最優估計值與實際的最優值間的差距越小,簡單來說就是該算法的可靠性越高。
Optimal Action Rate(OAR) 表示最佳動作選擇率,當進行多次學習時,計算最優估計值與實際最優值速對應的動作相符的頻率,將其近似為一個算法的OAR。通常來說,一個算法的OAR越高,說明該算法估計的成功率越高,穩定性越好。
這里給出不同epsilon值所對應不同的epsilon-greedy算法的AR與OAR的對比。下面先給出實驗的具體參數設置:
- 10-Armed Bandit,也就是說K = 10
- Epsilon = [0 0.01 0.1 1]
- 收益服從正態分布N(Reward(Action), 1)
- 每次學習實驗次數為500次
- 學習次數為500次
下圖給出了隨着實驗次數的增加,Average Reward的變化圖像:
后續請關注:https://blog.csdn.net/baidu_37355300/article/details/80869577