1:m -> [1:m]; wrote message passing algorithm; added TODO

This commit is contained in:
Andreas Tsouchlos 2023-03-17 13:07:58 +01:00
parent d333e461a7
commit 7aecd47220

View File

@ -176,6 +176,7 @@ decoding and one, which is an approximation with a more manageable
representation. representation.
To solve the resulting linear program, various optimization methods can be To solve the resulting linear program, various optimization methods can be
used. used.
\todo{Citation needed}
They begin by looking at the \ac{ML} decoding problem% They begin by looking at the \ac{ML} decoding problem%
\footnote{They assume that all codewords are equally likely to be transmitted, \footnote{They assume that all codewords are equally likely to be transmitted,
@ -710,7 +711,7 @@ complexity has been demonstrated to compare favorably to \ac{BP} \cite{original_
The \ac{LP} decoding problem in (\ref{eq:lp:relaxed_formulation}) can be The \ac{LP} decoding problem in (\ref{eq:lp:relaxed_formulation}) can be
slightly rewritten using the auxiliary variables slightly rewritten using the auxiliary variables
$\boldsymbol{z}_{1:m}$:% $\boldsymbol{z}_{[1:m]}$:%
% %
\begin{align} \begin{align}
\begin{aligned} \begin{aligned}
@ -741,8 +742,8 @@ The multiple constraints can be addressed by introducing additional terms in the
augmented lagrangian:% augmented lagrangian:%
% %
\begin{align*} \begin{align*}
\mathcal{L}_{\mu}\left( \tilde{\boldsymbol{c}}, \boldsymbol{z}_{1:m}, \mathcal{L}_{\mu}\left( \tilde{\boldsymbol{c}}, \boldsymbol{z}_{[1:m]},
\boldsymbol{\lambda}_{1:m} \right) \boldsymbol{\lambda}_{[1:m]} \right)
= \boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}} = \boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}}
+ \sum_{j\in\mathcal{J}} \boldsymbol{\lambda}^\text{T}_j + \sum_{j\in\mathcal{J}} \boldsymbol{\lambda}^\text{T}_j
\left( \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j \right) \left( \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j \right)
@ -754,19 +755,19 @@ The additional constraints remain in the dual optimization problem:%
% %
\begin{align*} \begin{align*}
\text{maximize } \min_{\substack{\tilde{\boldsymbol{c}} \\ \text{maximize } \min_{\substack{\tilde{\boldsymbol{c}} \\
\boldsymbol{z}_j \in \mathcal{P}_{d_j}}} \boldsymbol{z}_j \in \mathcal{P}_{d_j}\,\forall\,j\in\mathcal{J}}}
\mathcal{L}_{\mu}\left( \tilde{\boldsymbol{c}}, \boldsymbol{z}_{1:m}, \mathcal{L}_{\mu}\left( \tilde{\boldsymbol{c}}, \boldsymbol{z}_{[1:m]},
\boldsymbol{\lambda}_{1:m} \right) \boldsymbol{\lambda}_{[1:m]} \right)
.\end{align*}% .\end{align*}%
% %
The steps to solve the dual problem then become: The steps to solve the dual problem then become:
% %
\begin{alignat*}{3} \begin{alignat*}{3}
\tilde{\boldsymbol{c}} &\leftarrow \argmin_{\tilde{\boldsymbol{c}}} \mathcal{L}_{\mu} \left( \tilde{\boldsymbol{c}} &\leftarrow \argmin_{\tilde{\boldsymbol{c}}} \mathcal{L}_{\mu} \left(
\tilde{\boldsymbol{c}}, \boldsymbol{z}_{1:m}, \boldsymbol{\lambda}_{1:m} \right) \\ \tilde{\boldsymbol{c}}, \boldsymbol{z}_{[1:m]}, \boldsymbol{\lambda}_{[1:m]} \right) \\
\boldsymbol{z}_j &\leftarrow \argmin_{\boldsymbol{z}_j \in \mathcal{P}_{d_j}} \boldsymbol{z}_j &\leftarrow \argmin_{\boldsymbol{z}_j \in \mathcal{P}_{d_j}}
\mathcal{L}_{\mu} \left( \mathcal{L}_{\mu} \left(
\tilde{\boldsymbol{c}}, \boldsymbol{z}_{1:m}, \boldsymbol{\lambda}_{1:m} \right) \tilde{\boldsymbol{c}}, \boldsymbol{z}_{[1:m]}, \boldsymbol{\lambda}_{[1:m]} \right)
\hspace{3mm} &&\forall j\in\mathcal{J} \\ \hspace{3mm} &&\forall j\in\mathcal{J} \\
\boldsymbol{\lambda}_j &\leftarrow \boldsymbol{\lambda}_j \boldsymbol{\lambda}_j &\leftarrow \boldsymbol{\lambda}_j
+ \mu\left( \boldsymbol{T}_j\tilde{\boldsymbol{c}} + \mu\left( \boldsymbol{T}_j\tilde{\boldsymbol{c}}
@ -793,6 +794,8 @@ and the $\tilde{\boldsymbol{c}}$-update can be computed analytically \cite[Sec.
\hspace{3mm} && \forall j\in\mathcal{J} \hspace{3mm} && \forall j\in\mathcal{J}
.\end{alignat*} .\end{alignat*}
% %
\todo{$\tilde{c}_i$-update With or without projection onto $\left[ 0, 1 \right] ^n$?}
%
One thing to note is that all of the $\boldsymbol{z}_j$-updates can be computed simultaneously, One thing to note is that all of the $\boldsymbol{z}_j$-updates can be computed simultaneously,
as they are independent of one another. as they are independent of one another.
The same is true for the updates of the individual components of $\tilde{\boldsymbol{c}}$. The same is true for the updates of the individual components of $\tilde{\boldsymbol{c}}$.
@ -809,7 +812,8 @@ algorithm \cite[Sec. III. D.]{original_admm}, \cite[Sec. II. B.]{efficient_lp_de
as is shown in figure \ref{fig:lp:message_passing} as is shown in figure \ref{fig:lp:message_passing}
\footnote{$\epsilon_{\text{pri}} > 0$ and $\epsilon_{\text{dual}} > 0$ are additional parameters \footnote{$\epsilon_{\text{pri}} > 0$ and $\epsilon_{\text{dual}} > 0$ are additional parameters
defining the tolerances for the stopping criteria of the algorithm. defining the tolerances for the stopping criteria of the algorithm.
$\boldsymbol{z}_j^\prime$ denotes the value of $\boldsymbol{z}_j$ in the previous iteration.}% The variable $\boldsymbol{z}_j^\prime$ denotes the value of
$\boldsymbol{z}_j$ in the previous iteration.}%
\todo{Move footnote to figure caption}% \todo{Move footnote to figure caption}%
.% .%
\todo{Explicitly specify sections?}% \todo{Explicitly specify sections?}%
@ -817,21 +821,32 @@ $\boldsymbol{z}_j^\prime$ denotes the value of $\boldsymbol{z}_j$ in the previou
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\begin{genericAlgorithm}[caption={}, label={}] \begin{genericAlgorithm}[caption={}, label={},
Initialize $\tilde{\boldsymbol{c}}, \boldsymbol{z}_{1:m}$ and $\boldsymbol{\lambda}_{1:m}$ basicstyle=\fontsize{11}{16}\selectfont
while $\sum_{j\in\mathcal{J}} \lVert \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j \rVert_2 \ge \epsilon_{\text{pri}}$ or $\sum_{j\in\mathcal{J}} \lVert \boldsymbol{z}^\prime_j - \boldsymbol{z}_j \rVert_2 \ge \epsilon_{\text{dual}}$ ]
Perform check update Initialize $\tilde{\boldsymbol{c}}, \boldsymbol{z}_{[1:m]}$ and $\boldsymbol{\lambda}_{[1:m]}$
... while $\sum_{j\in\mathcal{J}} \lVert \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j \rVert_2 \ge \epsilon_{\text{pri}}$ or $\sum_{j\in\mathcal{J}} \lVert \boldsymbol{z}^\prime_j - \boldsymbol{z}_j \rVert_2 \ge \epsilon_{\text{dual}}$ do
Perform variable update for all $j$ in $\mathcal{J}$ do
... $\boldsymbol{z}_j \leftarrow \Pi_{\mathcal{P}_{d_j}}\left(
\boldsymbol{T}_j\tilde{\boldsymbol{c}} + \boldsymbol{\lambda}_j \right)$
$\boldsymbol{\lambda}_j \leftarrow \boldsymbol{\lambda}_j
+ \mu\left( \boldsymbol{T}_j\tilde{\boldsymbol{c}}
- \boldsymbol{z}_j \right)$
end for
for all $i$ in $\mathcal{I}$ do
$\tilde{c}_i \leftarrow \frac{1}{\left| N_v\left( i \right) \right|} \left(
\sum_{j\in N_v\left( i \right) } \Big( \left( \boldsymbol{\lambda}_j \right)_i
- \left( \boldsymbol{z}_j \right)_i \Big) - \frac{\gamma_i}{\mu} \right)$
end for
end while
\end{genericAlgorithm} \end{genericAlgorithm}
\caption{\ac{LP} decoding using \ac{ADMM} interpreted as a message passing algorithm} \caption{\ac{LP} decoding using \ac{ADMM} interpreted as a message passing algorithm}
\label{fig:lp:message_passing} \label{fig:lp:message_passing}
\end{figure}% \end{figure}%
% %
\noindent The $\tilde{c}_i$-updates can be interpreted as a variable-node update step, \noindent The $\tilde{c}_i$-updates can be understood as a variable-node update step,
and the $\boldsymbol{z}_j$- and $\boldsymbol{\lambda}_j$-updates can be interpreted as and the $\boldsymbol{z}_j$- and $\boldsymbol{\lambda}_j$-updates can be understood as
a check-node update step. a check-node update step.
The updates for each variable- and check-node can be perfomed in parallel. The updates for each variable- and check-node can be perfomed in parallel.
With this interpretation it becomes clear why \ac{LP} decoding using \ac{ADMM} With this interpretation it becomes clear why \ac{LP} decoding using \ac{ADMM}