\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}} \vspace*{-0.3cm} \begin{itemize} \item MAP rule: \begin{align*} \hat{\boldsymbol{x}} &= \argmax_{x\in\mathbb{R}^n} f_{\boldsymbol{Y}}\left( \boldsymbol{y} | \boldsymbol{x} \right) f_{\boldsymbol{X}}\left( \boldsymbol{x} \right)\\ &= \argmax_{x\in\mathbb{R}^n} e^{-L\left( \boldsymbol{y} | \boldsymbol{x}\right)} f_{\boldsymbol{X}}\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*} \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_{\boldsymbol{c} \in \mathcal{C}\left( \boldsymbol{H} \right) } \delta\left( \boldsymbol{x} - \left( -1 \right)^{\boldsymbol{c}} \right) \approx \frac{1}{Z} e^{-\gamma h\left( \boldsymbol{x} \right) } \end{align*} \item Code constraint polynomial: \begin{minipage}[c]{0.56\textwidth} \raggedright \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}}, \end{align*} \end{minipage}% \begin{minipage}[c]{0.4\textwidth} \raggedleft \begin{flalign*} \mathcal{I} &\equiv \left[1\text{ : }n\right],\hspace{2mm} \mathcal{J} \equiv \left[1\text{ : }m\right] \\ \mathcal{A}\left( i \right) &\equiv \left\{j | j\in \mathcal{J}, \boldsymbol{H}_{j,i} = 1 \right\}, i \in \mathcal{I}\\ \end{flalign*} \end{minipage} \hfill \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) \end{align*} \note{Notational difference between $f$ and $f_X$ or $f_Y$} \item Proximal operator \cite{proximal_algorithms}: \begin{align*} \text{prox}_{\gamma h} \left( \boldsymbol{x} \right) &\equiv \argmin_{\boldsymbol{t}\in\mathbb{R}^n} \left( \gamma h\left( \boldsymbol{t} \right) + \frac{1}{2} \lVert \boldsymbol{t} - \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{9mm} \gamma > 0 \hspace{10mm} \text{``Code proximal step''} \end{align*} \end{itemize} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[t, fragile] \frametitle{Proximal Decoding: Algorithm} \begin{itemize} \item 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}$ do return $\boldsymbol{\hat{c}}$ end if 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}_{\ge 0} \end{align*} \item Cost function: \begin{align*} \sum_{i=1}^{n} \gamma_i c_i, \hspace{5mm}\gamma_i = \ln\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}