强化学习SAC算法对数概率公式推导

强化学习 SAC算法 对数概率推导

先上原论文:

SAC

首先对公式 ( 20 ) (20) (20) 做推导。

公式 ( 20 ) (20) (20) 的数据流应该是这样的:
s → π ( u ∣ s ) → u → a = tanh ⁡ ( u ) → a \mathbf{s}\rightarrow \pi(\mathbf{u}|\mathbf{s}) \rightarrow \mathbf{u}\rightarrow \mathbf{a}=\tanh(\mathbf{u})\rightarrow \mathbf{a} sπ(us)ua=tanh(u)a
a \mathbf{a} a 的概率密度,我们先可以这样写出 a \mathbf{a} a 的分布函数表达式:
P r A ( a ) = P r ( A ≤ a )   ( A 表示随机变量 , a 表示 A 的某个观察值 , 也就是实际产生的“ a c t i o n ” ) = P r ( tanh ⁡ ( U ) ≤ a )   ( 带入 tanh ⁡ 函数 , 将随机变量 A 用 U 的函数来表示 ) = P r ( U ≤ tanh ⁡ − 1 ( a ) )   ( 求解 P r 里面的不等式 , tanh ⁡ 的反函数用 tanh ⁡ − 1 表示 ) = F U ( tanh ⁡ − 1 ( a ) )   ( 根据分布函数的定义 , 化简这个表达式 ) (1) \begin{align*} Pr_{A}(a) &= Pr(A\le a) \\ &\ (A表示随机变量,a表示A的某个观察值,也就是实际产生的“action”) \\ &= Pr(\tanh(U)\le a) \\ &\ (带入\tanh 函数,将随机变量A用U的函数来表示) \\ &= Pr(U\le\tanh^{-1}(a)) \\ &\ (求解Pr里面的不等式,\tanh 的反函数用\tanh^{-1}表示) \\ &= F_{U}(\tanh^{-1}(a)) \\ &\ (根据分布函数的定义,化简这个表达式) \\ \end{align*}\tag{1} PrA(a)=Pr(Aa) (A表示随机变量,a表示A的某个观察值,也就是实际产生的action)=Pr(tanh(U)a) (带入tanh函数,将随机变量AU的函数来表示)=Pr(Utanh1(a)) (求解Pr里面的不等式,tanh的反函数用tanh1表示)=FU(tanh1(a)) (根据分布函数的定义,化简这个表达式)(1)
a \mathbf{a} a 的概率密度,我们可以由 a \mathbf{a} a 的分布函数求导得到:
p ( A ) = d P r A ( a ) d a = d F U ( tanh ⁡ − 1 ( a ) ) d a   ( 代入 ( 1 ) 中的表达式 ) = d F U ( tanh ⁡ − 1 ( a ) ) d tanh ⁡ − 1 ( a ) ⋅ d tanh ⁡ − 1 ( a ) d a   ( 对表达式做链式求导 ) = d F U ( u ) d u ⋅ d u d a   ( 这是因为 a = tanh ⁡ ( u ) , 则 u = tanh ⁡ − 1 ( a ) ) = p ( U ) ⋅ ( det ⁡ d a d u ) − 1   ( 左边一部分根据概率密度函数的定义 , 右边一部分根据: )   ( “反函数的导数等于原函数导数的倒数” )   ( 另外 , 向量对向量求导得到的结果是矩阵形式 , 因为 a = tanh ⁡ ( u ) )   ( 是逐个对应元素做计算 , 那么得到的矩阵就是一个对角阵 )   ( 最后的结果是:原函数的导数的对角阵的逆 ) = μ ( u ∣ s ) ⋅ ∣ det ⁡ d a d u ∣ − 1 (2) \begin{align*} p(A) &= \frac{\mathbf{d}Pr_{A}(\mathbf{a})}{\mathbf{d}\mathbf{a}} \\ &= \frac{\mathbf{d}F_{U}(\tanh^{-1}(\mathbf{a}))}{\mathbf{d}\mathbf{a}} \\ &\ (代入(1)中的表达式) \\ &= \frac{\mathbf{d}F_{U}(\tanh^{-1}(\mathbf{a}))}{\mathbf{d}\tanh^{-1}(\mathbf{a})}\cdot\frac{\mathbf{d}\tanh^{-1}(\mathbf{a})}{\mathbf{d}\mathbf{a}} \\ &\ (对表达式做链式求导) \\ &= \frac{\mathbf{d}F_{U}(\mathbf{u})}{\mathbf{d}\mathbf{u}}\cdot\frac{\mathbf{d}\mathbf{u}}{\mathbf{d}\mathbf{a}} \\ &\ (这是因为\mathbf{a}=\tanh(\mathbf{u}),则\mathbf{u}=\tanh^{-1}(\mathbf{a})) \\ &= p(U)\cdot\big(\det\frac{\mathbf{d}\mathbf{a}}{\mathbf{d}\mathbf{u}}\big)^{-1} \\ &\ (左边一部分根据概率密度函数的定义,右边一部分根据:) \\ &\ (“反函数的导数等于原函数导数的倒数”) \\ &\ (另外,向量对向量求导得到的结果是矩阵形式,因为\mathbf{a}=\tanh(\mathbf{u})) \\ &\ (是逐个对应元素做计算,那么得到的矩阵就是一个对角阵) \\ &\ (最后的结果是:原函数的导数的对角阵的逆) \\ &= \mu(\mathbf{u}|\mathbf{s})\cdot \big|\det\frac{\mathbf{d}\mathbf{a}}{\mathbf{d}\mathbf{u}}\big|^{-1} \\ \end{align*}\tag{2} p(A)=dadPrA(a)=dadFU(tanh1(a)) (代入(1)中的表达式)=dtanh1(a)dFU(tanh1(a))dadtanh1(a) (对表达式做链式求导)=dudFU(u)dadu (这是因为a=tanh(u),u=tanh1(a))=p(U)(detduda)1 (左边一部分根据概率密度函数的定义,右边一部分根据:) (反函数的导数等于原函数导数的倒数) (另外,向量对向量求导得到的结果是矩阵形式,因为a=tanh(u)) (是逐个对应元素做计算,那么得到的矩阵就是一个对角阵) (最后的结果是:原函数的导数的对角阵的逆)=μ(us) detduda 1(2)
我们得到了论文的公式 ( 20 ) (20) (20) ,但是后面导数的对角阵的逆还需要进一步处理。
y = tanh ⁡ ( x ) = sinh ⁡ ( x ) cosh ⁡ ( x ) y ′ = cosh ⁡ 2 ( x ) − sinh ⁡ 2 ( x ) cosh ⁡ 2 ( x ) = 1 − tanh ⁡ 2 ( x ) 其中, [ cosh ⁡ ( x ) ] ′ = sinh ⁡ ( x ) , [ sinh ⁡ ( x ) ] ′ = cosh ⁡ ( x ) \begin{align*} y&=\tanh(x)=\frac{\sinh(x)}{\cosh(x)}\tag{3} \\ y^{\prime}&=\frac{\cosh^{2}(x)-\sinh^{2}(x)}{\cosh^{2}(x)} \\ &= 1-\tanh^{2}(x)\tag{4} \\ &其中,[\cosh(x)]^{\prime}=\sinh(x),[\sinh(x)]^{\prime}=\cosh(x) \end{align*} yy=tanh(x)=cosh(x)sinh(x)=cosh2(x)cosh2(x)sinh2(x)=1tanh2(x)其中,[cosh(x)]=sinh(x)[sinh(x)]=cosh(x)(3)(4)
得到了这样一个等式之后,我们可以把这个等式用到向量之间:
     ∣ det ⁡ d a d u ∣ − 1 = ∣ d a 1 d u 1 ⋱ d a n d u n ∣ − 1 = ∣ 1 − tanh ⁡ 2 ( u 1 ) ⋱ 1 − tanh ⁡ 2 ( u n ) ∣ − 1 = 1 ( 1 − tanh ⁡ 2 ( u 1 ) ) ⋯ ( 1 − tanh ⁡ 2 ( u n ) ) (5) \begin{align*} &\ \ \ \ \big|\det\frac{\mathbf{d}\mathbf{a}}{\mathbf{d}\mathbf{u}}\big|^{-1} \\ &= \begin{vmatrix} \frac{\mathbf{d}a_{1}}{\mathbf{d}u_{1}} & & \\ & \ddots & \\ & & \frac{\mathbf{d}a_{n}}{\mathbf{d}u_{n}} \end{vmatrix}^{-1} \\ &= \begin{vmatrix} 1-\tanh^{2}(u_{1}) & & \\ & \ddots & \\ & & 1-\tanh^{2}(u_{n}) \end{vmatrix}^{-1} \\ &=\frac{1}{( 1-\tanh^{2}(u_{1}))\cdots(1-\tanh^{2}(u_{n}))} \end{align*}\tag{5}      detduda 1= du1da1dundan 1= 1tanh2(u1)1tanh2(un) 1=(1tanh2(u1))(1tanh2(un))1(5)
