高斯策略#
连续动作策略里常见的公式是:
πθ(a∣s)=σθ(s)2π1exp(−2σθ(s)2(a−μθ(s))2)
它有两层含义。
第一层:这是一个高斯分布的概率密度函数。
第二层:在连续动作空间里,如果只知道动作的均值和方差,并希望分布熵最大,数学会推出这个形状。
0. 公式成立前的假设#
这个公式出现之前,已经默认了几件事。
假设 1:动作是连续变量#
方向盘角度、机械臂关节角度、力度、速度,都可以看成连续动作:
a∈R
如果动作只能取“左、右、上、下”,通常会用 categorical distribution。连续动作更适合用连续概率密度建模,高斯分布就是最常见的一种选择。
假设 2:给定状态后,动作服从高斯分布#
给定状态 s,动作满足:
a∣s∼N(μθ(s),σθ(s)2)
这句话的意思是:策略网络读入状态 s,输出两个量:
μθ(s)
和
σθ(s)
其中,μθ(s) 表示动作分布的中心,也就是“平均想做什么动作”;σθ(s) 表示动作分布的宽度,也就是“愿意探索多大范围”。
因此 πθ(a∣s) 是一个状态条件分布:在状态 s 下,策略选择动作 a 的概率密度。
假设 3:标准差必须大于 0#
标准差表示宽度,所以必须满足:
σθ(s)>0
真实代码里,神经网络通常输出 logσθ(s),再取指数:
σθ(s)=exp(logσθ(s))
这样可以保证标准差始终为正。
假设 4:动作空间先看作整个实数轴#
标准高斯公式默认:
a∈(−∞,∞)
如果真实动作有范围,例如 a∈[−1,1],SAC 里常用的做法是先采样:
u∼N(μθ(s),σθ(s)2)
再压缩:
a=tanh(u)
这叫 tanh-squashed Gaussian policy。这时概率密度还需要额外的 Jacobian 修正。本文先看最基础的未压缩版本。
1. 从普通高斯分布开始#
先不考虑神经网络,也不考虑状态 s。只看一个连续随机变量 a。
假设分布中心是 μ,波动尺度是 σ。我们希望它满足三个性质:
- 离 μ 越近,概率越大。
- 离 μ 越远,概率越小。
- 左右对称,只关心偏离距离。
于是先写成:
p(a)=Cexp(−2σ2(a−μ)2)
指数部分
exp(−2σ2(a−μ)2)
负责制造钟形曲线。前面的常数 C 负责让总概率等于 1。
概率密度必须满足:
∫−∞∞p(a)da=1
代入 p(a):
∫−∞∞Cexp(−2σ2(a−μ)2)da=1
把常数 C 提出来:
C∫−∞∞exp(−2σ2(a−μ)2)da=1
做变量替换:
z=σa−μ
于是:
a=μ+σz,da=σdz
积分变成:
Cσ∫−∞∞exp(−2z2)dz=1
经典高斯积分给出:
∫−∞∞exp(−2z2)dz=2π
所以:
Cσ2π=1
因此:
C=σ2π1
带回原式:
p(a)=σ2π1exp(−2σ2(a−μ)2)
这就是一维高斯分布的概率密度函数。
2. 为什么有平方项#
平方项来自对称性。
我们希望:
a=μ+c
和
a=μ−c
具有相同概率。向左偏离 c 和向右偏离 c,应该一样可能。
所以概率密度依赖偏离量的平方:
(a−μ)2
因为:
(μ+c−μ)2=c2
并且:
(μ−c−μ)2=(−c)2=c2
平方把左右偏差统一成同一个距离量。高斯分布因此天然以 μ 为中心对称。
3. 为什么指数前面有负号#
如果指数项随着距离变大而增长,曲线下面积会发散,无法成为概率分布。
负号让概率密度随着偏离增大而下降:
exp(−2σ2(a−μ)2)
当 ∣a−μ∣ 越大,指数里的负数越小,概率密度越低。
4. 为什么分母是 2σ2#
把高斯写成更一般的形式:
p(a)=Cexp(−β(a−μ)2)
其中 β 控制曲线宽度。β 越大,曲线下降越快,分布越窄;β 越小,曲线下降越慢,分布越宽。
可以计算得到,这个分布的方差是:
Var(a)=2β1
我们希望方差正好等于 σ2,于是令:
2β1=σ2
解得:
β=2σ21
所以指数写成:
−2σ2(a−μ)2
这样参数 σ2 才真的是这个分布的方差。
5. 最大熵原理推出高斯形状#
上面从高斯形状开始推导归一化常数。现在换一个角度:为什么会出现这个形状?
最大熵问题是:在所有概率密度 p(a) 中,找熵最大的分布。
连续分布的 Shannon differential entropy 是:
H(p)=−∫p(a)logp(a)da
约束有三个:
∫p(a)da=1
∫ap(a)da=μ
∫(a−μ)2p(a)da=σ2
也就是概率总量为 1,均值固定为 μ,方差固定为 σ2。
构造拉格朗日泛函:
L[p]=−∫p(a)logp(a)da+λ0(∫p(a)da−1)
+λ1(∫(a−μ)p(a)da)+λ2(∫(a−μ)2p(a)da−σ2)
对 p(a) 做变分。核心求导是:
δp(a)δ[−p(a)logp(a)]=−logp(a)−1
因此:
δp(a)δL=−logp(a)−1+λ0+λ1(a−μ)+λ2(a−μ)2
令它等于 0:
−logp(a)−1+λ0+λ1(a−μ)+λ2(a−μ)2=0
移项:
logp(a)=λ0−1+λ1(a−μ)+λ2(a−μ)2
两边取指数:
p(a)=exp(λ0−1)exp(λ1(a−μ))exp(λ2(a−μ)2)
由于约束只固定均值和方差,没有额外规定左右偏向,最大熵解以 μ 为中心对称。因此线性项消失:
λ1=0
于是:
p(a)=exp(λ0−1)exp(λ2(a−μ)2)
记:
C=exp(λ0−1)
得到:
p(a)=Cexp(λ2(a−μ)2)
为了让积分收敛,必须有:
λ2<0
令:
λ2=−β,β>0
于是:
p(a)=Cexp(−β(a−μ)2)
根据方差约束:
β=2σ21
所以:
p(a)=Cexp(−2σ2(a−μ)2)
再由归一化条件解出:
C=σ2π1
最终:
p(a)=σ2π1exp(−2σ2(a−μ)2)
这说明:在只知道均值和方差的情况下,熵最大的连续分布就是高斯分布。
6. 回到强化学习策略#
强化学习里的策略写作:
πθ(a∣s)
它表示:在状态 s 下,智能体选择动作 a 的概率密度。
把普通高斯分布里的 μ 和 σ 换成神经网络输出:
μ→μθ(s)
σ→σθ(s)
就得到:
πθ(a∣s)=σθ(s)2π1exp(−2σθ(s)2(a−μθ(s))2)
其中:
μθ(s)
控制动作分布的中心。
σθ(s)
控制动作分布的宽度。
a−μθ(s)
表示当前动作偏离策略均值多少。
(a−μθ(s))2
表示偏离程度。
exp(−2σθ(s)2(a−μθ(s))2)
表示偏离越大,概率越低。
σθ(s)2π1
保证整条概率密度曲线下面积等于 1。
7. 核心直觉#
高斯策略可以写成采样形式:
a=μθ(s)+σθ(s)ϵ
其中:
ϵ∼N(0,1)
也就是说:
动作=当前最想做的动作+随机探索噪声
如果 σθ(s) 很大,动作更分散,探索更强。
如果 σθ(s) 很小,动作更集中,策略更确定。
所以高斯策略把连续控制问题拆成两个输出:
μθ(s):当前倾向于做什么
σθ(s):愿意探索多大范围
8. 总结#
这个公式的前提是:
a∈R
a∣s∼N(μθ(s),σθ(s)2)
σθ(s)>0
从最大熵角度看,还需要约束:
∫p(a)da=1
∫ap(a)da=μ
∫(a−μ)2p(a)da=σ2
在这些约束下,最大熵原理推出:
p(a)=σ2π1exp(−2σ2(a−μ)2)
把 μ 和 σ 换成状态相关的神经网络输出 μθ(s)、σθ(s),就得到强化学习里的高斯策略:
πθ(a∣s)=σθ(s)2π1exp(−2σθ(s)2(a−μθ(s))2)
一句话:动作是连续的;只知道均值和方差时,熵最大的分布是高斯分布。高斯策略就是把这个最大熵分布做成状态相关的策略网络输出。