Viet-Anh on Software Logo

What is: Affine Coupling?

SourceNICE: Non-linear Independent Components Estimation
Year2000
Data SourceCC BY-SA - https://paperswithcode.com

Affine Coupling is a method for implementing a normalizing flow (where we stack a sequence of invertible bijective transformation functions). Affine coupling is one of these bijective transformation functions. Specifically, it is an example of a reversible transformation where the forward function, the reverse function and the log-determinant are computationally efficient. For the forward function, we split the input dimension into two parts:

x_a,x_b=split(x)\mathbf{x}\_{a}, \mathbf{x}\_{b} = \text{split}\left(\mathbf{x}\right)

The second part stays the same x_b=y_b\mathbf{x}\_{b} = \mathbf{y}\_{b}, while the first part x_a\mathbf{x}\_{a} undergoes an affine transformation, where the parameters for this transformation are learnt using the second part x_b\mathbf{x}\_{b} being put through a neural network. Together we have:

(logs,t)=NN(x_b)\left(\log{\mathbf{s}, \mathbf{t}}\right) = \text{NN}\left(\mathbf{x}\_{b}\right)

s=exp(logs)\mathbf{s} = \exp\left(\log{\mathbf{s}}\right)

y_a=sx_a+t\mathbf{y}\_{a} = \mathbf{s} \odot \mathbf{x}\_{a} + \mathbf{t}

y_b=x_b\mathbf{y}\_{b} = \mathbf{x}\_{b}

y=concat(y_a,y_b)\mathbf{y} = \text{concat}\left(\mathbf{y}\_{a}, \mathbf{y}\_{b}\right)

Image: GLOW