AMP的推导和理解(Part-1)_amp算法-程序员宅基地

技术标签: 算法  矩阵  消息传递  概率论  


Approximate Message Passing, AMP

前言

这篇博客是对AMP推导和理解的开端,主要介绍了在似然函数为Delta函数的硬约束问题下AMP的推导过程,笔者才疏学浅,如果在博文的表述过程中有不当之处,甚至歪曲原文本身的观点,还希望读者们包涵。因为上次在跟导师讨论的过程中发现,我其实在对论文的理解上有些局限于具体的推导过程,而没有比较好地把握住全局的思路,因此在写这篇博客时有一些改变,完成全面推导的基础上,在消息传递的步骤和文章小结部分做了一些由浅入深的讨论与总结。至少这让我感觉到,如果别人问起AMP的来源,虽然不一定完全正确,但可以略说一二。

问题模型

硬约束下的压缩感知信号恢复(BP)

所谓硬约束,就是指观测向量直接由感知矩阵和信号得到,其似然函数为Delta函数,具体考虑的信号模型为基追踪(Basis Pursuit, BP)问题,该问题的数学表述如下

{ min ⁡ ∥ s ∥ 1 subject to  y = A s (1) \begin{cases} \min {\Vert \pmb s \Vert}_1 \\ \text{subject to } \pmb y=\pmb A \pmb s \\ \end{cases} \tag{1} { minsss1subject to yyy=AAAsss(1)

其中, s ∈ R N \pmb s \in \mathbb R^N sssRN是要恢复的信号, A ∈ R n × N \pmb A \in \mathbb R^{n \times N} AAARn×N是感知(测量)矩阵, y ∈ R n \pmb y \in \mathbb R^n yyyRn是观测向量。

软约束下的压缩感知信号恢复(LASSO)

所谓软约束,就是指得到的观测向量被噪声破坏过,其似然函数服从某一特定分布,具体考虑的信号模型为基追踪去噪(Basis Pursuit De-Noising Problem, BPDN or LASSO)问题,该问题的数学表述如下

min ⁡   λ ∥ s ∥ 1 + 1 2 ∥ y − A s ∥ 2 2 (2) \min \ \lambda {\Vert \pmb s \Vert}_1 + \frac{1}{2}{\Vert \pmb y - \pmb A\pmb s \Vert}^2_2 \tag{2} min λsss1+21yyyAAAsss22(2)

BPDN问题和BP问题是类似的,区别在于似然函数不同,两者共同的目标都是从观测向量 y \pmb y yyy和感知矩阵 A \pmb A AAA中恢复出初始的稀疏信号 s \pmb s sss

参数描述

(1)感知矩阵 A \pmb A AAA的列是归一化的,即, ∥ a i ∥ 2 = 1 {\Vert \pmb a_i\Vert}_2=1 aaai2=1。这个要求是关键的,在多用户接入场景中,大尺度衰落和功率分配可能会破坏该约束。在下面的叙述过程中,为了简化推导,指定 A a i ∈ { 1 n , − 1 n } A_{ai} \in \{ \frac{1}{\sqrt n},-\frac{1}{\sqrt n} \} Aai{ n 1,n 1}(论文是这么描述的)。
(2)欠采样的量度(measure of indeterminacy): δ = n N \delta=\frac{n}{N} δ=Nn
(3)大系统极限(large system limit): N → ∞  while  δ  fixed N \rightarrow \infty \text{ while } \delta \text{ fixed} N while δ fixed

推导AMP的步骤

在这里插入图片描述

BP问题下AMP的推导(AMP.0)

(1)因子图与消息传递

如果没有特殊说明,我们先不考虑 s \pmb s sss的真实先验分布,根据 s \pmb s sss的稀疏性,引入含指数项的拉普拉斯分布,信号 s = [ s 1 , s 2 , ... , s N ] T \pmb s=[s_1, s_2, \text{...},s_N]^T sss=[s1,s2,...,sN]T的联合概率分布函数为

μ ( d s ) = 1 Z ∏ i = 1 N e x p ( − β ∣ s i ∣ ) ∏ a = 1 n δ { y a = ( A s ) a } (3) \mu(\text{d} \pmb s)=\frac{1}{Z} \prod_{i=1}^N exp(-\beta|s_i|) \prod_{a=1}^n \delta_{\{y_a=(As)_a\}} \tag{3} μ(dsss)=Z1i=1Nexp(βsi)a=1nδ{ ya=(As)a}(3)

这里的 δ { y a = ( A s ) a } \delta_{\{y_a=(As)_a\}} δ{ ya=(As)a}指的是在超平面 y a = ( A s ) a y_a=(As)_a ya=(As)a上的Dirac分布。容易看出,当 β → ∞ \beta \rightarrow \infty β时,该分布的峰值与式(1)的解应是对应的。
考虑因子图 G = ( V , F , E ) G=(V,F,E) G=(V,F,E),变量节点 V = [ N ] = { 1 , 2 , ... , N } V=[N]=\{ 1,2,\text{...},N\} V=[N]={ 1,2,...,N},因子节点 F = [ n ] = { 1 , 2 , ... , n } F=[n]=\{ 1,2,\text{...},n\} F=[n]={ 1,2,...,n},边 E = [ N ] × [ n ] = { ( i , a ) : i ∈ [ N ] , a ∈ [ n ] } E=[N] \times [n]=\{(i,a):i \in[N], a \in [n] \} E=[N]×[n]={ (i,a):i[N],a[n]}
在这里插入图片描述

那么依据和积算法,可以写出

ν i → a t + 1 ( s i ) ≅ e − β ∣ s i ∣ ∏ b ≠ a ν ^ b → i t ( s i ) ν ^ a → i t ( s i ) ≅ ∫ ∏ j ≠ i ν j → a t ( s i ) δ y a − ( A s ) a (4) \nu^{t+1}_{i \rightarrow a}(s_i) \cong e^{-\beta |s_i|} \prod_{b \neq a} \hat \nu^t_{b\rightarrow i}(s_i) \\ \tag{4} \hat \nu^t_{a\rightarrow i}(s_i) \cong \int \prod_{j \neq i} \nu^t_{j \rightarrow a}(s_i) \delta_{y_a-(As)_a} νiat+1(si)eβsib=aν^bit(si)ν^ait(si)j=iνjat(si)δya(As)a(4)

在进入下一部分之前,先对几个重要参数进行说明,虽然之后也会提及,但是相信先强调一下概念可以方便读者思考。

x j → a t = E ν j → a t ( s j ) [ s j ] τ j → a t β = Var ν j → a t ( s j ) [ s j ] z a → j t = E ν ^ a → j t ( z ) [ Z ] τ ^ a → j t = Var ν ^ a → j t ( z ) [ Z ] x^t_{j \rightarrow a}=\mathbb E_{\nu^{t}_{j \rightarrow a}(s_j)} [s_j] \\ \frac{\tau^{t}_{j \rightarrow a}}{\beta}=\text{Var}_{\nu^{t}_{j \rightarrow a}(s_j)}[s_j] \\ z^t_{a \rightarrow j}=\mathbb E_{\hat \nu^{t}_{a \rightarrow j}(z)}[Z] \\ {\hat \tau^{t}_{a \rightarrow j}}=\text{Var}_{\hat \nu^{t}_{a \rightarrow j}(z)}[Z] xjat=Eνjat(sj)[sj]βτjat=Varνjat(sj)[sj]zajt=Eν^ajt(z)[Z]τ^ajt=Varν^ajt(z)[Z]

(2)大系统极限下的近似

我们希望在大系统极限下, N → ∞ N \rightarrow \infty N,消息分布的形式可以被简化。事实上,当 n , N n,N n,N充分大,消息 ν ^ a → i t ( s i ) \hat \nu^{t}_{a \rightarrow i}(s_i) ν^ait(si)可以被近似为高斯分布,另一方面, ν i → a t ( s i ) \nu^t_{i \rightarrow a}(s_i) νiat(si)又可以被近似为拉普拉斯分布与一系列高斯分布的积。下面将对此做具体描述。

定义1:Kolmogorov距离
给定两个分布 μ 1 \mu_1 μ1 μ 2 \mu_2 μ2,它们的Kolmogorov距离为
∥ μ 1 − μ 2 ∥ K = sup ⁡ a ∈ R ∣ ∫ − ∞ a μ 1 ( d x ) − ∫ − ∞ a μ 2 ( d x ) ∣ (5) {\Vert \mu_1 - \mu_2 \Vert}_K = \sup_{a \in \mathbb R} |\int_{-\infty}^a \mu_1(\text{d}x)-\int_{-\infty}^a \mu_2(\text{d}x)| \tag{5} μ1μ2K=aRsupaμ1(dx)aμ2(dx)(5)

引理1:令 E ν j → a t ( s i ) [ s j ] = x j → a t \mathbb E_{\nu^{t}_{j \rightarrow a}(s_i)} [s_j]=x^t_{j \rightarrow a} Eνjat(si)[sj]=xjat Var ν j → a t ( s i ) [ s j ] = τ j → a t β \text{Var}_{\nu^{t}_{j \rightarrow a}(s_i)}[s_j]=\frac{\tau^{t}_{j \rightarrow a}}{\beta} Varνjat(si)[sj]=βτjat,假设 ∫ ∣ s j ∣ 3 d ν j → a t ( s j ) ≤ C t ,   ∀ j , a \int|s_j|^3\text{d}\nu^{t}_{j \rightarrow a}(s_j) \leq C_t, \ \forall j,a sj3dνjat(sj)Ct, j,a,那么存在 C t ′ C^{'}_t Ct使得
∥ ν ^ a → i t ( s i ) − ϕ ^ a → i t ( s i ) ∥ ≤ C t ′ N ( τ ^ a → i t ) 3 / 2 ϕ ^ a → i t ( d s i ) ≡ β A a i 2 2 π τ ^ a → i t e x p { β 2 τ ^ a → i t ( A a i s i − z a → i t ) 2 } d s i (6) \\ {\Vert {\hat \nu^t_{a\rightarrow i}(s_i) - \hat \phi^t_{a\rightarrow i}(s_i)} \Vert} \leq \frac{C^{'}_t}{\sqrt{N}(\hat \tau^t_{a \rightarrow i})^{3/2}} \\ \hat \phi^t_{a\rightarrow i}(\text{d} s_i) \equiv \sqrt {\frac{\beta A^2_{ai}}{2 \pi \hat \tau^t_{a \rightarrow i}}}exp{\{ {\frac{\beta}{2\hat \tau^t_{a \rightarrow i}}(A_{ai}s_i-z^t_{a \rightarrow i})^2} \}} \text{d}s_i \tag{6} ν^ait(si)ϕ^ait(si)N (τ^ait)3/2Ctϕ^ait(dsi)2πτ^aitβAai2 exp{ 2τ^aitβ(Aaisizait)2}dsi(6)

其中的两个分布参数定义如下

z a → i t ≡ y a − ∑ j ≠ i A a j x j → a t ,       τ ^ a → i t ≡ ∑ j ≠ i A a j 2 τ j → a t (7) z^t_{a \rightarrow i} \equiv y_a - \sum_{j\neq i} A_{aj} x^t_{j \rightarrow a}, \ \ \ \ \ \hat \tau^t_{a \rightarrow i} \equiv \sum_{j \neq i}A^2_{aj} \tau^t_{j \rightarrow a} \tag{7} zaityaj=iAajxjat,     τ^aitj=iAaj2τjat(7)

证明:对任意的Borel集合 S S S
ν ^ a → i t + 1 ( S ) = P { y a − ∑ j ≠ i A a j s j ∈ A a i S } \hat \nu^{t+1}_{a\rightarrow i}(S)=\mathbb P\{ {y_a- \sum_{j \neq i} A_{aj}s_j \in A_{ai}S} \} ν^ait+1(S)=P{ yaj=iAajsjAaiS}
其中 A a i S = { A a i x :   x ∈ S } A_{ai}S=\{ A_{ai}x:\ x \in S \} AaiS={ Aaix: xS},上式的概率是由随机向量 [ s 1 , s 2 , ... , s i − 1 , s i + 1 , ... , s N ] T [s_1, s_2, \text{...},s_{i-1},s_{i+1},\text{...},s_N]^T [s1,s2,...,si1,si+1,...,sN]T确定(因为只有 s j , ∀ j s_j,\forall j sj,j是随机变量),而该随机向量的分布由下述边的消息确定(由式(4)可以看出)

ν 1 → a t ( s 1 ) , ... , ν ( i − 1 ) → a t ( s i − 1 ) , ν ( i + 1 ) → a t ( s i + 1 ) , ... , ν N → a t ( s N ) \nu^t_{1 \rightarrow a}(s_1),\text{...},\nu^t_{(i-1) \rightarrow a}(s_{i-1}),\nu^t_{(i+1) \rightarrow a}(s_{i+1}),\text{...},\nu^t_{N \rightarrow a}(s_{N}) ν1at(s1),...,ν(i1)at(si1),ν(i+1)at(si+1),...,νNat(sN)

考虑这样一个随机变量 Z = y a − ∑ j ≠ i A a j s j Z=y_a - \sum_{j \neq i} A_{aj}s_j Z=yaj=iAajsj,根据中心极限定理,随机变量 Z Z Z服从高斯分布,其均值和方差分别为:

E [ Z ] = y a − ∑ j ≠ i A a j x j → a t Var [ Z ] = 1 β ∑ j ≠ i A a j 2 τ j → a t (8) \mathbb E[Z]=y_a - \sum_{j \neq i} A_{aj}x^t_{j \rightarrow a}\\ \tag{8} \\ \text{Var}[Z]=\frac{1}{\beta} \sum_{j \neq i} A^2_{aj} \tau^t_{j \rightarrow a} E[Z]=yaj=iAajxjatVar[Z]=β1j=iAaj2τjat(8)

注意随机变量 Z Z Z构成的的集合满足: { z } ≡ { A a i s i } \{z\} \equiv \{ A_{ai} s_i \} { z}{ Aaisi},所以 A a i s i A_{ai} s_i Aaisi的分布也是高斯的,但是 A a i A_{ai} Aai是给定的,所以就得到了式(6)的关于 s i s_i si的高斯分布表达式。

可以看出引理1对从因子节点 { a } \{a\} { a}到变量节点 { i } \{i\} { i}的消息依据中心极限定理做了高斯近似,下一步考虑从变量节点 { i } \{i\} { i}到因子节点 { a } \{a\} { a}的消息,在此之前,先引入一簇函数

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

若随机变量 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 ) (10) 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{10} Fβ(x;b)Efβ(  ;x,b)(Z),   Gβ(x;b)Varfβ(  ;x,b)(Z)(10)

式(7)和式(8)是一样的,只是少了 β \beta β项。论文中做了假设认为方差项 τ ^ a → i t \hat \tau^t_{a \rightarrow i} τ^ait独立于因子图的边 ( i , a ) (i,a) (i,a),其实这里看得不是很清楚,顺便一提,有其它的论文推导认为方差项对边的依赖是借助大数定律和中心极限定理取消的(在大系统极限下)。

引理2:假设在第t次迭代,从因子节点 { a } \{a\} { a}到变量节点 { i } \{i\} { i}的消息 ν ^ a → i t = ϕ ^ a → i t \hat \nu^t_{a\rightarrow i}=\hat \phi^t_{a\rightarrow i} ν^ait=ϕ^ait ϕ ^ a → i t \hat \phi^t_{a\rightarrow i} ϕ^ait在引理1中定义过),参数 z a → i t z^t_{a \rightarrow i} zait的定义与引理1保持一致,根据假设方差项 τ ^ a → i t \hat \tau^t_{a \rightarrow i} τ^ait独立于因子图的边 ( i , a ) (i,a) (i,a),所以指定 τ ^ a → i t = τ ^ t \hat \tau^t_{a \rightarrow i}=\hat \tau^t τ^ait=τ^t,那么对 t + 1 t+1 t+1次迭代,消息从变量节点 { i } \{i\} { i}传递到因子节点 { a } \{a\} { a}表示为
ν i → a t + 1 ( s i ) = ϕ i → a t + 1 ( s i ) ⋅ ( 1 + O ( s i 2 n ) ) ϕ i → a t + 1 ( s i ) ≡ f β ( s i ; ∑ b ≠ a A b i z b → i t , τ ^ t ) (11) \nu^{t+1}_{i \rightarrow a}(s_i)=\phi^{t+1}_{i \rightarrow a}(s_i) \cdot (1+\mathcal O(\frac {s^2_i}{n})) \\ \tag{11} \\ \phi^{t+1}_{i \rightarrow a}(s_i) \equiv f_{\beta}(s_i;\sum_{b \neq a}A_{bi}z^t_{b \rightarrow i},\hat \tau^t) νiat+1(si)=ϕiat+1(si)(1+O(nsi2))ϕiat+1(si)fβ(si;b=aAbizbit,τ^t)(11)

对于消息分布 ν i → a t + 1 ( s i ) \nu^{t+1}_{i \rightarrow a}(s_i) νiat+1(si),依据式(10),指定其均值 x i → a t + 1 = E ν i → a t + 1 ( s i ) [ s i ] x^{t+1}_{i \rightarrow a}=\mathbb E_{\nu^{t+1}_{i \rightarrow a}(s_i)}[s_i] xiat+1=Eνiat+1(si)[si],方差 τ i → a t + 1 = Var i → a [ s i ] \tau^{t+1}_{i \rightarrow a}=\text{Var}_{i \rightarrow a}[s_i] τiat+1=Varia[si],则
x i → a t + 1 = F β ( ∑ b ≠ a A b i z b → i t ; τ ^ t ) τ i → a t + 1 = β ⋅ G β ( ∑ b ≠ a A b i z b → i t ; τ ^ t ) (12) x^{t+1}_{i \rightarrow a}=F_{\beta}(\sum_{b \neq a}A_{bi}z^t_{b \rightarrow i};\hat \tau^t) \\ \tag{12} \\ \tau^{t+1}_{i \rightarrow a}=\beta \cdot G_{\beta}(\sum_{b \neq a}A_{bi}z^t_{b \rightarrow i};\hat \tau^t) xiat+1=Fβ(b=aAbizbit;τ^t)τiat+1=βGβ(b=aAbizbit;τ^t)(12)

证明:式(11)是依据式(4)中给定的和积算法直接写出来的,即

ν i → a t + 1 ( s i ) ≅ e − β ∣ s i ∣ ∏ b ≠ a ν ^ b → i t ( s i ) = e x p { − β ∣ s i ∣ − ∑ b ≠ a β 2 τ ^ t ( A b i s i − z b → i t ) 2 } ≅ e x p { − β ∣ s i ∣ − β 2 τ ^ t ( n − 1 n s i 2 − 2 s i ∑ b ≠ a A b i z b → i t ) } (13) \begin{aligned} \nu^{t+1}_{i \rightarrow a}(s_i) &\cong e^{-\beta |s_i|} \prod_{b \neq a} \hat \nu^t_{b\rightarrow i}(s_i) \\ &= exp\Big \{ -\beta |s_i| - \sum_{b \neq a} \frac{\beta}{2 \hat \tau^t}(A_{bi}s_i-z^t_{b \rightarrow i})^2 \Big \} \\ & \cong exp \Big \{-\beta |s_i| - \frac{\beta}{2 \hat \tau^t} (\frac{n-1}{n}s^2_i - 2s_i\sum_{b \neq a}A_{bi}z^t_{b \rightarrow i}) \Big \} \end{aligned} \tag{13} νiat+1(si)eβsib=aν^bit(si)=exp{ βsib=a2τ^tβ(Abisizbit)2}exp{ βsi2τ^tβ(nn1si22sib=aAbizbit)}(13)

n → ∞ n \rightarrow \infty n时,结合式(13)和式(9,10),可以直接推出式(12)。注意到,式(13)能推出来的前提是方差项 τ ^ a → i t \hat \tau^t_{a \rightarrow i} τ^ait不依赖于因子图的边 ( i , a ) (i,a) (i,a),所有边的方差项都是统一的。

下面对消息传递的步骤做个总结:
步骤1:如下图所示,变量节点 { i } \{i\} { i}到因子节点 { a } \{a\} { a}的消息 ν i → a t ( s i ) \nu^{t}_{i \rightarrow a}(s_i) νiat(si),该消息分布的均值为 E ν j → a t ( s i ) [ s j ] = x j → a t \mathbb E_{\nu^{t}_{j \rightarrow a}(s_i)} [s_j]=x^t_{j \rightarrow a} Eνjat(si)[sj]=xjat,方差为 Var ν j → a t ( s i ) [ s j ] = τ j → a t β \text{Var}_{\nu^{t}_{j \rightarrow a}(s_i)}[s_j]=\frac{\tau^{t}_{j \rightarrow a}}{\beta} Varνjat(si)[sj]=βτjat,我们可以理解此时消息 ν i → a t ( s i ) \nu^{t}_{i \rightarrow a}(s_i) νiat(si)将其1,2阶矩送至因子节点。
在这里插入图片描述

步骤2:如下图所示,从因子节点 { a } \{a\} { a}到变量节点 { i } \{i\} { i}的消息 ν ^ a → i t + 1 ( s i ) \hat \nu^{t+1}_{a\rightarrow i}(s_i) ν^ait+1(si),借助中心极限定理被近似为高斯分布,具体来讲,就是近似为式(6) ϕ ^ a → i t + 1 ( s i ) \hat \phi^{t+1}_{a\rightarrow i}(s_i) ϕ^ait+1(si)的形式,被其1,2阶矩唯一确定。要注意,中心极限定理是作用在随机变量 Z = y a − ∑ j ≠ i A a j s j Z=y_a - \sum_{j \neq i} A_{aj}s_j Z=yaj=iAajsj上的,其中的随机变量 s 1 , s 2 , ... , s i − 1 , s i + 1 , ... , s N s_1, s_2, \text{...},s_{i-1},s_{i+1},\text{...},s_N s1,s2,...,si1,si+1,...,sN服从的分布分别为 ν 1 → a t ( s 1 ) , ... , ν ( i − 1 ) → a t ( s i − 1 ) , ν ( i + 1 ) → a t ( s i + 1 ) , ... , ν N → a t ( s N ) \nu^t_{1 \rightarrow a}(s_1),\text{...},\nu^t_{(i-1) \rightarrow a}(s_{i-1}),\nu^t_{(i+1) \rightarrow a}(s_{i+1}),\text{...},\nu^t_{N \rightarrow a}(s_{N}) ν1at(s1),...,ν(i1)at(si1),ν(i+1)at(si+1),...,νNat(sN),根据步骤1,当前因子节点已经收到了这些分布的1,2阶矩,也就可以据此直接计算出近似后高斯分布的均值和方差(根据式(8))。本质上来讲,根据中心极限定理近似的分布显式地应该写为 ϕ ^ a → i t + 1 ( Z ) ≡ ϕ ^ a → i t + 1 ( A a i s i ) \hat \phi^{t+1}_{a\rightarrow i}(Z)\equiv \hat \phi^{t+1}_{a\rightarrow i}(A_{ai}s_i) ϕ^ait+1(Z)ϕ^ait+1(Aaisi),但因为 A a i A_{ai} Aai是给定的,所以可以写为式(6) ϕ ^ a → i t + 1 ( s i ) \hat \phi^{t+1}_{a\rightarrow i}(s_i) ϕ^ait+1(si)的形式。
在这里插入图片描述
步骤3:回过头来看“下一次步骤1”(注意迭代次数从 t t t变为了 t + 1 t+1 t+1),变量节点 { i } \{i\} { i}到因子节点 { a } \{a\} { a}的消息 ν i → a t + 1 ( s i ) \nu^{t+1}_{i \rightarrow a}(s_i) νiat+1(si),根据和积算法,即式(4)中的第一个表达式,可以把 ν i → a t + 1 ( s i ) \nu^{t+1}_{i \rightarrow a}(s_i) νiat+1(si)写为是拉普拉斯分布与一些高斯分布的乘积(那些步骤2输出对应的所有消息的积),该表达式在形式上与式(9)给出的函数是一样的,在此基础上,根据式(10)或者式(12)又可以算出来消息分布 ν i → a t + 1 ( s i ) \nu^{t+1}_{i \rightarrow a}(s_i) νiat+1(si)的均值和方差,依次循环迭代即可。

将上面的步骤用数学语言描述,

z a → i t ≡ y a − ∑ j ≠ i A a j x j → a t x i → a t + 1 = F β ( ∑ b ≠ a A b i z b → i t ; τ ^ t ) τ ^ t + 1 = β n ∑ i = 1 N G β ( ∑ b ≠ a A b i z b → i t ; τ ^ t ) (14) z^t_{a \rightarrow i} \equiv y_a - \sum_{j\neq i} A_{aj} x^t_{j \rightarrow a} \\ x^{t+1}_{i \rightarrow a}=F_{\beta}(\sum_{b \neq a}A_{bi}z^t_{b \rightarrow i};\hat \tau^t) \tag{14} \\ \hat \tau^{t+1}=\frac{\beta}{n} \sum_{i=1}^N G_{\beta}(\sum_{b \neq a}A_{bi}z^t_{b \rightarrow i};\hat \tau^t) zaityaj=iAajxjatxiat+1=Fβ(b=aAbizbit;τ^t)τ^t+1=nβi=1NGβ(b=aAbizbit;τ^t)(14)

式(14)中的 z a → i t z^t_{a \rightarrow i} zait是送到因子节点的均值,根据式(7)以及 A \pmb A AAA的假设可以认为步骤1和步骤2的方差项是统一的,这就是为什么式(14)中省略了送到因子节点的消息的方差。

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

∀ β \forall \beta β,式(14)已经是简化了的信念传播表达式,但是考虑当 β → ∞ \beta \rightarrow \infty β时,式(3)中给出的信号 s = [ s 1 , s 2 , ... , s N ] T \pmb s=[s_1, s_2, \text{...},s_N]^T sss=[s1,s2,...,sN]T的联合概率分布函数对应的的峰值就是基追踪(BP)问题的解。考虑如下软阈值函数(soft threshold function)

η ( x ; b ) = { x − b      i f   x > b 0             i f   − b ≤ x ≤ b x + b      i f   x < − b (15) \eta(x;b)=\left\{ \begin{aligned} & x-b \ \ \ \ if \ x>b \\ & 0 \ \ \ \ \ \ \ \ \ \ \ if \ -b \leq x \leq b \\ & x + b \ \ \ \ if \ x < -b \tag{15} \end{aligned} \right. η(x;b)=xb    if x>b0           if bxbx+b    if x<b(15)

软阈值函数与下式是等价的,

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

β → ∞ \beta \rightarrow \infty β时,有如下引理,

引理3:若 x , b x,b x,b有界,则

lim ⁡ β → ∞ F β ( x ; b ) = η ( x ; b ) lim ⁡ β → ∞ β G β ( x ; b ) = b η ′ ( x ; b ) (17) \lim_{\beta \rightarrow \infty} F_{\beta}(x;b)=\eta(x;b) \\ \tag{17} \lim_{\beta \rightarrow \infty} \beta G_{\beta}(x;b)=b\eta^{'}(x;b) βlimFβ(x;b)=η(x;b)βlimβGβ(x;b)=bη(x;b)(17)

对引理3的证明论文只用了简短的文字叙述,看得也不太清楚,这里暂且略过,并且这并没有影响下一部分从消息传递到AMP的推导。基于引理3,可以把式(14)转化为

z a → i t ≡ y a − ∑ j ≠ i A a j x j → a t x i → a t + 1 = η ( ∑ b ≠ a A b i z b → i t ; τ ^ t ) τ ^ t + 1 = τ ^ t δ N ∑ i = 1 N η ′ ( ∑ b ≠ a A b i z b → i t ; τ ^ t ) (18) z^t_{a \rightarrow i} \equiv y_a - \sum_{j\neq i} A_{aj} x^t_{j \rightarrow a} \\ x^{t+1}_{i \rightarrow a}= \eta(\sum_{b \neq a}A_{bi}z^t_{b \rightarrow i};\hat \tau^t) \tag{18} \\ \hat \tau^{t+1}=\frac{\hat \tau^t}{\delta N} \sum_{i=1}^N \eta^{'}(\sum_{b \neq a}A_{bi}z^t_{b \rightarrow i};\hat \tau^t) zaityaj=iAajxjatxiat+1=η(b=aAbizbit;τ^t)τ^t+1=δNτ^ti=1Nη(b=aAbizbit;τ^t)(18)

(4)从消息传递到AMP

注意到,即使式(18)对消息的传递过程做了简化,在计算时,每次迭代依然需要 2 n N 2nN 2nN条边消息的传递,为了进一步降低复杂度,考虑将边的消息传递转化为节点的消息迭代。假设消息可以通过如下方式近似,

x i → a t = x i t + δ x i → a t + O ( 1 N ) z a → i t = z a t + δ z a → i t + O ( 1 N ) (19) x^{t}_{i \rightarrow a}=x^t_i + \delta x^{t}_{i \rightarrow a} + \mathcal O(\frac{1}{N}) \\ z^t_{a \rightarrow i}=z^t_a+\delta z^t_{a \rightarrow i} + \mathcal O(\frac{1}{N}) \tag{19} xiat=xit+δxiat+O(N1)zait=zat+δzait+O(N1)(19)

其中 δ x i → a t , δ z a → i t = O ( 1 N ) \delta x^{t}_{i \rightarrow a},\delta z^t_{a \rightarrow i}=\mathcal O(\frac{1}{\sqrt N}) δxiat,δzait=O(N 1)(这里认为 O ( ⋅ ) \mathcal O(\cdot) O()的误差在所有边上都是统一的)。考虑一般的消息传递算法形式

z a → i t ≡ y a − ∑ j ≠ i A a j x j → a t x i → a t + 1 = η t ( ∑ b ≠ a A b i z b → i t ; τ ^ t ) (20) z^t_{a \rightarrow i} \equiv y_a - \sum_{j\neq i} A_{aj} x^t_{j \rightarrow a} \\ x^{t+1}_{i \rightarrow a}= \eta_t(\sum_{b \neq a}A_{bi}z^t_{b \rightarrow i};\hat \tau^t) \tag{20} zaityaj=iAajxjatxiat+1=ηt(b=aAbizbit;τ^t)(20)

这里的 { η t ( ⋅ ) } t ∈ N \{\eta_t(\cdot)\}_{t \in \mathbb N} { ηt()}tN是一组可微的非线性函数,而且其一阶导有界。事实上,这里只要求非线性函数 η t \eta_t ηt是Lipschitz连续的,所以即使式(17,18)中的 η \eta η函数在 b , − b b,-b b,b两个点不可导,但是也没关系。为了便于分析,对可微的 η t ( ⋅ ) \eta_t(\cdot) ηt()函数,有如下引理

引理4:如果对式(20)中的消息传递算法,式(19)的近似成立,那么节点的消息 x i t , z a t x^t_i,z^t_a xit,zat满足如下等式,

x i t + 1 = η t ( ∑ a A i a z a t + x i t ) + o N ( 1 ) z a t = y a − ∑ j A a j x j t + 1 δ z a t − 1 < η t − 1 ′ ( A T z t − 1 + x t − 1 ) > + o N ( 1 ) x^{t+1}_i=\eta_t(\sum_{a}A_{ia}z^t_a+x^t_i) + \mathcal o_N(1)\\ z^t_a = y_a - \sum_{j}A_{aj}x^t_j+\frac{1}{\delta}z^{t-1}_a<\eta^{'}_{t-1}(A^Tz^{t-1}+x^{t-1})>+ \mathcal o_N(1) xit+1=ηt(aAiazat+xit)+oN(1)zat=yajAajxjt+δ1zat1<ηt1(ATzt1+xt1)>+oN(1)

证明:将(20)代入(19),
首先对于传入变量节点的均值 z a → i t z^t_{a \rightarrow i} zait
z a → i t = y a − ∑ j ∈ [ N ] A a j x j t + δ y a − δ ∑ j ∈ [ N ] A a j x j t + A a i x i t + O ( 1 N ) = ( 1 + δ ) y a − ∑ j ∈ [ N ] A a j x j t − δ ∑ j ∈ [ N ] A a j x j t + A a i x i t + O ( 1 N ) → y a − ∑ j ∈ [ N ] A a j x j t − δ ∑ j ∈ [ N ] A a j x j t ⏟ z a t + A a i x i t ⏟ δ z a → i t (21) \begin{aligned} z^t_{a \rightarrow i} &= y_a - \sum_{j \in [N]}A_{aj}x^t_j+\delta y_a - \delta \sum_{j \in [N]}A_{aj}x^t_j + A_{ai}x^t_i+\mathcal O(\frac{1}{N}) \\ &= (1+\delta)y_a - \sum_{j \in [N]}A_{aj}x^t_j - \delta \sum_{j \in [N]}A_{aj}x^t_j+A_{ai}x^t_i+\mathcal O(\frac{1}{N})\\ & \rightarrow \underbrace{y_a - \sum_{j \in [N]}A_{aj}x^t_j - \delta \sum_{j \in [N]}A_{aj}x^t_j}_{z^t_a}+\underbrace{A_{ai}x^t_i}_{\delta z^t_{a \rightarrow i}} \end{aligned} \tag{21} zait=yaj[N]Aajxjt+δyaδj[N]Aajxjt+Aaixit+O(N1)=(1+δ)yaj[N]Aajxjtδj[N]Aajxjt+Aaixit+O(N1)zat yaj[N]Aajxjtδj[N]Aajxjt+δzait Aaixit(21)

然后对于传入因子节点的均值 x i → a t + 1 x^{t+1}_{i \rightarrow a} xiat+1,借助一阶的Taylor展开得到

x i → a t + 1 = η t ( ∑ b ∈ [ n ] A b i z b t + ∑ b ∈ [ n ] A b i δ z b → i t − A a i z a t + O ( 1 N ) ) = η t ( ∑ b ∈ [ n ] A b i z b t + ∑ b ∈ [ n ] A b i δ z b → i t ) ⏟ x i t − A a i z a t η t ′ ( ∑ b ∈ [ n ] A b i z b t + ∑ b ∈ [ n ] A b i δ z b → i t ) ⏟ δ x i → a t + O ( 1 N ) (22) \begin{aligned} x^{t+1}_{i \rightarrow a} &= \eta_t(\sum_{b \in [n]}A_{bi}z^t_b+\sum_{b \in [n]}A_{bi} \delta z^t_{b \rightarrow i}-A_{ai}z^t_a + \mathcal O(\frac{1}{N})) \\ &=\underbrace{\eta_t(\sum_{b \in [n]}A_{bi}z^t_b+\sum_{b \in [n]}A_{bi} \delta z^t_{b \rightarrow i})}_{x^t_i} \underbrace{-A_{ai}z^t_a \eta^{'}_t(\sum_{b \in [n]}A_{bi}z^t_b+\sum_{b \in [n]}A_{bi} \delta z^t_{b \rightarrow i})}_{\delta x^t_{i \rightarrow a}}+ \mathcal O(\frac{1}{N}) \end{aligned} \tag{22} xiat+1=ηt(b[n]Abizbt+b[n]AbiδzbitAaizat+O(N1))=xit ηt(b[n]Abizbt+b[n]Abiδzbit)δxiat Aaizatηt(b[n]Abizbt+b[n]Abiδzbit)+O(N1)(22)

将式(21)中的 δ z a → i t \delta z^t_{a \rightarrow i} δzait项代入到式(22)的第一项,得

x i t + 1 = η t ( ∑ b ∈ [ n ] A b i z b t + ∑ b ∈ [ n ] A b i δ z b → i t ) + o ( 1 ) = η t ( ∑ b ∈ [ n ] A b i z b t + ∑ b ∈ [ n ] A b i 2 x i t ) + o ( 1 ) = η t ( ∑ b ∈ [ n ] A b i z b t + x i t ) + o ( 1 ) (23) \begin{aligned} x^{t+1}_{i } &= \eta_t(\sum_{b \in [n]}A_{bi}z^t_b+\sum_{b \in [n]}A_{bi} \delta z^t_{b \rightarrow i}) + \mathcal o(1) \\ &=\eta_t(\sum_{b \in [n]}A_{bi}z^t_b+\sum_{b \in [n]}A^2_{bi} x^t_i) + \mathcal o(1) \\ &=\eta_t(\sum_{b \in [n]}A_{bi}z^t_b+ x^t_i)+ \mathcal o(1) \end{aligned} \tag{23} xit+1=ηt(b[n]Abizbt+b[n]Abiδzbit)+o(1)=ηt(b[n]Abizbt+b[n]Abi2xit)+o(1)=ηt(b[n]Abizbt+xit)+o(1)(23)

将式(22)的 δ x i → a t \delta x^t_{i \rightarrow a} δxiat项代入到式(21)的第一项,得

z a t = y a − ∑ j ∈ [ N ] A a j x j t − ∑ j ∈ [ N ] A a j δ x j t + o ( 1 ) = y a − ∑ j ∈ [ N ] A a j x j t + ∑ j ∈ [ N ] A a j 2 z a t − 1 η t − 1 ′ ( ∑ b ∈ [ n ] A b i z b t − 1 + ∑ b ∈ [ n ] A b i δ z b → i t − 1 ) + o ( 1 ) = y a − ∑ j ∈ [ N ] A a j x j t + 1 n ∑ j ∈ [ N ] z a t − 1 η t ′ ( ∑ b ∈ [ n ] A b i z b t − 1 + x i t − 1 ) + o ( 1 ) = y a − ∑ j ∈ [ N ] A a j x j t + 1 δ z a t − 1 < η t ′ ( ∑ b ∈ [ n ] A b i z b t − 1 + x t − 1 s i ) > + o ( 1 ) (24) \begin{aligned} z^{t}_a &= y_a - \sum_{j \in [N]}A_{aj}x^t_j - \sum_{j \in [N]}A_{aj} \delta x^t_j+ \mathcal o(1) \\ &=y_a - \sum_{j \in [N]}A_{aj}x^t_j + \sum_{j \in [N]} A^2_{aj}z^{t-1}_{a} \eta^{'}_{t-1}(\sum_{b \in [n]}A_{bi}z^{t-1}_b+\sum_{b \in [n]}A_{bi} \delta z^{t-1}_{b \rightarrow i})+ \mathcal o(1) \\ &=y_a - \sum_{j \in [N]}A_{aj}x^t_j + \frac{1}{n} \sum_{j \in [N]} z^{t-1}_{a} \eta^{'}_t(\sum_{b \in [n]}A_{bi}z^{t-1}_b+ x^{t-1}_i)+ \mathcal o(1) \\ &=y_a - \sum_{j \in [N]}A_{aj}x^t_j + \frac{1}{\delta} z^{t-1}_{a} <\eta^{'}_t(\sum_{b \in [n]}A_{bi}z^{t-1}_b+ x^{t-1}s_i)>+ \mathcal o(1) \end{aligned} \tag{24} zat=yaj[N]Aajxjtj[N]Aajδxjt+o(1)=yaj[N]Aajxjt+j[N]Aaj2zat1ηt1(b[n]Abizbt1+b[n]Abiδzbit1)+o(1)=yaj[N]Aajxjt+n1j[N]zat1ηt(b[n]Abizbt1+xit1)+o(1)=yaj[N]Aajxjt+δ1zat1<ηt(b[n]Abizbt1+xt1si)>+o(1)(24)

注意到,式(24)推导中的 η t ′ ( ⋅ ) \eta^{'}_t(\cdot) ηt()自变量的变换方式与式(23) η t ( ⋅ ) \eta_t(\cdot) ηt()是一致的。

将引理4的结果写为向量的形式

x t + 1 = η ( A T z t + x t ; τ ^ t ) z t = y − A x t + 1 δ z t − 1 < η ′ ( A T z t − 1 + x t − 1 ; τ ^ t − 1 ) > (25) \pmb x^{t+1}=\eta(\pmb A^T \pmb z^t+\pmb x^t; \hat \tau^t) \\ \pmb z^t = \pmb y - \pmb A \pmb x^t+\frac{1}{\delta} \pmb z^{t-1}<\eta^{'}(\pmb A^T \pmb z^{t-1}+\pmb x^{t-1}; \hat \tau^{t-1})> \tag{25} xxxt+1=η(AAATzzzt+xxxt;τ^t)zzzt=yyyAAAxxxt+δ1zzzt1<η(AAATzzzt1+xxxt1;τ^t1)>(25)

依据式(18),可以写出方差项 τ ^ t \hat \tau^t τ^t的迭代式

τ ^ t = τ ^ t − 1 δ < η ′ ( A T z t − 1 + x t − 1 ; τ ^ t − 1 ) > (26) \hat \tau^t = \frac{\hat \tau^{t-1}}{\delta} <\eta^{'}(\pmb A^T \pmb z^{t-1}+\pmb x^{t-1}; \hat \tau^{t-1})> \tag{26} τ^t=δτ^t1<η(AAATzzzt1+xxxt1;τ^t1)>(26)

小结

我们再回顾一下对BP问题的AMP推导思路,最开始根据问题模型画出因子图,因子图中的因子节点(左边)一般表示为似然函数,然后根据标准的和积算法(信念传播算法)写出其消息传递过程。考虑大系统极限 n , N → ∞ n,N \rightarrow \infty n,N,依据中心极限定理将从因子节点到变量节点的消息先近似为高斯分布,然后再将变量节点到因子节点的消息近似为拉普拉斯分布与一些高斯分布的乘积(如果变量的先验分布已知,将拉普拉斯分布替换为先验分布),据此可以得到简化的信念传播算法。但是这仍然需要每次迭代更新 2 n N 2nN 2nN条消息,为了进一步简化,将信念传播算法里边消息的传递转化到节点上,即从消息传递到AMP的转换过程,这也是AMP的核心步骤之一。
关于从边上的消息到节点的转换,这里做一个直观但不太严格的的解释,令 ν i t \nu^t_i νit为所有到变量节点 s i s_i si的消息乘积(归一化后),则 ν i t \nu^t_i νit为本次迭代下,变量节点 s i s_i si的边际分布,其均值 x i t x^t_i xit

x i t ≅ ∫ s i ν i t d s i (27) x^t_i \cong \int s_i \nu^t_i \text{d}s_i \tag{27} xitsiνitdsi(27)

而从变量节点 s i s_i si到因子节点 a a a的边消息的均值 x i → a t x^t_{i \rightarrow a} xiat

x i → a t ≅ ∫ s i ν i t ν ^ a → i t d s i (28) x^t_{i \rightarrow a} \cong \int s_i \frac{\nu^t_i}{\hat \nu^t_{a \rightarrow i}} \text{d}s_i \tag{28} xiatsiν^aitνitdsi(28)

注意到 ν i t = ∏ b = 1 n ν ^ b → i t \nu^t_i=\prod_{b=1}^n \hat \nu^t_{b \rightarrow i} νit=b=1nν^bit,因为 ν ^ b → i t   ∀ b \hat \nu^t_{b \rightarrow i} \ \forall b ν^bit b已经被近似为高斯分布,若各消息方差相等,则

ν i t ≅ e x p { − α [ ( n − 1 ) ⋅ ( s − μ ) 2 + ( s − μ n ) 2 ] } ≅ e x p { − α ⋅ n ( s − ( n − 1 ) μ + μ n n ) 2 } (29) \begin{aligned} \nu^t_i & \cong exp\{- \alpha [ (n-1) \cdot (s-\mu)^2+(s-\mu_n)^2 ] \} \\ & \cong exp \{ -\alpha \cdot n(s-\frac{(n-1) \mu + \mu_n}{n})^2 \} \end{aligned} \tag{29} νitexp{ α[(n1)(sμ)2+(sμn)2]}exp{ αn(sn(n1)μ+μn)2}(29)
ν i t ν ^ a → i t ≅ e x p { − α [ ( n − 1 ) ⋅ ( s − μ ) 2 ] } (30) \frac{\nu^t_i}{\hat \nu^t_{a \rightarrow i}} \cong exp\{- \alpha [ (n-1) \cdot (s-\mu)^2] \} \tag{30} ν^aitνitexp{ α[(n1)(sμ)2]}(30)

其中 α > 0 \alpha > 0 α>0。已知 n → ∞ n \rightarrow \infty n,结合式(27,29)可得
lim ⁡ n → ∞ x i t = μ + O ( 1 n ) = μ lim ⁡ n → ∞ x i → a t = μ \lim_{n \rightarrow \infty}x^t_i=\mu+\mathcal O(\frac{1}{\sqrt n})=\mu \\ \lim_{n \rightarrow \infty} x^t_{i \rightarrow a} = \mu nlimxit=μ+O(n 1)=μnlimxiat=μ

所以事实上,在一次迭代中,边消息的均值趋近于变量节点边际概率的均值,但由于迭代次数较多,为了防止估计误差逐渐累积,采取了 x i → a t = x i t + δ x i → a t + O ( 1 N ) x^{t}_{i \rightarrow a}=x^t_i + \delta x^{t}_{i \rightarrow a} + \mathcal O(\frac{1}{N}) xiat=xit+δxiat+O(N1)的补偿方式来补偿 O ( 1 N ) / O ( 1 n ) \mathcal O(\frac{1}{\sqrt N})/\mathcal O(\frac{1}{\sqrt n}) O(N 1)/O(n 1)的消息( n , N n,N n,N同阶)。

[1] D. L. Donoho, A. Maleki and A. Montanari, “Message passing algorithms for compressed sensing: I. motivation and construction,” 2010 IEEE Information Theory Workshop on Information Theory (ITW 2010, Cairo), 2010, pp. 1-5, doi: 10.1109/ITWKSPS.2010.5503193.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43413559/article/details/121639410

智能推荐

世界围棋人机大战、顶峰对决第二战:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序,AlphaGo再次胜出!...-程序员宅基地

文章浏览阅读189次。感觉在哔哩哔哩(bilibili)上看比赛直播比较好,一直可以看到比赛的直播画面,还能听到英文解说和中文主持人的解说。YouTube上是不错,但是一方面爬梯子比较卡,另一方面只能听到英文解说。韩国著名围棋九段棋手李世石与谷歌人工智能“阿尔法围棋”(AlphaGo)的5盘对决,将于3月9日、10日、12日、13日和15日在首尔举行。比赛将采用贴7.5目的中国规则(比赛结束时,先走棋的棋手贴..._围棋游戏九段

MQTT协议简介及消息总线EMQX与客户端Paho快速上手_paho mqtt-程序员宅基地

文章浏览阅读5k次。1. MQTT简介MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是基于“订阅/发布”模式的轻量级通信协议,该协议基于TCP/IP,能以极低的带宽为海量(百万级)跨域设备提供可靠的消息服务,因此在物联网、小型移动终端、边缘计算方面有广泛应用。所谓可靠的消息传输,体现为可配置消息的服务质量(QoS),有三种服务质量可选:至多一次:消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。应用场景如环境传感器的数据采集,丢失一次记录无所谓,因_paho mqtt

vivado TCL 脚本使用——loogarch指令集 实验exp6_tcl learch-程序员宅基地

文章浏览阅读203次。然后打开Tools——Run Tcl script,执行create_project.tcl文件,静待完成。首先从Window-tcl console 调出终端。也就是run_vivado 目录。然后执行进入指定目录。_tcl learch

批处理详解_批处理 同时按下win键与y键-程序员宅基地

文章浏览阅读872次。一、什么叫做批处理文件? 批处理文件(文件名为*.BAT)就是将一些常用的命令写入一个文本文件内。当我们要使用这个文件时,只要键入批处理文件的文件名,批处理文件就会依照文件中的命令来执行全部或者是一部分指定要执行命令。如此我们便可简化我们的工作,而不用每一次都需要手动键入很多的命令来执行一些动作。 一个批处理文件的建立,因为必须是一个文本文件;所以只要有字处理功能的软件,都可用来建立此文本文件,例_批处理 同时按下win键与y键

SQL语言的规则与规范_sql规范-程序员宅基地

文章浏览阅读1.8k次,点赞48次,收藏51次。- 数据库、表名不得超过30个字符,变量名限制为29个- 必须只能包含 A–Z, a–z, 0–9, _共63个字符- 数据库名、表名、字段名等对象名中间不要包含空格- 同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名- 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使用`(着重号)引起来- 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别_sql规范

clickhouse 常用命令_clickhouse查询历史-程序员宅基地

文章浏览阅读483次,点赞12次,收藏5次。【代码】clickhouse 常用命令。_clickhouse查询历史

随便推点

数论——无关(relationship)(容斥原理)_设 k 是正整数,集合 a 至少有两个元素,且 acn *.如果对于 a 中的任意两个不同-程序员宅基地

文章浏览阅读234次。题目链接数论——无关(relationship)(容斥原理)题目描述若一个集合 A 内所有的元素都不是正整数 N 的因数,则称 N 与集合 A 无关。给出一个含有 k 个元素的集合 A = {a1,a2,a3,…,ak},求区间 [L,R] 内与 A 无关的正整数的个数。保证 A 内的元素都是素数。输入描述输入数据共两行:第一行三个正整数 L,R,k,意义如“题目描述”。第二行k个正整数,描述集合 A,保证 k 个正整数两两不相同。输出描述输出数据共一行:第一行一个正整数表示区间 [_设 k 是正整数,集合 a 至少有两个元素,且 acn *.如果对于 a 中的任意两个不同

Go 语言通过 SSH 远程登录服务器执行命令和传输文件_go sshclient.newsession-程序员宅基地

文章浏览阅读792次。Go 语言通过 SSH 远程登录服务器执行命令和传输文件_go sshclient.newsession

NRF52832学习笔记(11)——蓝牙MAC地址_52832的app从哪个地址开始的-程序员宅基地

文章浏览阅读2.9k次,点赞5次,收藏17次。一、背景一个 BLE 设备,可以使用两种类型的地址(一个 BLE 设备可同时具备两种地址):Public Device Address(公共设备地址)Random Device Address(随机设备地址)可分为两类:Static Device Address(静态设备地址)Private Device Address(私密设备地址)又可分为两类:Non-resolvable Private Address(不可解析私密地址)Resolvable Private Address(可解析_52832的app从哪个地址开始的

JAVA实现简单的登录界面_登录页面java-程序员宅基地

文章浏览阅读10w+次,点赞224次,收藏1.3k次。我本来是学C++的,然后课程上老师要求做一个登陆界面,用C++实现不限时,然后就选择了JAVA,从零开始自学JAVA。好在网上很多大佬都写了如何用JAVA编写登陆界面的博客,写得很详细,使得我第一次接触JAVA也能看懂一二。比较推荐这篇,博主真的很细心,我主要也是参考的这篇文章(分为一、二两篇):https://blog.csdn.net/Alexwym/article/details/8..._登录页面java

【测开学习】--测试理论_cs,bs-程序员宅基地

文章浏览阅读342次。【测开学习】–测试理论系统架构介绍两种常见的系统架构:CS架构BS架构CS架构CS:(Client/Server)即客户端-服务器架构优点:能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器,所以CS客户端响应速度快;操作界面漂亮、形式多样,可以充分满足客户自身的个性化要求;能够实现复杂的业务流程;安全性能更容易保证;缺点:需要专门的客户端安装程序,不方便实现快速部署安装和配置;兼容性差,不同的操作系统需要开发不同的程序;开发、维护成本较高,需要具有一定专_cs,bs

小白算法积累——顺序表12#顺序表+查找主元素(占比1/2以上)-程序员宅基地

文章浏览阅读452次。题目:已知一个整数序列A=(a0,a1,a2…an-1),其中0<=ai<n(0<=i<n)。若存在ap1=ap2=…apm =x,且m>n/2 (0<=pk<n,1<=k<m), 则称x为A的主元素。例如A=(0,5,5,3,5,1,5,7),则A中没有主元素。假设A中的n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A的主元...