強化學習第二章總結: e-greedy算法,梯度上升算法,the 10-armed bandit problem

學習強化學習《Reinforcement Learning An Introduction》,總結第二章的知識,包含一個問題,兩個算法。
問題:the 10-armed bandit problem
算法:e-greedy、剃度上升

仿真代碼見附帶資料:the 10-armed bandit problem

1. 問題描述:the 10-armed bandit problem

這是一個重複做選擇的問題。一共有10個選擇,重複選擇1000次。

每次選擇都會有獎勵,獎勵是符合固定的正態分佈的。

所以做不同的選擇,獲得的獎勵不同;每次做的選擇,儘管選擇相同,但獎勵也不同。

你的目的是,連續做了1000次選擇後,得到的回報總和越高越好。

在這裏插入圖片描述

這個圖是一個特殊的 10-armed bandit problem。特殊之處在於q(a)q_\star (a)的值。

重要:10-armed bandit problem是一個系列問題的總稱,每個特殊的10-armed bandit problem之間的不同之處在於q(a)q_\star (a)的值的不同。選擇選項aa後,獲得獎勵是符合正態分佈的N(q(a),1)N(q_\star(a),1)

2. 算法總結

2.1 算法1:ϵgreedy\epsilon-greedy algorithm

你是不知道q(a)q_\star(a)的具體值的,所以首先要對每個選擇的行爲值做個估計,因爲這個估計值是在不斷更新的,所以定義爲Qt(a)Q_t( a ),意思是在tt時刻,選擇行爲aa後,估計得到的獎勵值。

這個算法的大概步驟是:每次選擇執行的行爲是估計值最大的行爲,小概率的情況下,隨機選擇其他的行爲。

算法步驟如下:

  1. 輸入:每個行爲的真值q(a)q_\star(a)NactionN_{action}NstepN_{step},算法參數$ \epsilon $

  2. 初始化:

    1. for a = 1~N_action
      1. Q(a)=0Q(a)=0;
      2. N(a)=0N(a)=0;
    2. R_total_bar(1) = 0;
  3. for t = 1~N_step

    1. A=argmaxaQt(a)A=\arg\max_a Q_t(a) with probability 1ϵ1-\epsilon;

      A=A= a random action with probability ϵ\epsilon

    2. 計算回報R=bandit(A)=N(q(A),1)R=bandit(A)=N(q_\star(A),1)

    3. 更新全局均值回報R_total_bar(t+1) =R_total_bar(t)+1t(RR_total_bar(t))= R\_total\_bar(t)+\dfrac{1}{t}(R-R\_total\_bar(t));

    4. N(A)+=1N(A)+=1;

    5. Q(A)=Q(A)+1N(A)[RQ(A)]Q(A)=Q(A)+\dfrac{1}{N(A)}[R-Q(A)];

  4. 輸出:全局均值回報R_total_bar(t)

2.2 算法2:Gradient Bandit Algorithms

類似於:隨機梯度上升算法

在t時刻,行爲a的偏好程度
Ht(a) H_t(a)
在t時刻,選擇行爲a的概率:策略
πt(a)=Pr{At=a}=eHt(a)b=1keHt(b) \pi_t(a)=\Pr\{A_t=a\}=\dfrac{e^{H_t(a)}}{\sum_{b=1}^ke^{H_t(b)}}
算法對每個行爲偏好的更新公式:
Ht+1(At)=Ht(At)+α(RtRˉt)(1πt(At)),Ht+1(a)=Ht(a)α(RtRˉt)πt(At),aAt \begin{aligned}H_{t+1}(A_t)&=H_t(A_t)+\alpha(R_t-\bar{R}_t)(1-\pi_t(A_t)), \\H_{t+1}(a)&=H_t(a)-\alpha(R_t-\bar{R}_t)\pi_t(A_t), a\neq A_t\end{aligned}
Rˉt\bar{R}_ttt時刻之前獲得的獎勵的均值,這個作爲一個參考值,如果當前獲得的獎勵大於均值,就增加偏好值,如果小於均值,就減小偏好值。其他沒有選擇的行爲的偏好值就向相反方向移動。

