AMP软阈值函数进阶

问题背景

AMP(Approximate Message Passing)算法与BP(Belief Propagation)算法,或者松弛BP(relaxed-BP)算法有一个区别就是AMP可以不知道估计向量每个元素的先验分布。问题描述如下

y = A x + n (1) \pmb y = \pmb A \pmb x + \pmb n \tag{1} yyy=AAAxxx+nnn(1)

其中 y \pmb y yyy为观测向量, n \pmb n nnn为噪声,且已知似然分布 p ( y m ∣ ( A x ) m ) , ∀ m p(y_m|(\pmb A \pmb x)_m),\forall m p(ym(AAAxxx)m),m,不要求知道 x n ( ∀ n ) x_n(\forall n) xn(n)的先验分布 p ( x n ) p(x_n) p(xn),AMP依然可以对 x \pmb x xxx做回归估计。

本质上,AMP所要解决的问题是一个压缩感知问题,所以向量 x \pmb x xxx是稀疏的,即 ∃ K ∈ N + ,   ∥ x ∥ 0 ≤ K \exist K \in \mathbb N^{+},\ {\Vert \pmb x \Vert}_0 \leq K KN+, xxx0K。据此,我们可以引入一个拉普拉斯分布(AMP的推导和理解-Part-1中有介绍)来近似 x n ( ∀ n ) x_n(\forall n) xn(n)的先验分布 p ( x n ) p(x_n) p(xn),记为

p ( x n ) ≅ e x p ( − β x n ) (2) p(x_n) \cong \mathrm{exp} (-\beta x_n) \tag{2} p(xn)exp(βxn)(2)

这样描述的意义何在,我们以LASSO(BPDN)问题下的联合概率密度函数举例,如式(3)所示,先不考虑其他参数,当 β → ∞ \beta \rightarrow \infty β时,可以发现,LASSO的解应与该分布的mode统一(实在不知道mode怎么翻译),所以考虑拉普拉斯分布是合理的。

μ ( d s ) = 1 Z ∏ i = 1 N e x p ( − β λ ∣ s i ∣ ) ∏ a = 1 n e x p { − β 2 ( y a − ( A s ) a ) 2 } ⏟ likelihood function (3) \mu(\text{d} \pmb s)=\frac{1}{Z} \prod_{i=1}^N exp(-\beta \lambda |s_i|) \underbrace{ \prod_{a=1}^n exp \Big \{ - \frac{\beta}{2}(y_a - (As)_a)^2 \Big \} }_{\text{likelihood function}}\tag{3} μ(dsss)=Z1i=1Nexp(βλsi)likelihood function a=1nexp{2β(ya(As)a)2}(3)

下面所有的叙述与AMP的推导和理解-Part-1中的“拉普拉斯分布参数的极限近似”一致,是对其做更具体地解释。(因为我写Part-1的时候这部分没有理清楚)

软阈值函数与其等价形式

