【RL系列】Multi-Armed Bandit問題筆記

這是我學習Reinforcement Learning的一篇記錄總結,參考了這本介紹RL比較經典的Reinforcement Learning: An Introduction (Drfit) 。這本書的正文部分對理論的分析與解釋作的很是詳細,而且也給出了對結論詳盡的解析,可是把問題的解決和實現都留到到了課後題,因此本篇文章主要側重與對Multi-Armed Bandit問題解決算法的實現以及對實現中可能遇到的問題進行一個總結與記錄。此外,若是困於書中對於理論解釋的冗長,能夠參考下面這兩篇文章(推薦閱讀順序爲:書 → 下面這兩篇 → 本篇):算法

從Multi-arm Bandits問題分析 - RL進階框架

《Reinforcement Learning》 讀書筆記 2:多臂Bandit(Multi-armed Bandits)學習

問題分析

Multi-Armed Bandit問題是一個十分經典的強化學習(RL)問題,翻譯過來爲「多臂抽獎問題」。對於這個問題,咱們能夠將其簡化爲一個最優選擇問題。spa

假設有K個選擇,每一個選擇都會隨機帶來必定的收益,對每一個個收益所服從的機率分佈,咱們能夠認爲是Banit一開始就設定好的。舉個例子,對三臂Bandit來講,每玩一次,能夠選擇三個臂杆中的任意一個,那麼動做集合Actions = [1, 2, 3],這裏的一、二、3分別表示一號臂杆,二號臂杆和三號臂杆。掰動一號號臂杆時,得到的收益服從均勻分佈U(-1, 1),也就是說收益爲從-1到1的一個隨機數,且收益的均值爲0。那麼二號臂杆和三號臂杆也一樣有本身收益的機率分佈,分別爲正態分佈N(1, 1)和均勻分佈U(-2, 1)。這裏所須要解決關鍵問題就是,如何選擇動做來確保實驗者能得到的收益最高。.net

咱們能夠從收益的機率分佈上發現二號臂杆的收益均值最高,因此每次實驗拉動二號便可,最優選擇即爲二號。可是對於實驗者來講收益機率分佈是個黑箱,並不能作出直接判斷,因此咱們使用RL來估計出那個最優的選擇。翻譯

算法實現

這裏以Sample Average Epsilon-greedy算法爲例,給出RL解決Multi-Armed Bandit問題的大體框架:code

1. 隨機生成收益均值序列,這裏咱們假設全部選擇對應的收益機率分佈均爲方差相同的正態分佈,只不過各個分佈的均值不一,這裏使用Matlab代碼來進行解釋orm

% 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,則隨機選擇動做;若是大於,選擇當前平均收益最高的那個動做。blog

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值get

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 = \frac{\sum Q}{n}\\

須要注意的是,在計算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

相關文章
相關標籤/搜索