0


Proximal Policy Optimization(近端策略优化)(PPO)原理详解

本节开始笔者针对自己的研究领域进行RL方面的介绍和笔记总结,欢迎同行学者一起学习和讨论。本文笔者来介绍RL中比较出名的算法PPO算法,读者需要预先了解Reinforcement-Learning中几个基础定义才可以阅读,否则不容易理解其中的内容。不过笔者尽可能把它写的详细让读者弄懂。本文干货内容较多,注重算法理解和数学基础而不仅仅是算法实现。
本文一定程度上参考了李宏毅"Reinforcement-Learning"
本文内容不难,适合想要学习RL的初学者进行预备,PPO是OpenAI的默认RL框架,足以见得它的强大。

1、预备知识

1.1、策略梯度

首先笔者来介绍策略梯度算法,为后续的内容做铺垫,首先给予读者一些RL中基本定义:
1.State:状态,也即智能体(Agent)当前所处的环境是什么?

  1. (
  2. s
  3. )
  4. (s)
  5. (s)

2.Action:动作,也即Agent在当前可以采取的行动是什么?

  1. (
  2. a
  3. )
  4. (a)
  5. (a)(该行为我们可以通过网络可控)

3.Reward:奖励,也即Agent在当前状态下采取动作Action后得到了多大的奖励?

  1. (
  2. r
  3. )
  4. (r)
  5. (r)

首先,设置Agent采取的总步长为

  1. t
  2. t
  3. t,这也即我们获得了一条轨迹(trajectory):
  4. τ
  5. \tau
  6. τ:
  7. τ
  8. =
  9. (
  10. s
  11. 1
  12. ,
  13. a
  14. 1
  15. ,
  16. r
  17. 1
  18. ,
  19. s
  20. 2
  21. ,
  22. a
  23. 2
  24. ,
  25. r
  26. 2
  27. s
  28. t
  29. ,
  30. a
  31. t
  32. ,
  33. r
  34. t
  35. )
  36. ,
  37. R
  38. (
  39. τ
  40. )
  41. =
  42. i
  43. =
  44. 1
  45. t
  46. r
  47. t
  48. \tau=(s_1,a_1,r_1,s_2,a_2,r_2····s_t,a_t,r_t),R(\tau)=\sum_{i=1}^{t}r_t
  49. τ=(s1​,a1​,r1​,s2​,a2​,r2​⋅⋅⋅⋅st​,at​,rt​),R(τ)=i=1trt

事实上,上述的1,2,3中我们只有2是可控的,其他的1,3为从环境中获取的,是无法人为干预的。假设我们拥有一个具有网络参数为

  1. θ
  2. \theta
  3. θ的**策略**
  4. π
  5. θ
  6. (
  7. a
  8. t
  9. s
  10. t
  11. )
  12. \pi_\theta(a_t|s_t)
  13. πθ​(at​∣st​),那么显然我们的目标是想要使得总Reward越大越好,但由于该奖励为一个随机变量,因此我们只能求得它的期望。**即target任务为最大化以下函数**:
  14. E
  15. τ
  16. [
  17. R
  18. (
  19. τ
  20. )
  21. ]
  22. =
  23. p
  24. θ
  25. (
  26. τ
  27. )
  28. R
  29. (
  30. τ
  31. )
  32. E_{\tau}[R(\tau)]=\int p_{\theta}(\tau)R(\tau)
  33. Eτ​[R(τ)]=∫pθ​(τ)R(τ)

为了让上述期望最大化,我们需要策略梯度,即:

  1. θ
  2. E
  3. τ
  4. [
  5. R
  6. (
  7. τ
  8. )
  9. ]
  10. =
  11. θ
  12. p
  13. θ
  14. (
  15. τ
  16. )
  17. R
  18. (
  19. τ
  20. )
  21. =
  22. p
  23. θ
  24. (
  25. τ
  26. )
  27. θ
  28. l
  29. o
  30. g
  31. (
  32. p
  33. θ
  34. (
  35. τ
  36. )
  37. )
  38. R
  39. (
  40. τ
  41. )
  42. \nabla_{\theta} E_{\tau}[R(\tau)]=\int \nabla_{{\theta}} p_{\theta}(\tau)R(\tau)=\int p_{\theta}(\tau)\nabla_{{\theta}} log(p_{\theta}(\tau))R(\tau)
  43. ∇θ​Eτ​[R(τ)]=∫∇θ​pθ​(τ)R(τ)=∫pθ​(τ)∇θ​log(pθ​(τ))R(τ)

以下简称策略梯度

  1. θ
  2. E
  3. τ
  4. [
  5. R
  6. (
  7. τ
  8. )
  9. ]
  10. =
  11. \nabla_{\theta} E_{\tau}[R(\tau)]=\nabla^*
  12. ∇θ​Eτ​[R(τ)]=∇∗,由上述推导我们可知:
  13. =
  14. p
  15. θ
  16. (
  17. τ
  18. )
  19. θ
  20. l
  21. o
  22. g
  23. (
  24. p
  25. θ
  26. (
  27. τ
  28. )
  29. )
  30. R
  31. (
  32. τ
  33. )
  34. =
  35. E
  36. τ
  37. [
  38. θ
  39. l
  40. o
  41. g
  42. (
  43. p
  44. θ
  45. (
  46. τ
  47. )
  48. )
  49. R
  50. (
  51. τ
  52. )
  53. ]
  54. \nabla^*=\int p_{\theta}(\tau)\nabla_{{\theta}} log(p_{\theta}(\tau))R(\tau)=E_{\tau}[\nabla_{{\theta}} log(p_{\theta}(\tau))R(\tau)]
  55. ∇∗=∫pθ​(τ)∇θ​log(pθ​(τ))R(τ)=Eτ​[∇θ​log(pθ​(τ))R(τ)]