软阈值函数(soft-threshold function)形式如下
η ( x ; b ) = { x − b      i f   x > b 0             i f   − b ≤ x ≤ b x + b      i f   x < − b (4) \eta(x;b)=\left\{ \begin{aligned} & x-b \ \ \ \ if \ x>b \\ & 0 \ \ \ \ \ \ \ \ \ \ \ if \ -b \leq x \leq b \\ & x + b \ \ \ \ if \ x < -b \tag{4} \end{aligned} \right. η(x;b)=xb    if x>b0           if bxbx+b    if x<b(4)

软阈值函数与下式,即式(5)是等价的

η ( x ; b ) = arg min ⁡ s ∈ R { ∣ s ∣ + 1 2 b ( s − x ) 2 } (5) \eta(x;b)=\argmin_{s \in \R} \Big \{ {|s|+\frac{1}{2b}(s-x)^2} \Big \} \tag{5} η(x;b)=sRargmin{s+2b1(sx)2}(5)

对于两者等价的解释:式(5)想要做的就是

f i n d   s ,   s u c h   t h a t ,   min ⁡ ∣ s ∣ + 1 2 b ( s − x ) 2 \mathrm{find} \ s, \ \mathrm{such} \ \mathrm{that}, \ \min |s|+\frac{1}{2b}(s-x)^2 find s, such that, mins+2b1(sx)2

下面就是中学数学了,我们把式(5)括号中的内容展开得到

{ 1 2 b ( s − ( x − b ) ) 2 + c o n s t ,   s > 0 1 2 b ( s − ( x + b ) ) 2 + c o n s t ,   s < 0 corresponding to  s = 0 (6) \left\{ \begin{aligned} & \frac{1}{2b} (s - (x-b))^2 + const , \ s > 0 \\ & \frac{1}{2b} (s - (x+b))^2 + const , \ s < 0 \\ & \text{corresponding to } s=0 \tag{6} \end{aligned} \right. 2b1(s(xb))2+const, s>02b1(s(x+b))2+const, s<0corresponding to s=0(6)

联系式(5)和式(6)可以得到式(4),式(4)也可以得到式(6),也就是说式(4)与式(5)等价。

拉普拉斯分布参数下的极限近似均值( β → ∞ \beta \rightarrow \infty β)

在Part-1中我们知道,从因子节点到变量节点的消息通过Berry-Esseen中心极限定理被近似为高斯分布,进而从变量节点到因子节点的消息可以被表示为一组高斯分布乘积与拉普拉斯先验分布(假设的先验)的乘积,该函数形式可以被表示为如下形式(Part-1中也有叙述):

f β ( s ; x , b ) ≡ 1 z β ( x , b ) e x p { − β ∣ s ∣ − β 2 b ( s − x ) 2 } (7) f_{\beta}(s;x,b) \equiv \frac{1}{z_{\beta}(x,b)}exp\{ -\beta |s|-\frac{\beta}{2b}(s-x)^2 \} \tag{7} fβ(s;x,b)zβ(x,b)1exp{βs2bβ(sx)2}(7)

若随机变量 Z Z Z的概率密度函数为 f β (   ⋅   ; x , b ) f_{\beta}(\ \cdot \ ;x,b) fβ(  ;x,b),那么定义其均值和方差为

F β ( x ; b ) ≡ E f β (   ⋅   ; x , b ) ( Z ) ,     G β ( x ; b ) ≡ Var f β (   ⋅   ; x , b ) ( Z ) (8) F_{\beta}(x;b) \equiv \mathbb E_{f_{\beta}(\ \cdot \ ;x,b)}(Z), \ \ \ G_{\beta}(x;b) \equiv \text{Var}_{f_{\beta}(\ \cdot \ ;x,b)}(Z) \tag{8} Fβ(x;b)Efβ(  ;x,b)(Z),   Gβ(x;b)Varfβ(  ;x,b)(Z)(8)

首先,对概率密度函数为 f β (   ⋅   ; x , b ) f_{\beta}(\ \cdot \ ;x,b) fβ(  ;x,b),一定满足

∫ 1 z β ( x , b ) e x p { − β ( ∣ s ∣ + 1 2 b ( s − x ) 2 ) } d s = 1 (9) \int \frac{1}{z_{\beta}(x,b)}exp\{ -\beta(|s|+\frac{1}{2b}(s-x)^2 )\} \mathrm{d} s = 1 \tag{9} zβ(x,b)1exp{β(s+2b1(sx)2)}ds=1(9)

接下来考虑当 β → ∞ \beta \rightarrow \infty β时, f β ( s ; x , b ) f_{\beta}(s;x,b) fβ(s;x,b) ∣ s ∣ + 1 2 b ( s − x ) 2 {|s|+\frac{1}{2b}(s-x)^2} s+2b1(sx)2的最小值主导,假设 log ⁡ f β ( s ∗ ; x , b ) ≅ min ⁡ ∣ s ∣ + 1 2 b ( s − x ) 2 \log {f_{\beta}(s_*;x,b)} \cong \min {|s|+\frac{1}{2b}(s-x)^2} logfβ(s;x,b)mins+2b1(sx)2,即式(5),那么式(9)可以被近似为

∫ δ ( s − s ∗ ) d s = 1 o r    f β ( s ; x , b ) → δ ( s − s ∗ )    ( β → ∞ ) (10) \int \delta(s-s_*) \mathrm{d}s = 1\\ or \ \ f_{\beta}(s;x,b) \rightarrow \delta(s-s_*) \ \ (\beta \rightarrow \infty) \tag{10} δ(ss)ds=1or  fβ(s;x,b)δ(ss)  (β)(10)

所以期望 F β ( x ; b ) F_{\beta}(x;b) Fβ(x;b)可以表示为

lim ⁡ β → ∞ F β ( x ; b ) = lim ⁡ β → ∞ ∫ s f β ( s ; x , b ) d s = ∫ s δ ( s − s ∗ ) d s = s ∗ = η ( x ; b ) (11) \lim_{\beta \rightarrow \infty} F_{\beta}(x;b)=\lim_{\beta \rightarrow \infty}\int s f_{\beta}(s;x,b) \mathrm{d}s= \int s \delta(s-s_*) \mathrm{d}s=s_*=\eta(x;b) \tag{11} βlimFβ(x;b)=βlimsfβ(s;x,b)ds=sδ(ss)ds=s=η(x;b)(11)

即均值为

lim ⁡ β → ∞ F β ( x ; b ) = η ( x ; b ) (12) \lim_{\beta \rightarrow \infty} F_{\beta}(x;b)=\eta(x;b) \tag{12} βlimFβ(x;b)=η(x;b)(12)

从均值到方差

式(8)中还有一项没有考虑, 方差项 G β ( x ; b ) ≡ Var f β (   ⋅   ; x , b ) ( Z ) G_{\beta}(x;b) \equiv \text{Var}_{f_{\beta}(\ \cdot \ ;x,b)}(Z) Gβ(x;b)Varfβ(  ;x,b)(Z)。再回过头来看式(7),我们可以把式(7)改写为

f β ( s ; x , b ) ≡ 1 z β ( x , b ) e x p ( − β ∣ s ∣ ) ⏟ assume prior  p ( s ) ⋅ e x p { − β 2 b ( s − x ) 2 } ⏟ assume likelihood p(x|s) (13) f_{\beta}(s;x,b) \equiv \frac{1}{z_{\beta}(x,b)} \underbrace{exp(-\beta |s|) }_{\text{assume prior } p(s)}\cdot \underbrace{exp\{-\frac{\beta}{2b}(s-x)^2 \}}_{\text{assume likelihood p(x|s)}} \tag{13} fβ(s;x,b)zβ(x,b)1assume prior p(s) exp(βs)assume likelihood p(x|s) exp{2bβ(sx)2}(13)

由式(13)可知,将 f β ( s ; x , b ) f_{\beta}(s;x,b) fβ(s;x,b)拆为先验分布和似然分布(观测量为 x x x)的乘积,其中似然分布为高斯分布。形式上可以将 f β ( s ; x , b ) f_{\beta}(s;x,b) fβ(s;x,b)理解为是模型 x = s + n ,   s ∼ p ( s ) ,   n ∼ N ( 0 , b β ) x=s+n, \ s \sim p(s), \ n \sim \mathcal N(0,\frac{b}{\beta}) x=s+n, sp(s), nN(0,βb)的后验概率密度函数,根据AWGN后验估计下的均值与方差关系,即

∂ ∂ x f β ( s ; x , b ) = β b G β ( x ; b ) \frac{\partial}{\partial x} f_{\beta}(s;x,b)=\frac{\beta}{b} G_{\beta}(x;b) xfβ(s;x,b)=bβGβ(x;b)

lim ⁡ β → ∞ β G β ( x ; b ) = b η ′ ( x ; b ) \lim_{\beta \rightarrow \infty} \beta G_{\beta}(x;b) =b \eta^{\prime }(x;b) βlimβGβ(x;b)=bη(x;b)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
`amp.autocast()`是PyTorch中用于自动混合精训练的一个上下文管理器。它可以将部分计算转换为低精的float16或bfloat16进行计算,从而在减少内存消耗的同时加速训练。它的用法如下: ```python with torch.cuda.amp.autocast(): # 执行需要混合精计算的操作 ``` 使用`with`语句将需要混合精计算的操作包裹起来。在该上下文管理器内,所有使用`torch.Tensor`类型的计算都会被自动转换为相应的低精类型。在上下文管理器外部,则会使用默认的float32类型。例如: ```python import torch x = torch.randn(2, 3).cuda() # 创建一个需要混合精计算的模型 class MyModel(torch.nn.Module): def __init__(self): super().__init__() self.linear = torch.nn.Linear(3, 1) def forward(self, x): x = self.linear(x) return x model = MyModel().cuda() # 创建一个optimizer optimizer = torch.optim.SGD(model.parameters(), lr=0.1) # 创建一个loss函数 loss_fn = torch.nn.MSELoss() # 进行训练 for i in range(10): optimizer.zero_grad() with torch.cuda.amp.autocast(): y = model(x) loss = loss_fn(y, torch.ones(2, 1).cuda()) loss.backward() optimizer.step() print(loss) ``` 在这个例子中,我们使用了`amp.autocast()`上下文管理器将模型的前向传播和loss函数的计算转换为float16类型的计算,从而加速了训练。同时,我们还需要注意到,在backward()函数中,梯计算是以float32类型进行的,以防止精损失影响训练效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值