强化学习第二章总结: 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次选择后,得到的回报总和越高越好。

强化学习第二章总结: e-greedy算法,梯度上升算法,the 10-armed bandit problem_第1张图片

这个图是一个特殊的 10-armed bandit problem。特殊之处在于 q ⋆ ( a ) q_\star (a) q(a)的值。

重要:10-armed bandit problem是一个系列问题的总称,每个特殊的10-armed bandit problem之间的不同之处在于 q ⋆ ( a ) q_\star (a) q(a)的值的不同。选择选项 a a a后,获得奖励是符合正态分布的 N ( q ⋆ ( a ) , 1 ) N(q_\star(a),1) N(q(a),1)

2. 算法总结

2.1 算法1: ϵ − g r e e d y \epsilon-greedy ϵgreedy algorithm

你是不知道 q ⋆ ( a ) q_\star(a) q(a)的具体值的,所以首先要对每个选择的行为值做个估计,因为这个估计值是在不断更新的,所以定义为 Q t ( a ) Q_t( a ) Qt(a),意思是在 t t t时刻,选择行为 a a a后,估计得到的奖励值。

这个算法的大概步骤是:每次选择执行的行为是估计值最大的行为,小概率的情况下,随机选择其他的行为。

算法步骤如下:

  1. 输入:每个行为的真值 q ⋆ ( a ) q_\star(a) q(a) N a c t i o n N_{action} Naction N s t e p N_{step} Nstep,算法参数$ \epsilon $

  2. 初始化:

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

    1. A = arg ⁡ max ⁡ a Q t ( a ) A=\arg\max_a Q_t(a) A=argmaxaQt(a) with probability 1 − ϵ 1-\epsilon 1ϵ;

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

    2. 计算回报 R = b a n d i t ( A ) = N ( q ⋆ ( A ) , 1 ) R=bandit(A)=N(q_\star(A),1) R=bandit(A)=N(q(A),1)

    3. 更新全局均值回报R_total_bar(t+1) = R _ t o t a l _ b a r ( t ) + 1 t ( R − R _ t o t a l _ b a r ( t ) ) = R\_total\_bar(t)+\dfrac{1}{t}(R-R\_total\_bar(t)) =R_total_bar(t)+t1(RR_total_bar(t));

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

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

  4. 输出:全局均值回报R_total_bar(t)

2.2 算法2:Gradient Bandit Algorithms

类似于:随机梯度上升算法

在t时刻,行为a的偏好程度
H t ( a ) H_t(a) Ht(a)
在t时刻,选择行为a的概率:策略
π t ( a ) = Pr ⁡ { A t = a } = e H t ( a ) ∑ b = 1 k e H t ( b ) \pi_t(a)=\Pr\{A_t=a\}=\dfrac{e^{H_t(a)}}{\sum_{b=1}^ke^{H_t(b)}} πt(a)=Pr{At=a}=b=1keHt(b)eHt(a)
算法对每个行为偏好的更新公式:
H t + 1 ( A t ) = H t ( A t ) + α ( R t − R ˉ t ) ( 1 − π t ( A t ) ) , H t + 1 ( a ) = H t ( a ) − α ( R t − R ˉ t ) π t ( A t ) , a ≠ A t \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} Ht+1(At)Ht+1(a)=Ht(At)+α(RtRˉt)(1πt(At)),=Ht(a)α(RtRˉt)πt(At),a̸=At
R ˉ t \bar{R}_t Rˉt t t t时刻之前获得的奖励的均值,这个作为一个参考值,如果当前获得的奖励大于均值,就增加偏好值,如果小于均值,就减小偏好值。其他没有选择的行为的偏好值就向相反方向移动。

算法总结

首先给每个行为都初始化一个偏好程度 H t ( a ) H_t(a) Ht(a),每次选择行为的时候,根据偏好程度,计算选择每个行为的概率(策略) π t ( a ) \pi_t(a) πt(a),然后根据概率选择一个行为,然后更新每个行为的偏好程度。

算法步骤如下:

  1. 输入: q ⋆ ( a ) q_\star(a) q(a) N a c t i o n N_{action } Naction N s t e p N_{step } Nstep α \alpha α
  2. 初始化:
    1. for a = 1~N_action
      1. N ( a ) = 0 N(a)=0 N(a)=0,每个行为的次数;
      2. H ( a ) = 0 H(a)=0 H(a)=0,每个行为的偏好值;
      3. R ˉ ( a ) = 0 \bar{R}(a)=0 Rˉ(a)=0,每个行为的均值回报;
    2. 全局均值回报 R_total_bar(1) = 0;
  3. for t = 1 ~ N_step
    1. for a = 1~N_action
      1. 计算 π ( a ) = e H t ( a ) ∑ b = 1 N a c t i o n e H t ( b ) \pi(a)=\dfrac{e^{H_t(a)}}{\sum_{b=1}^{N_{action}} e^{H_t(b)}} π(a)=b=1NactioneHt(b)eHt(a);
    2. 生成随机数,根据概率选择一个行为 A = a A=a A=a;
    3. N ( a ) + = 1 N(a)+=1 N(a)+=1;
    4. 计算回报 R ( t ) = b a n d i t ( A ) = N ( q ⋆ ( A ) , 1 ) R( t ) =bandit(A)=N(q_\star(A),1) R(t)=bandit(A)=N(q(A),1)
    5. 计算均值回报: R ˉ ( a ) = R ˉ ( a ) + 1 N ( a ) ( R − R ˉ ( a ) ) \bar{R}(a)=\bar{R}(a)+\dfrac{1}{N(a)}(R-\bar{R}(a)) Rˉ(a)=Rˉ(a)+N(a)1(RRˉ(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)) H(a)=H(a)+α(R(t)Rˉ(a))(1π(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) H(a)=H(a)α(R(t)Rˉ(a))π(a)
  4. 输出:R_total_bar

3. 仿真

因为存在不确定性,每次的回报都是服从一个正态分布,所以每次做实验的结果也是不一样的。为了说明问题,我们做2000次仿真实验,每次仿真实验都是,然后取平均值。

对于某一$\epsilon $的仿真步骤如下:

  1. N a c t i o n = 10 N_{action} = 10 Naction=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) q(a)=N(0,1);
    2. 运行强化学习算法;
      1. for j = 1~4 (前三次是算法1,第4,5次是算法2)
        1. ϵ ( j ) = 0 ; 0.01 ; 0.1 \epsilon(j)=0;0.01;0.1 ϵ(j)=00.010.1
        2. alpha = 0.1; 0.4
        3. 运行强化学习算法
        4. 得出 R ˉ i j t o t a l ( t ) \bar{R}_{ij}^{total}(t) Rˉijtotal(t)
    3. 计算随时间变化的均值回报
  5. for i = 1:N_step
    1. i i i求均值 R ˉ j t o t a l _ n o r m l i z e ( t ) \bar{R}_j^{total\_normlize}(t) Rˉjtotal_normlize(t);
  6. 作图,在一个图中,画出三个 R ˉ j t o t a l _ n o r m l i z e ( t ) \bar{R}_j ^{total\_normlize}(t) Rˉjtotal_normlize(t)与时间的曲线图

4. 仿真结果分析

强化学习第二章总结: e-greedy算法,梯度上升算法,the 10-armed bandit problem_第2张图片

红色曲线:e-greedy算法 e=0

绿色曲线:e-greedy算法 e=0.01

蓝色曲线:e-greedy算法 e=0.1

黄色曲线:梯度上升,alpha=0.1

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

你可能感兴趣的:(理论类,强化学习,the,10-armed,bandit,problem,e-greedy,梯度上升)