304 lines
12 KiB
TeX
304 lines
12 KiB
TeX
\section{Decoding Algorithms}%
|
|
\label{sec:Decoding Algorithms}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\subsection{Proximal Decoding}%
|
|
\label{sub:Alg Proximal Decoding}
|
|
|
|
\begin{frame}[t]
|
|
\frametitle{Proximal Decoding: General Idea \cite{proximal_paper}}
|
|
|
|
\begin{itemize}
|
|
\item MAP rule:
|
|
\begin{align*}
|
|
\hat{\boldsymbol{x}}
|
|
= \argmax_{x\in\mathbb{R}}
|
|
f_{\boldsymbol{Y}}\left( \boldsymbol{y} | \boldsymbol{x} \right)
|
|
f_{\boldsymbol{X}}\left( \boldsymbol{x} \right)
|
|
= \argmax_{x\in\mathbb{R}}
|
|
e^{-L\left( \boldsymbol{y} | \boldsymbol{x}\right)}
|
|
f_{\boldsymbol{X}}\left( \boldsymbol{x} \right)
|
|
\end{align*}
|
|
\item Approximation of prior PDF:
|
|
\begin{align*}
|
|
f_{\boldsymbol{X}}\left( \boldsymbol{x} \right)
|
|
= \frac{1}{\left| \mathcal{C}\left( \boldsymbol{H} \right) \right| }
|
|
\sum_{c \in \mathcal{C}\left( \boldsymbol{H} \right) }
|
|
\delta\left( \boldsymbol{x} - \boldsymbol{c} \right)
|
|
\approx \frac{1}{Z} e^{-\gamma h\left( x \right) }
|
|
\end{align*}
|
|
\item Code constraint polynomial:
|
|
\begin{align*}
|
|
h\left( \boldsymbol{x} \right) =
|
|
\underbrace{\sum_{j=1}^{n} \left( x_j^2 - 1 \right)^2}_{\text{Bipolar constraint}}
|
|
+ \underbrace{\sum_{i=1}^{m} \left[ \left(
|
|
\prod_{j\in\mathcal{A}\left( i \right)} x_j\right) -1 \right]^2}
|
|
_{\text{Parity constraint}},
|
|
\hspace{5mm}\mathcal{A}\left( i \right) \equiv \left\{
|
|
j | j\in \mathcal{J},
|
|
\boldsymbol{H}_{j,i} = 1
|
|
\right\},
|
|
i \in \mathcal{I}
|
|
\end{align*}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\begin{frame}[t]
|
|
\frametitle{Proximal Decoding: General Idea}
|
|
|
|
\begin{itemize}
|
|
\item Objective function:
|
|
\begin{align*}
|
|
f\left( \boldsymbol{x} \right)
|
|
= L\left( \boldsymbol{y} | \boldsymbol{x} \right)
|
|
+ \gamma h\left( \boldsymbol{x} \right),
|
|
\hspace{5mm} L\left( \boldsymbol{y} | \boldsymbol{x} \right)
|
|
= - \ln\left( f_{\boldsymbol{Y}}
|
|
\left( \boldsymbol{y} | \boldsymbol{x} \right) \right)
|
|
\end{align*}
|
|
\note{Notational difference between $f$ and $f_X$ or $f_Y$}
|
|
\item Code proximal operator \cite{proximal_algorithms}:
|
|
\begin{align*}
|
|
\text{prox}_{\gamma h} \left( \boldsymbol{x} \right) &\equiv
|
|
\argmin_{\boldsymbol{z}\in\mathbb{R}} \left(
|
|
\gamma h\left( \boldsymbol{z} \right) + \frac{1}{2} \lVert \boldsymbol{z}
|
|
- \boldsymbol{x} \rVert^2 \right)\\
|
|
&\approx \boldsymbol{x} - \gamma \nabla h\left( \boldsymbol{x} \right),
|
|
\hspace{5mm} \gamma \text{ small}
|
|
\end{align*}
|
|
\item Iterative decoding process:
|
|
\begin{align*}
|
|
\boldsymbol{r} &\leftarrow \boldsymbol{s}
|
|
- \omega \nabla L\left( \boldsymbol{y} | \boldsymbol{s}
|
|
\right), \hspace{5mm} \omega > 0
|
|
\hspace{10mm} \text{``Gradient descent step''}\\
|
|
\boldsymbol{s} &\leftarrow \boldsymbol{r}
|
|
- \gamma \nabla h\left( \boldsymbol{r}
|
|
\right) \hspace{29mm} \text{``Code proximal step''}
|
|
\end{align*}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\begin{frame}[t, fragile]
|
|
\frametitle{Proximal Decoding: Algorithm}
|
|
\begin{itemize}
|
|
\item Resulting iterative decoding algorithm \cite{proximal_paper}:
|
|
\end{itemize}
|
|
|
|
\vspace{2mm}
|
|
\begin{algorithm}[caption={}, label={}]
|
|
$\boldsymbol{s} \leftarrow \boldsymbol{0}$
|
|
for $K$ iterations do
|
|
$\boldsymbol{r} \leftarrow \boldsymbol{s} - \omega \nabla L \left( \boldsymbol{y} \mid \boldsymbol{s} \right) $
|
|
$\boldsymbol{s} \leftarrow \boldsymbol{r} - \gamma \nabla h\left( \boldsymbol{r} \right) $
|
|
$\boldsymbol{\hat{x}} \leftarrow \text{sign}\left( \boldsymbol{s} \right) $
|
|
If $\boldsymbol{H}\boldsymbol{\hat{c}} = \boldsymbol{0}$, then return $\boldsymbol{\hat{c}}$
|
|
end for
|
|
return $\boldsymbol{\hat{c}}$
|
|
\end{algorithm}
|
|
\end{frame}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\subsection{LP Decoding}%
|
|
\label{sub:LP Decoding}
|
|
|
|
\begin{frame}[t]
|
|
\frametitle{LP Decoding \cite{feldman_paper}}
|
|
|
|
\begin{minipage}[c]{0.6\linewidth}
|
|
\begin{itemize}
|
|
\item Codeword polytope:
|
|
\begin{align*}
|
|
\text{poly}\left( \mathcal{C} \right) =
|
|
\left\{
|
|
\sum_{\boldsymbol{c}\in\mathcal{C}}\lambda_{\boldsymbol{c}}
|
|
\boldsymbol{c} : \lambda_{\boldsymbol{c}} \ge 0,
|
|
\sum_{\boldsymbol{c}\in\mathcal{C}}\lambda_{\boldsymbol{c}} = 1
|
|
\right\},
|
|
\hspace{5mm} \lambda_{\boldsymbol{c}} \in \mathbb{R}
|
|
\end{align*}
|
|
\item Cost function:
|
|
\begin{align*}
|
|
\sum_{i=1}^{n} \gamma_i c_i,
|
|
\hspace{5mm}\gamma_i = \log\left(
|
|
\frac{P\left( Y=y_i | C=0 \right) }{P\left( Y=y_i | C=1 \right) } \right)
|
|
\end{align*}
|
|
\item LP formulation of ML decoding:
|
|
\begin{align*}
|
|
&\text{minimize } \sum_{i=1}^{n} \gamma_i f_i \\
|
|
&\text{subject to } \boldsymbol{f}\in\text{poly}\left( \mathcal{C} \right)
|
|
\end{align*}
|
|
\end{itemize}
|
|
\end{minipage}%
|
|
\hfill%
|
|
\begin{minipage}[c]{0.4\linewidth}
|
|
\begin{figure}[H]
|
|
\centering
|
|
|
|
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
|
draw, circle, inner sep=0pt, minimum size=4pt]
|
|
|
|
\tdplotsetmaincoords{60}{245}
|
|
\begin{tikzpicture}[scale=1, transform shape, tdplot_main_coords]
|
|
% Cube
|
|
|
|
\draw[dashed] (0, 0, 0) -- (2, 0, 0);
|
|
\draw[dashed] (2, 0, 0) -- (2, 0, 2);
|
|
\draw[] (2, 0, 2) -- (0, 0, 2);
|
|
\draw[] (0, 0, 2) -- (0, 0, 0);
|
|
|
|
\draw[] (0, 2, 0) -- (2, 2, 0);
|
|
\draw[] (2, 2, 0) -- (2, 2, 2);
|
|
\draw[] (2, 2, 2) -- (0, 2, 2);
|
|
\draw[] (0, 2, 2) -- (0, 2, 0);
|
|
|
|
\draw[] (0, 0, 0) -- (0, 2, 0);
|
|
\draw[dashed] (2, 0, 0) -- (2, 2, 0);
|
|
\draw[] (2, 0, 2) -- (2, 2, 2);
|
|
\draw[] (0, 0, 2) -- (0, 2, 2);
|
|
|
|
% Codeword Polytope
|
|
|
|
\draw[line width=1pt, color=KITblue] (0, 0, 0) -- (2, 0, 2);
|
|
\draw[line width=1pt, color=KITblue] (0, 0, 0) -- (2, 2, 0);
|
|
\draw[line width=1pt, color=KITblue] (0, 0, 0) -- (0, 2, 2);
|
|
|
|
\draw[line width=1pt, color=KITblue] (2, 0, 2) -- (2, 2, 0);
|
|
\draw[line width=1pt, color=KITblue] (2, 0, 2) -- (0, 2, 2);
|
|
|
|
\draw[line width=1pt, color=KITblue] (0, 2, 2) -- (2, 2, 0);
|
|
|
|
% Polytope Annotations
|
|
|
|
\node[codeword] (c000) at (0, 0, 0) {};% {$\left( 0, 0, 0 \right) $};
|
|
\node[codeword] (c101) at (2, 0, 2) {};% {$\left( 1, 0, 1 \right) $};
|
|
\node[codeword] (c110) at (2, 2, 0) {};% {$\left( 1, 1, 0 \right) $};
|
|
\node[codeword] (c011) at (0, 2, 2) {};% {$\left( 0, 1, 1 \right) $};
|
|
|
|
\node[color=KITblue, right=0cm of c000] {$\left( 0, 0, 0 \right) $};
|
|
\node[color=KITblue, above=0cm of c101] {$\left( 1, 0, 1 \right) $};
|
|
\node[color=KITblue, left=0cm of c110] {$\left( 1, 1, 0 \right) $};
|
|
\node[color=KITblue, left=0cm of c011] {$\left( 0, 1, 1 \right) $};
|
|
|
|
% f
|
|
|
|
\node[color=KITgreen, fill=KITgreen,
|
|
draw, circle, inner sep=0pt, minimum size=4pt] (f) at (0.7, 0.7, 1) {};
|
|
\node[color=KITgreen, right=0cm of f] {$\boldsymbol{f}$};
|
|
\end{tikzpicture}
|
|
\caption{$\text{poly}\left( \mathcal{C} \right)$ for $n=3$}
|
|
\end{figure}
|
|
\end{minipage}
|
|
\end{frame}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%\begin{frame}[t]
|
|
% \frametitle{LP Relaxation}
|
|
%
|
|
% \begin{minipage}[c]{0.6\linewidth}
|
|
% \begin{itemize}
|
|
% \item Set of all variable nodes incident to a check node:
|
|
% \begin{align*}
|
|
% N\left( j \right) \equiv \left\{
|
|
% i | i\in \mathcal{I},
|
|
% \boldsymbol{H}_{j,i} = 1
|
|
% \right\},
|
|
% j \in \mathcal{J}
|
|
% \end{align*}
|
|
% \begin{align*}
|
|
% S \subseteq N\left( j \right), \left| S \right| \text{odd}
|
|
% \end{align*}
|
|
% \item Relaxed polytope representation:
|
|
% \begin{align*}
|
|
% \sum_{i\in \left( N\left( j \right) \setminus S\right) } f_i
|
|
% + \sum_{i\in S} \left( 1 - f_i \right) \ge 1
|
|
% \end{align*}
|
|
% ``$\boldsymbol{f}$ is separated by at least one bitflip
|
|
% from all illegal configurations''
|
|
% \end{itemize}
|
|
% \end{minipage}%
|
|
% \hfill%
|
|
% \begin{minipage}[c]{0.4\linewidth}
|
|
% \begin{figure}[H]
|
|
% \centering
|
|
%
|
|
% \tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
|
% draw, circle, inner sep=0pt, minimum size=4pt]
|
|
%
|
|
% \tdplotsetmaincoords{60}{245}
|
|
% \begin{tikzpicture}[scale=1, transform shape, tdplot_main_coords]
|
|
% % Cube
|
|
%
|
|
% \draw[dashed] (0, 0, 0) -- (2, 0, 0);
|
|
% \draw[dashed] (2, 0, 0) -- (2, 0, 2);
|
|
% \draw[] (2, 0, 2) -- (0, 0, 2);
|
|
% \draw[] (0, 0, 2) -- (0, 0, 0);
|
|
%
|
|
% \draw[] (0, 2, 0) -- (2, 2, 0);
|
|
% \draw[] (2, 2, 0) -- (2, 2, 2);
|
|
% \draw[] (2, 2, 2) -- (0, 2, 2);
|
|
% \draw[] (0, 2, 2) -- (0, 2, 0);
|
|
%
|
|
% \draw[] (0, 0, 0) -- (0, 2, 0);
|
|
% \draw[dashed] (2, 0, 0) -- (2, 2, 0);
|
|
% \draw[] (2, 0, 2) -- (2, 2, 2);
|
|
% \draw[] (0, 0, 2) -- (0, 2, 2);
|
|
%
|
|
% % Codeword Polytope
|
|
%
|
|
% \draw[line width=1pt, color=KITblue] (0, 0, 0) -- (2, 0, 2);
|
|
% \draw[line width=1pt, color=KITblue] (0, 0, 0) -- (2, 2, 0);
|
|
% \draw[line width=1pt, color=KITblue] (0, 0, 0) -- (0, 2, 2);
|
|
%
|
|
% \draw[line width=1pt, color=KITblue] (2, 0, 2) -- (2, 2, 0);
|
|
% \draw[line width=1pt, color=KITblue] (2, 0, 2) -- (0, 2, 2);
|
|
%
|
|
% \draw[line width=1pt, color=KITblue] (0, 2, 2) -- (2, 2, 0);
|
|
%
|
|
% % Polytope Annotations
|
|
%
|
|
% \node[codeword, color=KITred] (c111) at (2, 2, 2) {};% {$\left( 0, 0, 0 \right) $};
|
|
% \node[codeword, color=KITred] (c001) at (0, 0, 2) {};% {$\left( 1, 0, 1 \right) $};
|
|
% \node[codeword, color=KITred] (c100) at (2, 0, 0) {};% {$\left( 1, 1, 0 \right) $};
|
|
% \node[codeword, color=KITred] (c010) at (0, 2, 0) {};% {$\left( 0, 1, 1 \right) $};
|
|
%
|
|
% \node[color=KITred, left=0cm of c111] {$\left( 1, 1, 1 \right) $};
|
|
% \node[color=KITred, right=0cm of c001] {$\left( 0, 0, 1 \right) $};
|
|
% \node[color=KITred, right=0.35cm of c100] {$\left( 1, 0, 0 \right) $};
|
|
% \node[color=KITred, below=0cm of c010] {$\left( 0, 1, 0 \right) $};
|
|
% \end{tikzpicture}
|
|
% \caption{Relaxed polytope for $n=3$}
|
|
% \end{figure}
|
|
% \end{minipage}
|
|
% \todo{How is this a relaxation and not just an alternative formulation?
|
|
% We have just switched out valid codewords for invalid ones}
|
|
% \todo{Is LP Relaxation relevant as theoretical background?}
|
|
%\end{frame}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%\subsection{ADMM}%
|
|
%\label{sub:Alg ADMM}
|
|
%
|
|
%\begin{frame}[t]
|
|
% \frametitle{ADMM Decoding: General Idea}
|
|
%
|
|
% \todo{TODO}
|
|
%\end{frame}
|
|
%
|
|
%
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%\begin{frame}[t]
|
|
% \frametitle{ADMM Decoding: Algorithm}
|
|
%
|
|
% \todo{TODO}
|
|
%\end{frame}
|
|
|