与sum-product算法不同,这里认为
f ( X 1 , X 2 , . . . , X N ) = ∑ k f k ( S k ) f(X_1,X_2,...,X_N)=\sum\limits_{k}f_k(S_k) f(X1,X2,...,XN)=k∑fk(Sk)
这里的因子图应该就不是传统的画法了。
用三元组 ( R + , m a x , + ) (R^+,max,+) (R+,max,+)去替换sum-product算法中的三元组 ( R + , + , × ) (R^+,+,\times) (R+,+,×)。
这里的替换是要满足一定的条件的:
把 m a x → + max \to + max→+和 + → × + \to \times +→×代入上文(一文读懂sum-product算法),可以按照那个顺序顺着推导下来。
注意一下边缘
μ f k → x n ( x n ) = m a x ∼ { x n } f k ( { X m } ∈ N ( f k ) ) ∑ X m ∈ N ( f k ) / X n { ∑ f l ∈ N ( X m ) / f k h f l ( X m ) ( X m , S f l ( X m ) ) } \mu_{f_k\to x_n}(x_n)=\mathop{max}\limits_{\sim\{x_n\}}{f_k(\{X_m\}\in N(f_k))\sum\limits_{X_m\in N(f_k)/X_n}{\{\sum\limits_{f_l\in N(X_m)/f_k}{ {h_{f_l}^{(X_m)}(X_m,S_{f_l}^{(X_m)})}}\}}} μfk→xn(xn)=∼{ xn}maxfk({ Xm}∈N(fk))Xm∈N(fk)/Xn∑{ fl∈N(Xm)/fk∑hfl(Xm)(Xm,Sfl(Xm))}
μ f k → x n ( x n ) = f k ( { X m } ∈ N ( f k ) ) \mu_{f_k\to x_n}(x_n)=f_k(\{X_m\}\in N(f_k)) μfk→xn(xn)=fk({ Xm}∈N(fk))
μ x n → f k ( x n ) = ∑ f l ∈ N ( x n ) / f k μ f l → x n ( x n ) = 0 \mu_{x_n\to f_k}(x_n)={\sum\limits_{f_l\in N(x_n)/f_k}}\mu_{f_l\to x_n(x_n)}=0 μxn→fk(xn)=fl∈N(xn)/fk∑μfl→xn(xn)=0
注意最后算的结果
g ( x n ) = m a x ∼ { x n } f ( x 1 , x 2 . , , , , x N ) g(x_n)=\mathop{max}\limits_{\mathop{\sim \{x_n\}}}f(x_1,x_2.,,,,x_N) g(xn)=∼{ xn}maxf(x1,x2.,,,,xN)
这个点可以帮助我们寻求一个函数的最大值,先得到
x ^ n = a r g m a x x n g ( x n ) \hat {x}_n=arg \mathop{max}\limits_{x_n}g(x_n) x^n=argxnmaxg(xn)
g ( x ^ n ) = m a x f ( x 1 , x 2 , . . . , x N ) g(\hat{x}_n)=max f(x_1,x_2,...,x_N) g(x^n)=maxf(x1,x2,...,xN)
得到一系列的 [ x ^ 1 , x ^ 2 , . . . x ^ N ] [\hat{x}_1,\hat{x}_2,...\hat{x}_N] [x^1,x^2,...x^N]就是 f ( x 1 , . . . x N ) f(x_1,...x_N) f(x1,...xN)的最大值点。对于离散的情况,这个结论是必然正确的。