最后计算对数概率密度:
log ⁡ π ( a ∣ s ) = log ⁡ μ ( u ∣ s ) + log ⁡ 1 ( 1 − tanh ⁡ 2 ( u 1 ) ) ⋯ ( 1 − tanh ⁡ 2 ( u n ) )   ( 把公式 ( 5 ) 带进来并根据对数等式拆分 ) = log ⁡ μ ( u ∣ s ) − log ⁡ ( 1 − tanh ⁡ 2 ( u 1 ) ) − ⋯ log ⁡ ( 1 − tanh ⁡ 2 ( u n ) )   ( 根据对数等式拆分 ) = log ⁡ μ ( u ∣ s ) − ∑ i = 1 n log ⁡ ( 1 − tanh ⁡ 2 ( u i ) )   ( 化简一下 ) (6) \begin{align*} \log\pi(\mathbf{a}|\mathbf{s}) &= \log\mu(\mathbf{u}|\mathbf{s})+\log\frac{1}{( 1-\tanh^{2}(u_{1}))\cdots(1-\tanh^{2}(u_{n}))} \\ &\ (把公式(5)带进来并根据对数等式拆分) \\ &= \log\mu(\mathbf{u}|\mathbf{s}) - \log( 1-\tanh^{2}(u_{1}))-\cdots\log( 1-\tanh^{2}(u_{n})) \\ &\ (根据对数等式拆分) \\ &= \log\mu(\mathbf{u}|\mathbf{s}) -\sum\limits_{i=1}^{n}\log(1-\tanh^{2}(u_{i})) \\ &\ (化简一下) \\ \end{align*}\tag{6} logπ(as)=logμ(us)+log(1tanh2(u1))(1tanh2(un))1 (把公式(5)带进来并根据对数等式拆分)=logμ(us)log(1tanh2(u1))log(1tanh2(un)) (根据对数等式拆分)=logμ(us)i=1nlog(1tanh2(ui)) (化简一下)(6)
最后我想说的是:

  1. 这就是为什么在SAC的策略更新代码中,计算重采样之后的概率密度,还要再加上一串很奇怪的项。

    这一串很奇怪的项就是公式 ( 6 ) (6) (6) 的第二项。

  2. 一般是重采样之后通过 tanh ⁡ ( ) \tanh() tanh() 计算实际作用于环境的动作,然后对这个动作按元素做平方计算,最后用数字1减去这个平方计算值(内含广播机制),然后与前面的重采样直接计算的概率密度相减!

  3. 为什么会有 ϵ \epsilon ϵ 小量?我认为这是因为公式 ( 5 ) (5) (5) 的除法导致的。小量一般是10的-7次方,其实是忽略不计的。

OK,清楚了,撒花~~~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ctrl+Alt+L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值