由于

  1. p
  2. θ
  3. (
  4. τ
  5. )
  6. =
  7. i
  8. =
  9. 1
  10. t
  11. π
  12. θ
  13. (
  14. a
  15. t
  16. s
  17. t
  18. )
  19. p_\theta(\tau)=\prod_{i=1}^{t}\pi_{\theta}(a_t|s_t)
  20. pθ​(τ)=∏i=1t​πθ​(at​∣st​),故代入有:
  21. =
  22. E
  23. τ
  24. [
  25. R
  26. (
  27. τ
  28. )
  29. ]
  30. =
  31. E
  32. τ
  33. [
  34. R
  35. (
  36. τ
  37. )
  38. i
  39. =
  40. 1
  41. t
  42. l
  43. o
  44. g
  45. (
  46. π
  47. θ
  48. (
  49. a
  50. i
  51. s
  52. i
  53. )
  54. )
  55. ]
  56. \nabla^*=E_{\tau}[R(\tau)]=E_{\tau}[R(\tau)\sum_{i=1}^t\nabla log(\pi_\theta(a_i|s_i))]
  57. ∇∗=Eτ​[R(τ)]=Eτ​[R(τ)i=1t​∇log(πθ​(ai​∣si​))]

因此,在实际应用的时候,用sampling的办法,应该做一些的更新方式(

  1. l
  2. r
  3. lr
  4. lr为学习率):
  5. =
  6. 1
  7. s
  8. k
  9. =
  10. 1
  11. s
  12. i
  13. =
  14. 1
  15. t
  16. R
  17. (
  18. τ
  19. k
  20. )
  21. l
  22. o
  23. g
  24. (
  25. π
  26. θ
  27. (
  28. a
  29. i
  30. k
  31. s
  32. i
  33. k
  34. )
  35. )
  36. \nabla^*=\frac{1}{s}\sum_{k=1}^{s}\sum_{i=1}^t R(\tau^k) \nabla log(\pi_\theta(a_i^{k}|s_i^{k}))
  37. ∇∗=s1k=1si=1tRk)∇log(πθ​(aik​∣sik​))
  38. θ
  39. =
  40. θ
  41. +
  42. l
  43. r
  44. \theta=\theta+lr\nabla^*
  45. θ=θ+lr∇∗

但是,该

  1. \nabla^*
  2. ∇∗存在以下的缺陷。

1.1.1、策略梯度缺陷(1)

首先针对

  1. \nabla^*
  2. ∇∗而言,直观的理解为,若某一条轨迹
  3. τ
  4. \tau
  5. τ得到的奖励总和
  6. R
  7. (
  8. τ
  9. )
  10. R(\tau)
  11. R(τ)为正(positive)的,那么该策略梯度会升高产生这条轨迹的每一步骤产生的概率大小,若
  12. τ
  13. \tau
  14. τ得到的奖励总和
  15. R
  16. (
  17. τ
  18. )
  19. R(\tau)
  20. R(τ)为负(negative)的,那么该策略梯度会降低产生该条轨迹的概率大小,但若奖励总和
  21. R
  22. (
  23. τ
  24. )
  25. R(\tau)
  26. R(τ)总为positive的,那该策略梯度会受到一定的影响。虽然Reward的大小可以反应策略梯度上升的快慢大小,但是由于动作是通过Sample来获取的,因此会产生某些"好的动作"没办法被偶然采样到,那么该好的动作就容易被忽略掉。因此一般会采用以下更新策略梯度方式来更新,保证
  27. R
  28. (
  29. τ
  30. )
  31. R(\tau)
  32. R(τ)有正有负。
  33. =
  34. E
  35. τ
  36. [
  37. (
  38. R
  39. (
  40. τ
  41. )
  42. b
  43. )
  44. i
  45. =
  46. 1
  47. t
  48. l
  49. o
  50. g
  51. (
  52. π
  53. θ
  54. (
  55. a
  56. i
  57. s
  58. i
  59. )
  60. )
  61. ]
  62. =
  63. E
  64. τ
  65. [
  66. i
  67. =
  68. 1
  69. t
  70. (
  71. R
  72. (
  73. τ
  74. )
  75. b
  76. )
  77. l
  78. o
  79. g
  80. (
  81. π
  82. θ
  83. (
  84. a
  85. i
  86. s
  87. i
  88. )
  89. )
  90. ]
  91. \nabla^*=E_{\tau}[(R(\tau)-b)\sum_{i=1}^t\nabla log(\pi_\theta(a_i|s_i))]=E_{\tau}[\sum_{i=1}^t(R(\tau)-b)\nabla log(\pi_\theta(a_i|s_i))]
  92. ∇∗=Eτ​[(R(τ)−b)i=1t​∇log(πθ​(ai​∣si​))]=Eτ​[i=1t​(R(τ)−b)∇log(πθ​(ai​∣si​))]

其中

  1. b
  2. b
  3. b为待定参数,可以为人工设定或者其他办法获得。

1.1.2、策略梯度缺陷(2)

策略梯度的缺陷之二是:针对,更新时刻每一步

  1. π
  2. θ
  3. (
  4. a
  5. i
  6. s
  7. i
  8. )
  9. \pi_{\theta}(a_i|s_i)
  10. πθ​(ai​∣si​),他们共用一个
  11. R
  12. (
  13. τ
  14. )
  15. R(\tau)
  16. R(τ),这会带来很大的问题,因为显然地,一个轨迹的总Reward高不见得每一步的Reward都要求的是好(高)的并且完美的,而是一个整体的现象。如果单纯用一整条轨迹更新轨迹中每个操作显得很不满足条件。

因此,常见的处理办法之一为:采用未来折扣回报来代替

  1. R
  2. (
  3. τ
  4. )
  5. R(\tau)
  6. R(τ):

其中第

  1. i
  2. i
  3. i步时的未来折扣回报的定义为:
  4. k
  5. =
  6. i
  7. t
  8. δ
  9. k
  10. i
  11. r
  12. k
  13. \sum_{k=i}^t\delta^{k-i}r_k
  14. k=it​δkirk​,代表了从第
  15. i
  16. i
  17. i步到结束的带有折扣因子
  18. δ
  19. \delta
  20. δ的未来总奖励大小。

