outputs $x$ are treated more on an equal footing than they are in SGD training, where changes to the neuron outputs appear only implicitly in the backpropagation computations. From each neuron’s perspective, changes to $w$ are forward-looking (striving to fix things in higher layers), while changes to $x$ do the opposite (backward-looking, forcing changes in lower layers).

The need for consensus constraints becomes clear when we want to be able to project to the input constraints independently for each neuron and each data instantiation of the network. A more explicit rewriting of that makes this possible is $$\label{neuronin}
\forall\; k,j\colon \sum_i x[k,i\to j]\;w[k,i\to j]=y[k,j],$$ where $k$ is a data index (network instantiation), $j$ labels the receiving neuron, and the sum is over neurons $i$ whose outputs $x[k,i\to j]$ are incident on $j$. Clearly a neuron $i$ should not be allowed to take different values depending on which neuron $j$ is receiving its value. To insure that this does not happen we impose the following consensus constraints: $$\label{consensx}
\forall\; k,i,j\colon x[k,i\to j]=x_A[k,i].$$ Here $x_A[k,i]$ is the consensus value and the subscript indicates it is associated with the set $A$. Similarly, because the weight on edge $i\to j$ should not be allowed 