算法總結

首先給每個行爲都初始化一個偏好程度Ht(a)H_t(a),每次選擇行爲的時候,根據偏好程度,計算選擇每個行爲的概率(策略)πt(a)\pi_t(a),然後根據概率選擇一個行爲,然後更新每個行爲的偏好程度。

算法步驟如下:

  1. 輸入:q(a)q_\star(a)NactionN_{action }NstepN_{step }α\alpha
  2. 初始化:
    1. for a = 1~N_action
      1. N(a)=0N(a)=0,每個行爲的次數;
      2. H(a)=0H(a)=0,每個行爲的偏好值;
      3. Rˉ(a)=0\bar{R}(a)=0,每個行爲的均值回報;
    2. 全局均值回報 R_total_bar(1) = 0;
  3. for t = 1 ~ N_step
    1. for a = 1~N_action
      1. 計算π(a)=eHt(a)b=1NactioneHt(b)\pi(a)=\dfrac{e^{H_t(a)}}{\sum_{b=1}^{N_{action}} e^{H_t(b)}};
    2. 生成隨機數,根據概率選擇一個行爲A=aA=a;
    3. N(a)+=1N(a)+=1;
    4. 計算回報R(t)=bandit(A)=N(q(A),1)R( t ) =bandit(A)=N(q_\star(A),1)
    5. 計算均值回報:Rˉ(a)=Rˉ(a)+1N(a)(RRˉ(a))\bar{R}(a)=\bar{R}(a)+\dfrac{1}{N(a)}(R-\bar{R}(a));
    6. 更新全局均值回報:R_total_bar(t+1) = R_total_bar(t)+1/t*(R-R_total_bar(t));
    7. 更新偏好值
      1. for a = 1~N_action
        1. if a==A
          1. H(a)=H(a)+α(R(t)Rˉ(a))(1π(a))H(a)=H(a)+\alpha(R(t)-\bar{R}(a))(1-\pi(a))
        2. else
          1. H(a)=H(a)α(R(t)Rˉ(a))π(a)H(a)=H(a)-\alpha(R(t)-\bar{R}(a))\pi(a)
  4. 輸出:R_total_bar

3. 仿真

因爲存在不確定性,每次的回報都是服從一個正態分佈,所以每次做實驗的結果也是不一樣的。爲了說明問題,我們做2000次仿真實驗,每次仿真實驗都是,然後取平均值。

對於某一$\epsilon $的仿真步驟如下:

  1. Naction=10N_{action} = 10;
  2. $N_{step} = 1000 $;
  3. $N_{normlize} = 2000 $;
  4. for i = 1:N_normlize
    1. 初始化問題:
      1. for a = 1~N_action
        1. q(a)=N(0,1)q_{\star}(a)=N(0,1);
    2. 運行強化學習算法;
      1. for j = 1~4 (前三次是算法1,第4,5次是算法2)
        1. ϵ(j)=00.010.1\epsilon(j)=0;0.01;0.1
        2. alpha = 0.1; 0.4
        3. 運行強化學習算法
        4. 得出Rˉijtotal(t)\bar{R}_{ij}^{total}(t)
    3. 計算隨時間變化的均值回報
  5. for i = 1:N_step
    1. ii求均值Rˉjtotal_normlize(t)\bar{R}_j^{total\_normlize}(t);
  6. 作圖,在一個圖中,畫出三個Rˉjtotal_normlize(t)\bar{R}_j ^{total\_normlize}(t)與時間的曲線圖

4. 仿真結果分析

在這裏插入圖片描述

紅色曲線:e-greedy算法 e=0

綠色曲線:e-greedy算法 e=0.01

藍色曲線:e-greedy算法 e=0.1

黃色曲線:梯度上升,alpha=0.1

黑色曲線:梯度上升,alpha=0.4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章