因此策略梯度被写成了如下情况:

  1. =
  2. E
  3. τ
  4. [
  5. i
  6. =
  7. 1
  8. t
  9. (
  10. k
  11. =
  12. i
  13. t
  14. δ
  15. k
  16. i
  17. r
  18. k
  19. b
  20. )
  21. l
  22. o
  23. g
  24. (
  25. π
  26. θ
  27. (
  28. a
  29. i
  30. s
  31. i
  32. )
  33. )
  34. ]
  35. \nabla^*=E_{\tau}[\sum_{i=1}^t(\sum_{k=i}^t\delta^{k-i}r_k -b)\nabla log(\pi_\theta(a_i|s_i))]
  36. ∇∗=Eτ​[i=1t​(k=it​δkirk​−b)∇log(πθ​(ai​∣si​))]

往往,某些时刻,我们可以将未来折扣回报

  1. k
  2. =
  3. i
  4. t
  5. δ
  6. k
  7. i
  8. r
  9. k
  10. \sum_{k=i}^t\delta^{k-i}r_k
  11. k=it​δkirk​视为在当前
  12. s
  13. i
  14. s_i
  15. si​下,采取了动作
  16. a
  17. i
  18. a_i
  19. ai​,未来给了我多少奖励,也即当前状态
  20. s
  21. i
  22. s_i
  23. si​下,采取了动作
  24. a
  25. i
  26. a_i
  27. ai​的好坏程度,这通常称之为**状态价值函数**,一般用
  28. Q
  29. (
  30. s
  31. i
  32. ,
  33. a
  34. i
  35. )
  36. Q(s_i,a_i)
  37. Q(si​,ai​)来表示,通常情况下,**未来折扣回报**是通过
  38. Q
  39. (
  40. s
  41. i
  42. ,
  43. a
  44. i
  45. )
  46. Q(s_i,a_i)
  47. Q(si​,ai​)来进行估计的,若将其也视为一个网络,参数为
  48. δ
  49. \delta
  50. δ,这即:
  51. =
  52. E
  53. τ
  54. [
  55. i
  56. =
  57. 1
  58. t
  59. Q
  60. δ
  61. (
  62. s
  63. i
  64. ,
  65. a
  66. i
  67. )
  68. l
  69. o
  70. g
  71. (
  72. π
  73. θ
  74. (
  75. a
  76. i
  77. s
  78. i
  79. )
  80. )
  81. ]
  82. \nabla^*=E_{\tau}[\sum_{i=1}^tQ_{\delta}(s_i,a_i)\nabla log(\pi_\theta(a_i|s_i))]
  83. ∇∗=Eτ​[i=1tQδ​(si​,ai​)∇log(πθ​(ai​∣si​))]

