前言
在上一篇博客中我们简单介绍了消息传递算法的雏形。 然而, 当变量维度较大时,对每个标量进行逐个的消息计算需要不可能承担的复杂度。 因此, 通过一些近似来简化计算, 则是 AMP (approximate message passing) 类算法的核心思想。这篇博客, 我们将通过详细的数学推导, 来展示 GAMP 算法是如何对消息传递进行近似的。
模型背景
我们旨在解决上图这样的问题, 已知输入
q
\mathbf{q}
q (先验信息), 已知输出
y
\mathbf{y}
y(后验信息), 已知变换矩阵
A
\mathbf{A}
A, 反推出变量
x
\mathbf{x}
x。 以AWGN信道举例:
y
=
z
+
w
=
A
x
+
w
\mathbf{y}=\mathbf{z}+\mathbf{w}=\mathbf{A} \mathbf{x}+\mathbf{w}
y=z+w=Ax+w
y
\mathbf{y}
y已知而我们试图反推出
x
\mathbf{x}
x。 此时, 如果
x
\mathbf{x}
x有一些先验分布信息, 如稀疏分布, 即
x
\mathbf{x}
x中只有少量元素非零, 那么, 便可以通过概率的方式, 以GAMP算法进行求解。
推导
我们先以 MAP 版本的 GAMP为例。 即最大化后验概率:
x
^
map
:
=
arg
max
x
∈
R
n
F
(
x
,
z
,
q
,
y
)
,
z
^
=
A
x
^
\widehat{\mathbf{x}}^{\text {map }}:=\underset{\mathbf{x} \in \mathbb{R}^{n}}{\arg \max } F(\mathbf{x}, \mathbf{z}, \mathbf{q}, \mathbf{y}), \quad \widehat{\mathbf{z}}=\mathbf{A} \widehat{\mathbf{x}}
x
map :=x∈RnargmaxF(x,z,q,y),z
=Ax
其中,
F
(
x
,
z
,
q
,
y
)
:
=
∑
j
=
1
n
f
i
n
(
x
j
,
q
j
)
+
∑
i
=
1
m
f
out
(
z
i
,
y
i
)
,
F(\mathbf{x}, \mathbf{z}, \mathbf{q}, \mathbf{y}):=\sum_{j=1}^{n} f_{\mathrm{in}}\left(x_{j}, q_{j}\right)+\sum_{i=1}^{m} f_{\text {out }}\left(z_{i}, y_{i}\right),
F(x,z,q,y):=j=1∑nfin(xj,qj)+i=1∑mfout (zi,yi),
f
i
n
f_\mathrm{in}
fin 和
f
o
u
t
f_\mathrm{out}
fout 分别为:
f
out
(
z
,
y
)
:
=
log
p
Y
∣
Z
(
y
∣
z
)
f
in
(
x
,
q
)
:
=
log
p
X
∣
Q
(
x
∣
q
)
\begin{aligned} f_{\text {out }}(z, y) &:=\log p_{Y \mid Z}(y \mid z) \\ f_{\text {in }}(x, q) &:=\log p_{X \mid Q}(x \mid q) \end{aligned}
fout (z,y)fin (x,q):=logpY∣Z(y∣z):=logpX∣Q(x∣q)
因此 MAP 估计就是找出 可能性最大(对应后验概率最大)的
x
x
x 作为估计值。
传统的消息传递算法, 在每次迭代中, 实际要计算两个消息算子:
Δ
i
→
j
(
t
,
x
j
)
=
c
o
n
s
t
+
max
x
\
x
j
f
out
(
z
i
,
y
i
)
+
∑
r
≠
j
Δ
i
←
r
(
t
,
x
r
)
(1)
\begin{aligned} {\Delta}_{i \rightarrow j}\left(t, x_{j}\right)=\mathrm{const} +\max _{\mathbf{x}\backslash x_j} f_{\text {out }}\left(z_{i}, y_{i}\right)+\sum_{r \neq j} \Delta_{i \leftarrow r}\left(t, x_{r}\right) \end{aligned}\tag{1}
Δi→j(t,xj)=const+x\xjmaxfout (zi,yi)+r=j∑Δi←r(t,xr)(1)
和
Δ
i
←
j
(
t
+
1
,
x
j
)
=
c
o
n
s
t
+
f
i
n
(
x
j
,
q
j
)
+
∑
ℓ
≠
i
Δ
ℓ
→
j
(
t
,
x
j
)
(2)
\begin{aligned} {\Delta}_{i \leftarrow j}\left(t+1, x_{j}\right)=\mathrm{const} +f_{\mathrm{in}}\left(x_{j}, q_{j}\right)+\sum_{\ell \neq i} \Delta_{\ell \rightarrow j}\left(t, x_{j}\right) \end{aligned}\tag{2}
Δi←j(t+1,xj)=const+fin(xj,qj)+ℓ=i∑Δℓ→j(t,xj)(2)
简单理解(1)和(2)的意义:
i
→
j
i\rightarrow j
i→j, 代表的就是由于
z
i
=
a
i
x
z_i=a_i\mathbf{x}
zi=aix这一限制的存在, 从而对
x
j
x_j
xj进行的修正。
j
→
i
j\rightarrow i
j→i 则是
x
j
x_j
xj 向
i
i
i 节点传递当前自己 根据 除了
z
i
=
a
i
x
z_i=a_i\mathbf{x}
zi=aix 这条限制以外的 其他限制 进行修正后的 结果。 这里是为了防止消息被重复累加。 在第一篇博客中对消息传递算法有更详细的介绍。
接下来进行近似简化, 我们先有如下一些将用到的定义:
x
^
j
(
t
)
:
=
arg
max
x
j
Δ
j
(
t
,
x
j
)
x
^
i
←
j
(
t
)
:
=
arg
max
x
j
Δ
i
←
j
(
t
,
x
j
)
1
τ
j
x
(
t
)
:
=
−
∂
2
∂
x
j
2
Δ
j
(
t
,
x
j
)
∣
x
j
=
x
^
j
(
t
)
1
τ
i
←
j
x
(
t
)
:
=
−
∂
2
∂
x
j
2
Δ
i
←
j
(
t
,
x
j
)
∣
x
j
=
x
^
i
←
j
(
t
)
.
\begin{aligned} \widehat{x}_{j}(t) &:=\underset{x_{j}}{\arg \max } \Delta_{j}\left(t, x_{j}\right) \\ \widehat{x}_{i \leftarrow j}(t) &:=\underset{x_{j}}{\arg \max } \Delta_{i \leftarrow j}\left(t, x_{j}\right) \\ \frac{1}{\tau_{j}^{x}(t)} &:=-\left.\frac{\partial^{2}}{\partial x_{j}^{2}} \Delta_{j}\left(t, x_{j}\right)\right|_{x_{j}=\widehat{x}_{j}(t)} \\ \frac{1}{\tau_{i \leftarrow j}^{x}(t)} &:=-\left.\frac{\partial^{2}}{\partial x_{j}^{2}} \Delta_{i \leftarrow j}\left(t, x_{j}\right)\right|_{x_{j}=\widehat{x}_{i \leftarrow j}(t)} . \end{aligned}
x
j(t)x
i←j(t)τjx(t)1τi←jx(t)1:=xjargmaxΔj(t,xj):=xjargmaxΔi←j(t,xj):=−∂xj2∂2Δj(t,xj)∣∣∣∣∣xj=x
j(t):=−∂xj2∂2Δi←j(t,xj)∣∣∣∣∣xj=x
i←j(t).
其中,
Δ
j
(
x
j
)
:
=
max
x
\
x
j
F
(
x
,
z
,
q
,
y
)
,
z
^
=
A
x
^
\Delta_{j}\left(x_{j}\right):=\max _{\mathbf{x} \backslash x_{j}} F(\mathbf{x}, \mathbf{z}, \mathbf{q}, \mathbf{y}), \quad \widehat{\mathbf{z}}=\mathbf{A} \widehat{\mathbf{x}}
Δj(xj):=x\xjmaxF(x,z,q,y),z
=Ax
其中
x
\
x
j
{\mathbf{x} \backslash x_{j}}
x\xj表示
x
j
x_j
xj不变, 优化
x
\mathbf{x}
x的其他元素们。因此
x
^
j
\widehat{x}_{j}
x
j事实上就对应于我们在消息传递过程中不断迭代得到的最大后验估计。因此在迭代中, 我们有:
Δ
j
(
t
+
1
,
x
j
)
=
f
i
n
(
x
j
,
q
j
)
+
∑
i
Δ
i
→
j
(
t
,
x
j
)
\Delta_{j}\left(t+1, x_{j}\right)=f_{\mathrm{in}}\left(x_{j}, q_{j}\right)+\sum_{i} \Delta_{i \rightarrow j}\left(t, x_{j}\right)
Δj(t+1,xj)=fin(xj,qj)+i∑Δi→j(t,xj)
和(2)相比,
Δ
j
\Delta_{j}
Δj 就是考虑了所有节点的限制及先验信息,再给出的整体的一个
x
j
x_j
xj的估计。
我们先对(2)进行近似:
将(2)在
x
^
i
←
r
(
t
)
\widehat{x}_{i \leftarrow r}(t)
x
i←r(t)点进行二次泰勒展开, 可以得到:
Δ
i
←
r
(
t
,
x
r
)
≈
Δ
i
←
r
(
t
,
x
^
i
←
r
(
t
)
)
−
1
2
τ
r
x
(
t
)
(
x
r
−
x
^
i
←
r
(
t
)
)
2
(3)
\Delta_{i \leftarrow r}\left(t, x_{r}\right) \approx \Delta_{i \leftarrow r}\left(t, \widehat{x}_{i \leftarrow r}(t)\right)-\frac{1}{2 \tau_{r}^{x}(t)}\left(x_{r}-\widehat{x}_{i \leftarrow r}(t)\right)^{2} \tag{3}
Δi←r(t,xr)≈Δi←r(t,x
i←r(t))−2τrx(t)1(xr−x
i←r(t))2(3)
注意,这里的展开里我们忽略了泰勒展开的一次项, 这是因为我们后续的推导中还会对
x
r
x_r
xr进行一次求导, 那么一次项便成了常数项, 不再影响后续的优化推导, 因此,在这里直接省略了。
将(3)代入(1)中,有:
Δ i → j ( t , x j ) = max z i [ f out ( z i , y i ) − 1 2 τ i → j p ( t ) ( z i − p ^ i → j ( t ) − a i j x j ) 2 , ] + c o n s t (4) \begin{aligned} \Delta_{i \rightarrow j}\left(t, x_{j}\right) = \max _{z_{i}}\left[f_{\text {out }}\left(z_{i}, y_{i}\right)-\frac{1}{2 \tau_{i \rightarrow j}^{p}(t)}\left(z_{i}-\widehat{p}_{i \rightarrow j}(t)-a_{i j} x_{j}\right)^{2},\right] +\mathrm{const} \end{aligned}\tag{4} Δi→j(t,xj)=zimax[fout (zi,yi)−2τi→jp(t)1(zi−p i→j(t)−aijxj)2,]+const(4)
其中
p
^
i
→
j
(
t
)
:
=
∑
r
≠
j
a
i
r
x
^
i
←
r
(
t
)
τ
i
→
j
p
(
t
)
:
=
∑
r
≠
j
∣
a
i
r
∣
2
τ
r
x
(
t
)
\begin{aligned} \widehat{p}_{i \rightarrow j}(t) &:=\sum_{r \neq j} a_{i r} \widehat{x}_{i \leftarrow r}(t) \quad\tau_{i \rightarrow j}^{p}(t) &:=\sum_{r \neq j}\left|a_{i r}\right|^{2} \tau_{r}^{x}(t) \end{aligned}
p
i→j(t):=r=j∑airx
i←r(t)τi→jp(t):=r=j∑∣air∣2τrx(t)
推导(4)是一个以 z i = a i j x j + ∑ r ≠ j a i r x r z_{i}=a_{i j} x_{j}+\sum_{r \neq j} a_{i r} x_{r} zi=aijxj+∑r=jairxr 为约束的优化问题,通过拉格朗日乘子法可以求得闭式解,推导出(4)。这里的详细步骤也不再展开。 注意到: 事实上通过观察 p ^ i → j \widehat{p}_{i \rightarrow j} p i→j 和 τ i → j \tau_{i \rightarrow j} τi→j的形式我们可以发现,前者对应于 z i z_i zi的均值, 而后者对应于 z i z_i zi的方差 (各自少了一项)。
我们继续向下推导。定义:
H
(
p
^
,
y
,
τ
p
)
:
=
max
z
[
f
out
(
z
,
y
)
−
1
2
τ
p
(
z
−
p
^
)
2
]
H\left(\widehat{p}, y, \tau^{p}\right):=\max _{z}\left[f_{\text {out }}(z, y)-\frac{1}{2 \tau^{p}}(z-\widehat{p})^{2}\right]
H(p
,y,τp):=zmax[fout (z,y)−2τp1(z−p
)2]
那么(4)可以进一步写为:
Δ
i
→
j
(
t
,
x
j
)
=
H
(
p
^
i
→
j
(
t
)
+
a
i
j
x
j
,
y
i
,
τ
i
→
j
p
(
t
)
)
+
const
(5)
\Delta_{i \rightarrow j}\left(t, x_{j}\right) =H\left(\widehat{p}_{i \rightarrow j}(t)+a_{i j} x_{j}, y_{i}, \tau_{i \rightarrow j}^{p}(t)\right)+\text { const }\tag{5}
Δi→j(t,xj)=H(p
i→j(t)+aijxj,yi,τi→jp(t))+ const (5)
这里必须提一嘴的是:
H
H
H的这个形式,你想起了什么吗?没错, 这就是高斯分布随机变量的概率密度函数的指数项——均值为
p
^
\hat{p}
p^, 方差为
τ
p
\tau_p
τp。与之对应, 也可以发现事实上消息
Δ
i
→
j
(
t
,
x
j
)
\Delta_{i \rightarrow j}\left(t, x_{j}\right)
Δi→j(t,xj) 就是找一个最大后验概率的
x
j
x_j
xj。
然而我们的初衷是为了简化计算, 而(5)中所需要用到的
p
^
\hat{p}
p^, 依然需要对多个标量进行求和。 但是我们注意到,
如果继续定义:
p
^
i
(
t
)
:
=
∑
j
a
i
j
x
^
i
←
j
(
t
)
\widehat{p}_{i}(t):=\sum_{j} a_{i j} \widehat{x}_{i \leftarrow j}(t)
p
i(t):=∑jaijx
i←j(t) 和
τ
i
p
(
t
)
=
∑
j
∣
a
i
j
∣
2
τ
j
x
(
t
)
\tau_{i}^{p}(t)=\sum_{j}\left|a_{i j}\right|^{2} \tau_{j}^{x}(t)
τip(t)=∑j∣aij∣2τjx(t), 有:
p
^
i
→
j
(
t
)
=
p
^
i
(
t
)
−
a
i
j
x
^
i
←
j
(
t
)
τ
i
→
j
p
(
t
)
=
τ
i
p
(
t
)
−
a
i
j
2
τ
j
x
(
t
)
\begin{aligned} \widehat{p}_{i \rightarrow j}(t) &=\widehat{p}_{i}(t)-a_{i j} \widehat{x}_{i \leftarrow j}(t) \\ \tau_{i \rightarrow j}^{p}(t) &=\tau_{i}^{p}(t)-a_{i j}^{2} \tau_{j}^{x}(t) \end{aligned}
p
i→j(t)τi→jp(t)=p
i(t)−aijx
i←j(t)=τip(t)−aij2τjx(t)
如果矩阵
A
A
A中的所有元素
a
i
j
a_{ij}
aij都服从同样的分布且已被归一化,我们接下来可以做以下近似: 忽略所有
O
(
a
i
j
2
)
O(a_{ij}^2)
O(aij2)项, 那么:
(5)可以进一步写为:
Δ
i
→
j
(
t
,
x
j
)
≈
H
(
p
^
i
(
t
)
+
a
i
j
(
x
j
−
x
^
j
)
,
y
i
,
τ
i
p
(
t
)
)
+
const
\Delta_{i \rightarrow j}\left(t, x_{j}\right) \approx H\left(\widehat{p}_{i}(t)+a_{i j}\left(x_{j}-\widehat{x}_{j}\right), y_{i}, \tau_{i}^{p}(t)\right)+\text { const }
Δi→j(t,xj)≈H(p
i(t)+aij(xj−x
j),yi,τip(t))+ const
这里是因为我们忽略了
O
(
a
i
j
2
)
O\left(a_{i j}^{2}\right)
O(aij2)级的项, 因此有了
τ
i
→
j
p
(
t
)
=
τ
i
p
(
t
)
\tau_{i \rightarrow j}^{p}(t)=\tau_{i}^{p}(t)
τi→jp(t)=τip(t)的效果。也可以注意到, (5)中的
x
^
i
←
j
\widehat{x}_{i \leftarrow j}
x
i←j也变为了
x
^
j
\widehat{x}_{j}
x
j, 同样也是用了这个近似。 这一近似在后续也将被持续用到。
许多人看到这里可能一头雾水了, GAMP在干嘛? 一顿操作, 到底想干什么? 是的, 其实他的核心就在于, 把涉及到 p ^ i → j ( t ) \widehat{p}_{i\rightarrow j}(t) p i→j(t) 和 τ ^ i → j ( t ) \widehat{\tau}_{i\rightarrow j}(t) τ i→j(t)的计算, 通通替换为用 p ^ i p ( t ) \hat{p}_{i}^{p}(t) p^ip(t) 和 τ i p ( t ) \tau_{i}^{p}(t) τip(t)替代。 因为后者的计算, 在后续可以看到, 能被高度简化。 如果看GAMP的算法框图的也可以发现, 尽管在推导的过程中, 由于是从原始的消息传递算法而来, 有许多 i → j i\rightarrow j i→j这样的项, 然而在最后的算法中, 是没有的。
继续下面的推导。 我们希望进一步的近似也是利用了泰勒展开, 因此我们需要定义一阶导和二阶导:
s
^
i
(
t
)
=
g
out
(
t
,
p
^
i
(
t
)
,
y
i
,
τ
i
p
(
t
)
)
τ
i
s
(
t
)
=
−
∂
∂
p
^
g
out
(
t
,
p
^
i
(
t
)
,
y
i
,
τ
i
p
(
t
)
)
(6)
\begin{aligned} \widehat{s}_{i}(t) &=g_{\text {out }}\left(t, \widehat{p}_{i}(t), y_{i}, \tau_{i}^{p}(t)\right) \\ \tau_{i}^{s}(t) &=-\frac{\partial}{\partial \widehat{p}} g_{\text {out }}\left(t, \widehat{p}_{i}(t), y_{i}, \tau_{i}^{p}(t)\right) \end{aligned}\tag{6}
s
i(t)τis(t)=gout (t,p
i(t),yi,τip(t))=−∂p
∂gout (t,p
i(t),yi,τip(t))(6)
其中,
g
out
(
p
^
,
y
,
τ
p
)
:
=
∂
∂
p
^
H
(
p
^
,
y
,
τ
p
)
g_{\text {out }}\left(\widehat{p}, y, \tau^{p}\right):=\frac{\partial}{\partial \widehat{p}} H\left(\widehat{p}, y, \tau^{p}\right)
gout (p
,y,τp):=∂p
∂H(p
,y,τp)
那么根据
H
H
H函数的定义, 这里
g
o
u
t
g_\mathrm{out}
gout可化简为下式:
g
out
(
p
^
,
y
,
τ
p
)
:
=
1
τ
p
(
z
^
0
−
p
^
)
g_{\text {out }}\left(\widehat{p}, y, \tau^{p}\right):=\frac{1}{\tau^{p}}\left(\widehat{z}^{0}-\widehat{p}\right)
gout (p
,y,τp):=τp1(z
0−p
)
其中
z
^
0
:
=
arg
max
z
F
out
(
z
,
p
^
,
y
,
τ
p
)
\widehat{z}^{0}:=\underset{z}{\arg \max } F_{\text {out }}\left(z, \widehat{p}, y, \tau^{p}\right)
z
0:=zargmaxFout (z,p
,y,τp) 和
F
out
(
z
,
p
^
,
y
,
τ
p
)
:
=
f
out
(
z
,
y
)
−
1
2
τ
p
(
z
−
p
^
)
2
F_{\text {out }}\left(z, \widehat{p}, y, \tau^{p}\right):=f_{\text {out }}(z, y)-\frac{1}{2 \tau^{p}}(z-\widehat{p})^{2}
Fout (z,p
,y,τp):=fout (z,y)−2τp1(z−p
)2。 进一步的,二阶导可以求得:
−
∂
∂
p
^
g
out
(
p
^
,
y
,
τ
p
)
=
−
f
out
′
′
(
z
^
0
,
y
)
1
−
τ
p
f
out
′
′
(
z
^
0
,
y
)
-\frac{\partial}{\partial \widehat{p}} g_{\text {out }}\left(\widehat{p}, y, \tau^{p}\right)=\frac{-f_{\text {out }}^{\prime \prime}\left(\widehat{z}^{0}, y\right)}{1-\tau^{p} f_{\text {out }}^{\prime \prime}\left(\widehat{z}^{0}, y\right)}
−∂p
∂gout (p
,y,τp)=1−τpfout ′′(z
0,y)−fout ′′(z
0,y)
这里很明确了, (6)中的
s
^
i
(
t
)
\hat{s}_i(t)
s^i(t) 和
τ
i
s
(
t
)
\tau_{i}^{s}(t)
τis(t) 分别代表了
H
H
H 函数 在
p
^
i
(
t
)
\widehat{p}_i(t)
p
i(t)的一阶导和二阶导, 那么继续泰勒展开:
Δ
i
→
j
(
t
,
x
j
)
≈
c
o
n
s
t
+
s
i
(
t
)
a
i
j
(
x
j
−
x
^
j
(
t
)
)
−
τ
i
s
(
t
)
2
a
i
j
2
(
x
j
−
x
^
j
(
t
)
)
2
=
const
+
[
s
i
(
t
)
a
i
j
+
a
i
j
2
τ
i
s
(
t
)
x
^
j
(
t
)
]
x
j
−
τ
i
s
(
t
)
2
a
i
j
2
x
j
2
(7)
\begin{aligned} \Delta_{i \rightarrow j}\left(t, x_{j}\right) &\approx \mathrm{const} +s_{i}(t) a_{i j}\left(x_{j}-\widehat{x}_{j}(t)\right)-\frac{\tau_{i}^{s}(t)}{2} a_{i j}^{2}\left(x_{j}-\widehat{x}_{j}(t)\right)^{2} \\ &= \operatorname{const} + \left[s_{i}(t) a_{i j}+a_{i j}^{2} \tau_{i}^{s}(t) \widehat{x}_{j}(t)\right] x_{j} -\frac{\tau_{i}^{s}(t)}{2} a_{i j}^{2} x_{j}^{2} \end{aligned}\tag{7}
Δi→j(t,xj)≈const+si(t)aij(xj−x
j(t))−2τis(t)aij2(xj−x
j(t))2=const+[si(t)aij+aij2τis(t)x
j(t)]xj−2τis(t)aij2xj2(7)
可以看到, 此时
Δ
i
→
j
(
t
,
x
j
)
\Delta_{i \rightarrow j}\left(t, x_{j}\right)
Δi→j(t,xj)中已经没有任何
i
→
j
i\rightarrow j
i→j这样的项了。 但是
p
^
\hat{p}
p^里其实还有, 不过这个我们后续再说。 接下来我们对另一个方向的消息传递进行分析:
此时, 把(7)代入到(2)中, (2)也可以被近似为:
Δ
i
←
j
(
t
+
1
,
x
j
)
≈
c
o
n
s
t
+
f
i
n
(
x
j
,
q
j
)
−
1
2
τ
i
←
j
r
(
t
)
(
r
^
i
←
j
(
t
)
−
x
j
)
2
\begin{aligned} \Delta_{i \leftarrow j}\left(t+1, x_{j}\right) \approx \mathrm{const} +f_{\mathrm{in}}\left(x_{j}, q_{j}\right)-\frac{1}{2 \tau_{i \leftarrow j}^{r}(t)}\left(\widehat{r}_{i \leftarrow j}(t)-x_{j}\right)^{2} \end{aligned}
Δi←j(t+1,xj)≈const+fin(xj,qj)−2τi←jr(t)1(r
i←j(t)−xj)2
其中,
1
τ
i
←
j
r
(
t
)
=
∑
ℓ
≠
i
a
ℓ
j
2
τ
ℓ
s
(
t
)
\frac{1}{\tau_{i \leftarrow j}^{r}(t)}=\sum_{\ell \neq i} a_{\ell j}^{2} \tau_{\ell}^{s}(t)
τi←jr(t)1=ℓ=i∑aℓj2τℓs(t)
和
r
^
i
←
j
(
t
)
=
τ
i
←
j
r
(
t
)
∑
ℓ
≠
i
[
s
ℓ
(
t
)
a
ℓ
j
+
a
ℓ
j
2
τ
ℓ
s
(
t
)
x
^
j
(
t
)
]
=
x
^
j
(
t
)
+
τ
i
←
j
r
(
t
)
∑
s
ℓ
(
t
)
a
ℓ
j
\begin{aligned} \widehat{r}_{i \leftarrow j}(t) &=\tau_{i \leftarrow j}^{r}(t) \sum_{\ell \neq i}\left[s_{\ell}(t) a_{\ell j}+a_{\ell j}^{2} \tau_{\ell}^{s}(t) \widehat{x}_{j}(t)\right] \\ &=\widehat{x}_{j}(t)+\tau_{i \leftarrow j}^{r}(t) \sum s_{\ell}(t) a_{\ell j} \end{aligned}
r
i←j(t)=τi←jr(t)ℓ=i∑[sℓ(t)aℓj+aℓj2τℓs(t)x
j(t)]=x
j(t)+τi←jr(t)∑sℓ(t)aℓj
注意, 这里算法又颇具技巧性地,加入了常数项, 从而把右边的形式再一次写成了高斯分布的概率密度函数的次方项!这无疑是故意而为之的。
这时候,如果我们定义:
g
in
(
r
^
,
q
,
τ
r
)
:
=
arg
max
x
f
in
(
x
,
q
)
−
1
2
τ
r
(
r
^
−
x
)
2
g_{\text {in }}\left(\widehat{r}, q, \tau^{r}\right):=\underset{x}{\arg \max }f_{\text {in }}(x, q)-\frac{1}{2 \tau^{r}}(\widehat{r}-x)^{2}
gin (r
,q,τr):=xargmaxfin (x,q)−2τr1(r
−x)2
那么有:
x
^
i
←
j
(
t
+
1
)
≈
g
in
(
r
^
i
←
j
(
t
)
,
q
j
,
τ
i
←
j
r
(
t
)
)
(8)
\widehat{x}_{i \leftarrow j}(t+1) \approx g_{\text {in }}\left(\widehat{r}_{i \leftarrow j}(t), q_{j}, \tau_{i \leftarrow j}^{r}(t)\right)\tag{8}
x
i←j(t+1)≈gin (r
i←j(t),qj,τi←jr(t))(8)
**注意!这里我们第一次出现了
t
+
1
t+1
t+1次迭代中的项!我们已经成功地完成了一次消息传递但, 还需要具体的简化, 即去除所有
i
→
j
i\rightarrow j
i→j相关项。
再定义:
τ
j
r
(
t
)
=
[
∑
i
∣
a
i
j
∣
2
τ
i
s
(
t
)
]
−
1
r
^
j
(
t
)
=
x
^
j
(
t
)
+
τ
j
r
(
t
)
∑
i
a
i
j
s
^
i
(
t
)
\begin{aligned} &\tau_{j}^{r}(t)=\left[\sum_{i}\left|a_{i j}\right|^{2} \tau_{i}^{s}(t)\right]^{-1} \\ &\widehat{r}_{j}(t)=\widehat{x}_{j}(t)+\tau_{j}^{r}(t) \sum_{i} a_{i j} \widehat{s}_{i}(t) \end{aligned}
τjr(t)=[i∑∣aij∣2τis(t)]−1r
j(t)=x
j(t)+τjr(t)i∑aijs
i(t)
又可以有下列近似关系:
τ
i
←
j
r
(
t
)
≈
τ
j
r
(
t
)
r
^
i
←
j
(
t
)
≈
x
^
j
(
t
)
+
τ
j
r
(
t
)
∑
ℓ
≠
i
s
ℓ
(
t
)
a
ℓ
j
=
r
^
j
(
t
)
−
τ
j
r
(
t
)
a
i
j
s
i
(
t
)
\begin{aligned} \tau_{i \leftarrow j}^{r}(t) & \approx \tau_{j}^{r}(t) \\ \widehat{r}_{i \leftarrow j}(t) & \approx \widehat{x}_{j}(t)+\tau_{j}^{r}(t) \sum_{\ell \neq i} s_{\ell}(t) a_{\ell j} \\ &=\widehat{r}_{j}(t)-\tau_{j}^{r}(t) a_{i j} s_{i}(t) \end{aligned}
τi←jr(t)r
i←j(t)≈τjr(t)≈x
j(t)+τjr(t)ℓ=i∑sℓ(t)aℓj=r
j(t)−τjr(t)aijsi(t)
这里同样是忽略了
O
(
a
i
j
2
)
O\left(a_{i j}^{2}\right)
O(aij2) 级的项。 利用这一近似, (8)可以近似为:
x
^
i
←
j
(
t
+
1
)
≈
(
a
)
g
i
n
(
r
^
j
(
t
)
−
a
i
j
s
i
(
t
)
τ
j
r
(
t
)
,
q
j
,
τ
j
T
(
t
)
)
≈
(
b
)
x
^
j
(
t
+
1
)
−
a
i
j
s
j
(
t
)
D
j
(
t
+
1
)
(9)
\begin{aligned} &\widehat{x}_{i \leftarrow j}(t+1) \\ &\quad \stackrel{(a)}{\approx} g_{i n}\left(\widehat{r}_{j}(t)-a_{i j} s_{i}(t) \tau_{j}^{r}(t), q_{j}, \tau_{j}^{T}(t)\right) \\ &\stackrel{(b)}{\approx} \widehat{x}_{j}(t+1)-a_{i j} s_{j}(t) D_{j}(t+1) \end{aligned}\tag{9}
x
i←j(t+1)≈(a)gin(r
j(t)−aijsi(t)τjr(t),qj,τjT(t))≈(b)x
j(t+1)−aijsj(t)Dj(t+1)(9)
这里(a)就是直接代入了近似关系, 而(b)则是对进行了泰勒一次展开:
x
^
j
(
t
+
1
)
:
=
g
in
(
r
^
j
(
t
)
,
q
j
,
τ
j
r
(
t
)
)
D
j
(
t
+
1
)
:
=
τ
j
r
(
t
)
∂
∂
r
^
g
in
(
r
^
j
(
t
)
,
q
j
,
τ
j
r
(
t
)
)
\begin{aligned} \widehat{x}_{j}(t+1) &:=g_{\text {in }}\left(\widehat{r}_{j}(t), q_{j}, \tau_{j}^{r}(t)\right) \\ D_{j}(t+1) &:=\tau_{j}^{r}(t) \frac{\partial}{\partial \widehat{r}} g_{\text {in }}\left(\widehat{r}_{j}(t), q_{j}, \tau_{j}^{r}(t)\right) \end{aligned}
x
j(t+1)Dj(t+1):=gin (r
j(t),qj,τjr(t)):=τjr(t)∂r
∂gin (r
j(t),qj,τjr(t))
注意到又有:
D
j
(
t
+
1
)
≈
(
a
)
τ
j
r
(
t
)
∂
∂
r
^
(
Γ
f
i
n
(
⋅
,
q
j
)
)
(
r
^
j
(
t
)
,
τ
j
r
(
t
)
)
=
(
b
)
τ
j
T
(
t
)
1
−
τ
j
r
(
t
)
f
i
n
′
′
(
x
^
j
(
t
+
1
)
,
q
j
)
≈
(
c
)
[
−
∂
2
∂
x
j
2
Δ
i
←
j
(
t
+
1
,
x
^
j
(
t
+
1
)
)
]
−
1
≈
(
d
)
τ
j
x
(
t
+
1
)
\begin{aligned} &D_{j}(t+1) \stackrel{(a)}{\approx} \tau_{j}^{r}(t) \frac{\partial}{\partial \widehat{r}}\left(\Gamma f_{\mathrm{in}}\left(\cdot, q_{j}\right)\right)\left(\widehat{r}_{j}(t), \tau_{j}^{r}(t)\right) \\ &\stackrel{(b)}{=} \frac{\tau_{j}^{T}(t)}{1-\tau_{j}^{r}(t) f_{i n}^{\prime \prime}\left(\widehat{x}_{j}(t+1), q_{j}\right)} \\ &\stackrel{(c)}{\approx}\left[-\frac{\partial^{2}}{\partial x_{j}^{2}} \Delta_{i \leftarrow j}\left(t+1, \widehat{x}_{j}(t+1)\right)\right]^{-1} \\ &\stackrel{(d)}{\approx} \tau_{j}^{x}(t+1) \end{aligned}
Dj(t+1)≈(a)τjr(t)∂r
∂(Γfin(⋅,qj))(r
j(t),τjr(t))=(b)1−τjr(t)fin′′(x
j(t+1),qj)τjT(t)≈(c)[−∂xj2∂2Δi←j(t+1,x
j(t+1))]−1≈(d)τjx(t+1)
这里具体的推导就不展开了。 注意到, 根据(9)我们其实已经得到了这一次迭代的结果
x
^
j
(
t
+
1
)
\widehat{x}_{j}(t+1)
x
j(t+1)。并且, 将上式代入(9)和
p
^
i
(
t
)
\widehat{p}_{i}(t)
p
i(t)的定义中,我们有:
p
^
i
(
t
)
=
∑
j
a
i
j
x
^
j
(
t
)
−
τ
i
p
(
t
)
s
^
i
(
t
−
1
)
\widehat{p}_{i}(t)=\sum_{j} a_{i j} \widehat{x}_{j}(t)-\tau_{i}^{p}(t) \widehat{s}_{i}(t-1)
p
i(t)=j∑aijx
j(t)−τip(t)s
i(t−1)
也就是说, 整个算法运行中, 不再涉及任何 i → j i\rightarrow j i→j项的操作了!
至此,推导结束。
总结以下几个点:
- 整个GAMP推导的核心任务就是尽可能地把所有操作变为 关于 x j x_j xj, p i p_i pi这样的计算, 而不涉及 x i ← j x_{i\leftarrow j} xi←j, p i ← j p_{i\leftarrow j} pi←j, 从而大幅地降低计算复杂度。
- 使用的方法就是不断假设整个矩阵 A \mathbf{A} A的元素服从同分布的高斯,从而可以进行不断的泰勒展开近似。
最终的算法流程可以被简化为:
我们可以将算法流程整理一下:
- 初始化
- 计算 τ i p ( t ) \tau_i^p(t) τip(t) 和 p ^ i ( t ) \hat{p}_i(t) p^i(t), s ^ i \hat{s}_i s^i 和 τ i s ( t ) \tau_i^s(t) τis(t), 从而计算 Δ i → j ( t , x j ) \Delta_{i \rightarrow j}\left(t, x_{j}\right) Δi→j(t,xj), 在GAMP算法里最后体现在对 r ^ j \hat{r}_j r^j的计算中。
- 计算 τ j r \tau_j^r τjr 和 r ^ j \hat{r}_j r^j, 用于最后对 x ^ j \hat{x}_j x^j的计算。