则想要更新参数时,可以首先采样出一系列轨迹

  1. (
  2. τ
  3. 1
  4. ,
  5. τ
  6. 2
  7. ,
  8. τ
  9. 3
  10. τ
  11. k
  12. )
  13. (\tau_1,\tau_2,\tau_3·····\tau_k)
  14. 1​,τ2​,τ3​⋅⋅⋅⋅⋅τk​),并进行策略梯度的更新:
  15. =
  16. m
  17. =
  18. 1
  19. k
  20. i
  21. =
  22. 1
  23. t
  24. Q
  25. δ
  26. (
  27. s
  28. i
  29. m
  30. ,
  31. a
  32. i
  33. m
  34. )
  35. l
  36. o
  37. g
  38. (
  39. π
  40. θ
  41. (
  42. a
  43. i
  44. m
  45. s
  46. i
  47. m
  48. )
  49. )
  50. \nabla^*=\sum_{m=1}^k\sum_{i=1}^tQ_{\delta}(s_i^{m},a_i^{m})\nabla log(\pi_\theta(a_i^{m}|s_i^{m}))
  51. ∇∗=m=1ki=1tQδ​(sim​,aim​)∇log(πθ​(aim​∣sim​))
  52. θ
  53. =
  54. θ
  55. +
  56. l
  57. r
  58. \theta=\theta+lr\nabla^*
  59. θ=θ+lr∇∗当然,这是针对某一个整条轨迹做更新的,那么如果想要按照时间步长逐步更新(第
  60. l
  61. l
  62. l步):
  63. l
  64. =
  65. m
  66. =
  67. 1
  68. k
  69. Q
  70. δ
  71. (
  72. s
  73. l
  74. m
  75. ,
  76. a
  77. l
  78. m
  79. )
  80. l
  81. o
  82. g
  83. (
  84. π
  85. θ
  86. (
  87. a
  88. l
  89. m
  90. s
  91. l
  92. m
  93. )
  94. )
  95. \nabla_{l}^*=\sum_{m=1}^kQ_{\delta}(s_l^{m},a_l^{m})\nabla log(\pi_\theta(a_l^{m}|s_l^{m}))
  96. l∗​=m=1kQδ​(slm​,alm​)∇log(πθ​(alm​∣slm​))这也即采样了一个Batch的第
  97. l
  98. l
  99. l步的
  100. (
  101. s
  102. l
  103. ,
  104. a
  105. l
  106. )
  107. (s_l,a_l)
  108. (sl​,al​)信息后,进行的梯度更新:
  109. l
  110. =
  111. E
  112. a
  113. l
  114. π
  115. θ
  116. (
  117. a
  118. l
  119. s
  120. l
  121. )
  122. [
  123. (
  124. Q
  125. δ
  126. (
  127. s
  128. l
  129. m
  130. ,
  131. a
  132. l
  133. m
  134. )
  135. l
  136. o
  137. g
  138. (
  139. π
  140. θ
  141. (
  142. a
  143. l
  144. m
  145. s
  146. l
  147. m
  148. )
  149. )
  150. ]
  151. \nabla_{l}^*=E_{a_l\pi_\theta(a_l|s_l)}[(Q_{\delta}(s_l^{m},a_l^{m})\nabla log(\pi_\theta(a_l^{m}|s_l^{m}))]
  152. l∗​=Eal​~πθ​(al​∣sl​)​[(Qδ​(slm​,alm​)∇log(πθ​(alm​∣slm​))]策略梯度有个明显的缺点,就是更新过后,网络
  153. π
  154. θ
  155. \pi_{\theta}
  156. πθ​就发生了改变,而策略梯度是要基于
  157. π
  158. θ
  159. \pi_{\theta}
  160. πθ​进行采样的,因此,**之前的采样样本就失效了**,也即参数只能被更新一次,之后需要根据更新后的重新采集样本。这显然用起来非常不方便,理想情况下如果能够进行off-policy更新,即某个样本可以被反复更新而不需重采样,这就需要1.2的重要性采样过程。

1.2、Important-Sampling

设需要估计

  1. E
  2. x
  3. p
  4. [
  5. f
  6. (
  7. x
  8. )
  9. ]
  10. E_{xp}[f(x)]
  11. Exp​[f(x)],但是无法从
  12. p
  13. (
  14. x
  15. )
  16. p(x)
  17. p(x)中进行sampling,只能从一个以知的分布
  18. q
  19. (
  20. x
  21. )
  22. q(x)
  23. q(x)进行采样,那如何计算所要求的期望?

事实上:

  1. E
  2. x
  3. p
  4. [
  5. f
  6. (
  7. x
  8. )
  9. ]
  10. =
  11. p
  12. (
  13. x
  14. )
  15. f
  16. (
  17. x
  18. )
  19. =
  20. q
  21. (
  22. x
  23. )
  24. p
  25. (
  26. x
  27. )
  28. q
  29. (
  30. x
  31. )
  32. f
  33. (
  34. x
  35. )
  36. =
  37. E
  38. x
  39. q
  40. [
  41. p
  42. (
  43. x
  44. )
  45. q
  46. (
  47. x
  48. )
  49. f
  50. (
  51. x
  52. )
  53. ]
  54. E_{xp}[f(x)]=\int p(x)f(x)=\int q(x)\frac{p(x)}{q(x)}f(x)=E_{xq}[\frac{p(x)}{q(x)}f(x)]
  55. Exp​[f(x)]=∫p(x)f(x)=∫q(x)q(x)p(x)​f(x)=Exq​[q(x)p(x)​f(x)]

  1. E
  2. x
  3. p
  4. [
  5. f
  6. (
  7. x
  8. )
  9. ]
  10. =
  11. E
  12. x
  13. q
  14. [
  15. p
  16. (
  17. x
  18. )
  19. q
  20. (
  21. x
  22. )
  23. f
  24. (
  25. x
  26. )
  27. ]
  28. E_{xp}[f(x)]=E_{xq}[\frac{p(x)}{q(x)}f(x)]
  29. Exp​[f(x)]=Exq​[q(x)p(x)​f(x)]

这是理论相等,但是存在如下问题:

  1. V
  2. a
  3. r
  4. x
  5. p
  6. [
  7. f
  8. (
  9. x
  10. )
  11. ]
  12. =
  13. E
  14. x
  15. p
  16. [
  17. f
  18. 2
  19. (
  20. x
  21. )
  22. ]
  23. (
  24. E
  25. x
  26. p
  27. [
  28. f
  29. (
  30. x
  31. )
  32. ]
  33. )
  34. 2
  35. Var_{xp}[f(x)]=E_{xp}[f^2(x)]-(E_{xp}[f(x)])^2
  36. Varxp​[f(x)]=Exp​[f2(x)]−(Exp​[f(x)])2
  37. V
  38. a
  39. r
  40. x
  41. q
  42. [
  43. p
  44. (
  45. x
  46. )
  47. q
  48. (
  49. x
  50. )
  51. f
  52. (
  53. x
  54. )
  55. ]
  56. =
  57. E
  58. x
  59. q
  60. [
  61. p
  62. 2
  63. (
  64. x
  65. )
  66. q
  67. 2
  68. (
  69. x
  70. )
  71. f
  72. 2
  73. (
  74. x
  75. )
  76. ]
  77. (
  78. E
  79. x
  80. p
  81. [
  82. f
  83. (
  84. x
  85. )
  86. ]
  87. )
  88. 2
  89. Var_{xq}[\frac{p(x)}{q(x)}f(x)]=E_{xq}[\frac{p^2(x)}{q^2(x)}f^2(x)]-(E_{xp}[f(x)])^2
  90. Varxq​[q(x)p(x)​f(x)]=Exq​[q2(x)p2(x)​f2(x)]−(Exp​[f(x)])2
  91. E
  92. x
  93. q
  94. [
  95. p
  96. 2
  97. (
  98. x
  99. )
  100. q
  101. 2
  102. (
  103. x
  104. )
  105. f
  106. 2
  107. (
  108. x
  109. )
  110. ]
  111. =
  112. p
  113. 2
  114. (
  115. x
  116. )
  117. q
  118. (
  119. x
  120. )
  121. f
  122. 2
  123. (
  124. x
  125. )
  126. =
  127. p
  128. (
  129. x
  130. )
  131. q
  132. (
  133. x
  134. )
  135. p
  136. (
  137. x
  138. )
  139. f
  140. 2
  141. (
  142. x
  143. )
  144. E_{xq}[\frac{p^2(x)}{q^2(x)}f^2(x)]=\int \frac{p^2(x)}{q(x)}f^2(x)=\int \frac{p(x)}{q(x)}p(x)f^2(x)
  145. Exq​[q2(x)p2(x)​f2(x)]=∫q(x)p2(x)​f2(x)=∫q(x)p(x)​p(x)f2(x)
  146. E
  147. x
  148. p
  149. [
  150. f
  151. 2
  152. (
  153. x
  154. )
  155. ]
  156. =
  157. p
  158. (
  159. x
  160. )
  161. f
  162. 2
  163. (
  164. x
  165. )
  166. E_{xp}[f^2(x)]=\int p(x)f^2(x)
  167. Exp​[f2(x)]=∫p(x)f2(x)

很明显若

  1. p
  2. (
  3. x
  4. )
  5. q
  6. (
  7. x
  8. )
  9. >
  10. >
  11. 1
  12. \frac{p(x)}{q(x)}>>1
  13. q(x)p(x)​>>1,此时
  14. V
  15. a
  16. r
  17. x
  18. q
  19. [
  20. p
  21. (
  22. x
  23. )
  24. q
  25. (
  26. x
  27. )
  28. f
  29. (
  30. x
  31. )
  32. ]
  33. >
  34. >
  35. V
  36. a
  37. r
  38. x
  39. p
  40. [
  41. f
  42. (
  43. x
  44. )
  45. ]
  46. Var_{xq}[\frac{p(x)}{q(x)}f(x)]>>Var_{xp}[f(x)]
  47. Varxq​[q(x)p(x)​f(x)]>>Varxp​[f(x)]

即,若通过采样的办法,两个分布的差异不能太大,若进行的话,采样是不准确的,甚至是失真的。
为了可以用到RL中进行off-policy的更新,我们需要定义两个策略网络,一个是

  1. π
  2. θ
  3. \pi_{\theta^{'}}
  4. πθ′​专门负责进行采样操作,一个是
  5. π
  6. θ
  7. \pi_{\theta}
  8. πθ​,为待学习的网络参数,相应的,还存在两个**价值网络**,一个参数为
  9. δ
  10. \delta^{'}
  11. δ′负责给予探索的动作打分,一个参数为
  12. δ
  13. \delta
  14. δ为待学习的参数,则此时
  15. l
  16. =
  17. E
  18. a
  19. l
  20. π
  21. θ
  22. (
  23. a
  24. l
  25. s
  26. l
  27. )
  28. [
  29. (
  30. Q
  31. δ
  32. (
  33. s
  34. l
  35. m
  36. ,
  37. a
  38. l
  39. m
  40. )
  41. l
  42. o
  43. g
  44. (
  45. π
  46. θ
  47. (
  48. a
  49. l
  50. m
  51. s
  52. l
  53. m
  54. )
  55. )
  56. ]
  57. \nabla_{l}^*=E_{a_l\pi_\theta(a_l|s_l)}[(Q_{\delta}(s_l^{m},a_l^{m})\nabla log(\pi_\theta(a_l^{m}|s_l^{m}))]
  58. l∗​=Eal​~πθ​(al​∣sl​)​[(Qδ​(slm​,alm​)∇log(πθ​(alm​∣slm​))]根据Important-Sampling原理可进行如下替换,并且可以更新多步而不局限于更新一次:
  59. l
  60. =
  61. E
  62. a
  63. l
  64. π
  65. θ
  66. (
  67. a
  68. l
  69. s
  70. l
  71. )
  72. [
  73. π
  74. θ
  75. (
  76. a
  77. l
  78. s
  79. l
  80. )
  81. π
  82. θ
  83. (
  84. a
  85. l
  86. s
  87. l
  88. )
  89. (
  90. Q
  91. δ
  92. (
  93. s
  94. l
  95. m
  96. ,
  97. a
  98. l
  99. m
  100. )
  101. l
  102. o
  103. g
  104. (
  105. π
  106. θ
  107. (
  108. a
  109. l
  110. m
  111. s
  112. l
  113. m
  114. )
  115. )
  116. ]
  117. \nabla_{l}^*=E_{a_l\pi_\theta^{'}(a_l|s_l)}[\frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)}(Q_{\delta^{'}}(s_l^{m},a_l^{m})\nabla log(\pi_\theta(a_l^{m}|s_l^{m}))]
  118. ∇l∗​=Eal​~πθ′​(al​∣sl​)​[πθ′​(al​∣sl​)πθ​(al​∣sl​)​(Qδ′​(slm​,alm​)∇log(πθ​(alm​∣slm​))]

进行整理后得到:

  1. l
  2. =
  3. π
  4. θ
  5. (
  6. s
  7. l
  8. a
  9. l
  10. )
  11. [
  12. (
  13. Q
  14. δ
  15. (
  16. s
  17. l
  18. m
  19. ,
  20. a
  21. l
  22. m
  23. )
  24. l
  25. o
  26. g
  27. (
  28. π
  29. θ
  30. (
  31. a
  32. l
  33. m
  34. s
  35. l
  36. m
  37. )
  38. )
  39. ]
  40. =
  41. Q
  42. δ
  43. (
  44. s
  45. l
  46. m
  47. ,
  48. a
  49. l
  50. m
  51. )
  52. π
  53. θ
  54. (
  55. s
  56. l
  57. a
  58. l
  59. )
  60. \nabla_{l}^*=\int \pi_\theta(s_l|a_l)[(Q_{\delta}(s_l^{m},a_l^{m})\nabla log(\pi_\theta(a_l^{m}|s_l^{m}))]=\int Q_{\delta}(s_l^{m},a_l^{m})\nabla \pi_\theta(s_l|a_l)
  61. l∗​=∫πθ​(sl​∣al​)[(Qδ​(slm​,alm​)∇log(πθ​(alm​∣slm​))]=∫Qδ​(slm​,alm​)∇πθ​(sl​∣al​)

若目标函数称为为

  1. J
  2. l
  3. (
  4. θ
  5. )
  6. J_l(\theta)
  7. Jl​(θ),令
  8. J
  9. l
  10. =
  11. l
  12. \nabla J_l=\nabla_{l}^*
  13. Jl​=∇l∗​则
  14. J
  15. l
  16. (
  17. θ
  18. )
  19. =
  20. E
  21. a
  22. l
  23. π
  24. θ
  25. (
  26. a
  27. l
  28. s
  29. l
  30. )
  31. [
  32. Q
  33. δ
  34. (
  35. s
  36. l
  37. m
  38. ,
  39. a
  40. l
  41. m
  42. )
  43. ]
  44. =
  45. E
  46. a
  47. l
  48. π
  49. θ
  50. (
  51. a
  52. l
  53. s
  54. l
  55. )
  56. [
  57. π
  58. θ
  59. (
  60. a
  61. l
  62. s
  63. l
  64. )
  65. π
  66. θ
  67. (
  68. a
  69. l
  70. s
  71. l
  72. )
  73. Q
  74. δ
  75. (
  76. s
  77. l
  78. m
  79. ,
  80. a
  81. l
  82. m
  83. )
  84. ]
  85. J_l(\theta)=E_{a_l\pi_\theta(a_l|s_l)}[Q_{\delta}(s_l^{m},a_l^{m})]=E_{a_l\pi_\theta^{'}(a_l|s_l)}[\frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)}Q_{\delta^{'}}(s_l^{m},a_l^{m})]
  86. Jl​(θ)=Eal​~πθ​(al​∣sl​)​[Qδ​(slm​,alm​)]=Eal​~πθ′​(al​∣sl​)​[πθ′​(al​∣sl​)πθ​(al​∣sl​)​Qδ′​(slm​,alm​)]

那么,每一次主需要计算

  1. J
  2. l
  3. (
  4. θ
  5. )
  6. J_l(\theta)
  7. Jl​(θ),在第
  8. l
  9. l
  10. l步进行更新即可:
  11. θ
  12. =
  13. θ
  14. +
  15. l
  16. r
  17. θ
  18. J
  19. l
  20. (
  21. θ
  22. )
  23. \theta=\theta+lr\nabla_\theta J_l(\theta)
  24. θ=θ+lr∇θ​Jl​(θ)

2、置信策略优化(TRPO)与近端策略优化(PPO)

2.1、TRPO与PPO的区别

根据1节所讨论的部分,下面介绍这两种算法的本质区别,在1.2节已经提到了,要想使用Important-Samlping办法,那么两个策略网络的差异不能够太大,否则将会出现估计失真的情况。根据此,TRPO的策略优化函数需要满足以下两个条件为:

  1. J
  2. l
  3. T
  4. R
  5. P
  6. O
  7. (
  8. θ
  9. )
  10. =
  11. E
  12. a
  13. l
  14. π
  15. θ
  16. (
  17. a
  18. l
  19. s
  20. l
  21. )
  22. [
  23. π
  24. θ
  25. (
  26. a
  27. l
  28. s
  29. l
  30. )
  31. π
  32. θ
  33. (
  34. a
  35. l
  36. s
  37. l
  38. )
  39. Q
  40. δ
  41. (
  42. s
  43. l
  44. m
  45. ,
  46. a
  47. l
  48. m
  49. )
  50. ]
  51. J^{TRPO}_l(\theta)=E_{a_l\pi_\theta^{'}(a_l|s_l)}[\frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)}Q_{\delta^{'}}(s_l^{m},a_l^{m})]
  52. JlTRPO​(θ)=Eal​~πθ′​(al​∣sl​)​[πθ′​(al​∣sl​)πθ​(al​∣sl​)​Qδ′​(slm​,alm​)]
  53. E
  54. l
  55. (
  56. K
  57. L
  58. [
  59. π
  60. θ
  61. (
  62. s
  63. l
  64. )
  65. π
  66. θ
  67. (
  68. s
  69. l
  70. )
  71. ]
  72. )
  73. β
  74. E_{l}(KL[\pi_\theta^{'}(·|s_l)||\pi_\theta(·|s_l)])\leq\beta
  75. El​(KL[πθ′​(⋅∣sl​)∣∣πθ​(⋅∣sl​)])≤β

其中

  1. β
  2. \beta
  3. β为超参数,这很麻烦,因为不仅需要进行策略梯度更新,还需要进行条件约束,相比之下,**PPO**采用了罚函数办法:
  4. J
  5. l
  6. P
  7. P
  8. O
  9. 1
  10. (
  11. θ
  12. )
  13. =
  14. E
  15. a
  16. l
  17. π
  18. θ
  19. (
  20. a
  21. l
  22. s
  23. l
  24. )
  25. [
  26. π
  27. θ
  28. (
  29. a
  30. l
  31. s
  32. l
  33. )
  34. π
  35. θ
  36. (
  37. a
  38. l
  39. s
  40. l
  41. )
  42. Q
  43. δ
  44. (
  45. s
  46. l
  47. m
  48. ,
  49. a
  50. l
  51. m
  52. )
  53. β
  54. K
  55. L
  56. [
  57. π
  58. θ
  59. (
  60. s
  61. l
  62. )
  63. π
  64. θ
  65. (
  66. s
  67. l
  68. )
  69. ]
  70. ]
  71. J^{PPO1}_l(\theta)=E_{a_l\pi_\theta^{'}(a_l|s_l)}[\frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)}Q_{\delta^{'}}(s_l^{m},a_l^{m})-\beta KL[\pi_\theta^{'}(·|s_l)||\pi_\theta(·|s_l)] ]
  72. JlPPO1​(θ)=Eal​~πθ′​(al​∣sl​)​[πθ′​(al​∣sl​)πθ​(al​∣sl​)​Qδ′​(slm​,alm​)−βKL[πθ′​(⋅∣sl​)∣∣πθ​(⋅∣sl​)]]

当发现

  1. K
  2. L
  3. [
  4. π
  5. θ
  6. (
  7. s
  8. l
  9. )
  10. π
  11. θ
  12. (
  13. s
  14. l
  15. )
  16. ]
  17. >
  18. a
  19. 1.5
  20. KL[\pi_\theta^{'}(·|s_l)||\pi_\theta(·|s_l)]>a*1.5
  21. KL[πθ′​(⋅∣sl​)∣∣πθ​(⋅∣sl​)]>a∗1.5,此时说明两个分布差异过大,需要增大惩罚系数,此时
  22. β
  23. 2
  24. β
  25. \beta \rightarrow 2\beta
  26. β→2β

当发现

  1. K
  2. L
  3. [
  4. π
  5. θ
  6. (
  7. s
  8. l
  9. )
  10. π
  11. θ
  12. (
  13. s
  14. l
  15. )
  16. ]
  17. <
  18. a
  19. /
  20. 1.5
  21. KL[\pi_\theta^{'}(·|s_l)||\pi_\theta(·|s_l)]<a/1.5
  22. KL[πθ′​(⋅∣sl​)∣∣πθ​(⋅∣sl​)]<a/1.5,此时说明两个分布差异很小,需要调小惩罚系数,此时
  23. β
  24. β
  25. /
  26. 2
  27. \beta \rightarrow \beta/2
  28. β→β/2

2.2、Clip-PPO

OpenAI给出了另外一种裁剪PPO,下面笔者来介绍它的具体思想。
上面已经介绍过了,PPO的目的是为了缓解Important-Sampling差异较大带来的影响,若不加以任何限制,原始的目标优化函数为:

  1. J
  2. l
  3. (
  4. θ
  5. )
  6. =
  7. E
  8. a
  9. l
  10. π
  11. θ
  12. (
  13. a
  14. l
  15. s
  16. l
  17. )
  18. [
  19. π
  20. θ
  21. (
  22. a
  23. l
  24. s
  25. l
  26. )
  27. π
  28. θ
  29. (
  30. a
  31. l
  32. s
  33. l
  34. )
  35. Q
  36. δ
  37. (
  38. s
  39. l
  40. m
  41. ,
  42. a
  43. l
  44. m
  45. )
  46. ]
  47. J_l(\theta)=E_{a_l\pi_\theta^{'}(a_l|s_l)}[\frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)}Q_{\delta^{'}}(s_l^{m},a_l^{m})]
  48. Jl​(θ)=Eal​~πθ′​(al​∣sl​)​[πθ′​(al​∣sl​)πθ​(al​∣sl​)​Qδ′​(slm​,alm​)]

现分成两种情况来介绍:
(1)

  1. Q
  2. δ
  3. (
  4. s
  5. l
  6. m
  7. ,
  8. a
  9. l
  10. m
  11. )
  12. >
  13. 0
  14. Q_{\delta^{'}}(s_l^{m},a_l^{m})>0
  15. Qδ′​(slm​,alm​)>0

此时说明,这个动作很好,应该加大该

  1. π
  2. θ
  3. (
  4. a
  5. l
  6. s
  7. l
  8. )
  9. \pi_\theta(a_l|s_l)
  10. πθ​(al​∣sl​)的概率,那么这个时候显然的,会增大对应的
  11. π
  12. θ
  13. (
  14. a
  15. l
  16. s
  17. l
  18. )
  19. π
  20. θ
  21. (
  22. a
  23. l
  24. s
  25. l
  26. )
  27. \frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)}
  28. πθ′​(al​∣sl​)πθ​(al​∣sl​)​的概率,为了避免出现该值过分的增大,OpenAI提出了Clip方法,即设定一个上限
  29. (
  30. 1
  31. +
  32. ϵ
  33. )
  34. (
  35. 1
  36. +
  37. 0.2
  38. )
  39. (1+\epsilon)(1+0.2)
  40. (1+ϵ)(1+0.2)不允许超过。

即:

  1. J
  2. l
  3. P
  4. P
  5. O
  6. 2
  7. (
  8. θ
  9. )
  10. =
  11. E
  12. a
  13. l
  14. π
  15. θ
  16. (
  17. a
  18. l
  19. s
  20. l
  21. )
  22. [
  23. m
  24. i
  25. n
  26. (
  27. π
  28. θ
  29. (
  30. a
  31. l
  32. s
  33. l
  34. )
  35. π
  36. θ
  37. (
  38. a
  39. l
  40. s
  41. l
  42. )
  43. Q
  44. δ
  45. (
  46. s
  47. l
  48. m
  49. ,
  50. a
  51. l
  52. m
  53. )
  54. ,
  55. (
  56. 1
  57. +
  58. ϵ
  59. )
  60. Q
  61. δ
  62. (
  63. s
  64. l
  65. m
  66. ,
  67. a
  68. l
  69. m
  70. )
  71. )
  72. ]
  73. J^{PPO2}_l(\theta)=E_{a_l\pi_\theta^{'}(a_l|s_l)}[min(\frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)}Q_{\delta^{'}}(s_l^{m},a_l^{m}),(1+\epsilon)Q_{\delta^{'}}(s_l^{m},a_l^{m}))]
  74. JlPPO2​(θ)=Eal​~πθ′​(al​∣sl​)​[min(πθ′​(al​∣sl​)πθ​(al​∣sl​)​Qδ′​(slm​,alm​),(1+ϵ)Qδ′​(slm​,alm​))]对应的图示情况为:(A即为这里的Q)

请添加图片描述
(2)

  1. Q
  2. δ
  3. (
  4. s
  5. l
  6. m
  7. ,
  8. a
  9. l
  10. m
  11. )
  12. <
  13. 0
  14. Q_{\delta^{'}}(s_l^{m},a_l^{m})<0
  15. Qδ′​(slm​,alm​)<0

此时说明,这个动作不是很好,应该减小该

  1. π
  2. θ
  3. (
  4. a
  5. l
  6. s
  7. l
  8. )
  9. \pi_\theta(a_l|s_l)
  10. πθ​(al​∣sl​)的概率,那么这个时候显然的,会减小对应的
  11. π
  12. θ
  13. (
  14. a
  15. l
  16. s
  17. l
  18. )
  19. π
  20. θ
  21. (
  22. a
  23. l
  24. s
  25. l
  26. )
  27. \frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)}
  28. πθ′​(al​∣sl​)πθ​(al​∣sl​)​的概率,为了避免出现该值过分的减小,OpenAI提出了反向的Clip方法,即设定一个下限
  29. (
  30. 1
  31. ϵ
  32. )
  33. (
  34. 1
  35. 0.2
  36. )
  37. (1-\epsilon)(1-0.2)
  38. (1−ϵ)(1−0.2)不允许低于。

即:

  1. J
  2. l
  3. P
  4. P
  5. O
  6. 2
  7. (
  8. θ
  9. )
  10. =
  11. E
  12. a
  13. l
  14. π
  15. θ
  16. (
  17. a
  18. l
  19. s
  20. l
  21. )
  22. [
  23. m
  24. a
  25. x
  26. (
  27. π
  28. θ
  29. (
  30. a
  31. l
  32. s
  33. l
  34. )
  35. π
  36. θ
  37. (
  38. a
  39. l
  40. s
  41. l
  42. )
  43. Q
  44. δ
  45. (
  46. s
  47. l
  48. m
  49. ,
  50. a
  51. l
  52. m
  53. )
  54. ,
  55. (
  56. 1
  57. ϵ
  58. )
  59. Q
  60. δ
  61. (
  62. s
  63. l
  64. m
  65. ,
  66. a
  67. l
  68. m
  69. )
  70. )
  71. ]
  72. J^{PPO2}_l(\theta)=E_{a_l\pi_\theta^{'}(a_l|s_l)}[max(\frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)}Q_{\delta^{'}}(s_l^{m},a_l^{m}),(1-\epsilon)Q_{\delta^{'}}(s_l^{m},a_l^{m}))]
  73. JlPPO2​(θ)=Eal​~πθ′​(al​∣sl​)​[max(πθ′​(al​∣sl​)πθ​(al​∣sl​)​Qδ′​(slm​,alm​),(1−ϵ)Qδ′​(slm​,alm​))]对应的图示情况为

在这里插入图片描述
汇总起来以上两种情况,那么就相当于目标函数为

  1. J
  2. l
  3. P
  4. P
  5. O
  6. 2
  7. (
  8. θ
  9. )
  10. =
  11. E
  12. a
  13. l
  14. π
  15. θ
  16. (
  17. a
  18. l
  19. s
  20. l
  21. )
  22. [
  23. m
  24. i
  25. n
  26. (
  27. π
  28. θ
  29. (
  30. a
  31. l
  32. s
  33. l
  34. )
  35. π
  36. θ
  37. (
  38. a
  39. l
  40. s
  41. l
  42. )
  43. Q
  44. δ
  45. (
  46. s
  47. l
  48. m
  49. ,
  50. a
  51. l
  52. m
  53. )
  54. ,
  55. C
  56. L
  57. I
  58. P
  59. [
  60. π
  61. θ
  62. (
  63. a
  64. l
  65. s
  66. l
  67. )
  68. π
  69. θ
  70. (
  71. a
  72. l
  73. s
  74. l
  75. )
  76. ,
  77. (
  78. 1
  79. +
  80. ϵ
  81. )
  82. ,
  83. (
  84. 1
  85. ϵ
  86. )
  87. ]
  88. Q
  89. δ
  90. (
  91. s
  92. l
  93. m
  94. ,
  95. a
  96. l
  97. m
  98. )
  99. )
  100. ]
  101. J^{PPO2}_l(\theta)=E_{a_l\pi_\theta^{'}(a_l|s_l)}[min(\frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)}Q_{\delta^{'}}(s_l^{m},a_l^{m}),CLIP[\frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)},(1+\epsilon),(1-\epsilon)]Q_{\delta^{'}}(s_l^{m},a_l^{m}))]
  102. JlPPO2​(θ)=Eal​~πθ′​(al​∣sl​)​[min(πθ′​(al​∣sl​)πθ​(al​∣sl​)​Qδ′​(slm​,alm​),CLIP[πθ′​(al​∣sl​)πθ​(al​∣sl​)​,(1+ϵ),(1−ϵ)]Qδ′​(slm​,alm​))]

其中CLIP被定义为如下函数

  1. C
  2. L
  3. I
  4. P
  5. [
  6. π
  7. θ
  8. (
  9. a
  10. l
  11. s
  12. l
  13. )
  14. π
  15. θ
  16. (
  17. a
  18. l
  19. s
  20. l
  21. )
  22. ,
  23. (
  24. 1
  25. +
  26. ϵ
  27. )
  28. ,
  29. (
  30. 1
  31. ϵ
  32. )
  33. ]
  34. CLIP[\frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)},(1+\epsilon),(1-\epsilon)]
  35. CLIP[πθ′​(al​∣sl​)πθ​(al​∣sl​)​,(1+ϵ),(1−ϵ)]

它代表着

  1. π
  2. θ
  3. (
  4. a
  5. l
  6. s
  7. l
  8. )
  9. π
  10. θ
  11. (
  12. a
  13. l
  14. s
  15. l
  16. )
  17. \frac{\pi_\theta(a_l|s_l)}{\pi_\theta^{'}(a_l|s_l)}
  18. πθ′​(al​∣sl​)πθ​(al​∣sl​)​超过
  19. (
  20. 1
  21. +
  22. ϵ
  23. )
  24. (1+\epsilon)
  25. (1+ϵ)的部分被截断为
  26. (
  27. 1
  28. +
  29. ϵ
  30. )
  31. (1+\epsilon)
  32. (1+ϵ),低于
  33. (
  34. 1
  35. ϵ
  36. )
  37. (1-\epsilon)
  38. (1−ϵ)的部分被截断为
  39. (
  40. 1
  41. ϵ
  42. )
  43. (1-\epsilon)
  44. (1−ϵ)。

3、总结

PPO思想还是很简单的,主要是针对Important-Sampling产生的不稳定性进行了CLIP操作和罚函数法,相比TRPO方法更简单容易实现,有了策略梯度的定义,可以结合其他Actor-Critic进行联合使用更新,并且PPO将策略梯度缺陷的on-policy变为了off-policy,更大可能的利用了采样样本,效率和速度都有了一定的提升。


本文转载自: https://blog.csdn.net/lvoutongyi/article/details/129589414
版权归原作者 lotylotylotyloty 所有, 如有侵权,请联系我们删除。

“Proximal Policy Optimization(近端策略优化)(PPO)原理详解”的评论:

还没有评论