holy shit \(48\) wow wow yes \(8\)
\begin{equation} \frac{12}{3} - \int_{i}^{j} 8 \end{equation}
thta’s crazy.
The simplest channel-specific baseline I’d recommend is an input-gated residual belief update:
\[ q=\operatorname{LN}_x(x) \]
\begin{equation} c=\operatorname{LN}_s(s),\qquad s= \begin{cases} e_{\text{boundary}} & \text{first pass}\\ x_{\text{loop}} & \text{later passes} \end{cases} \end{equation}
\[ g=\tanh(\theta),\qquad \theta\in\mathbb{R}^{d},\quad\theta_0=0 \]
\[ q_{\text{updated}}=q+g\odot c \]
\[ x\leftarrow x+\operatorname{Attn}(q_{\text{updated}}) \]
Then keep the ordinary MLP update unchanged.
This is essentially the input-gate portion of an LSTM:
- \(q\) is retained completely—implicit forget gate equals one.
- \(c\) is the candidate evidence.
- \(g\) determines, channel by channel, how much evidence enters the attention belief.
- The same \(g\) is reused across every loop, so training can learn which channels should accept recurrent context.
- At initialization \(g=0\), making it exactly the ordinary Transformer attention read.
- It adds only \(d\) gate parameters, plus the independent side LayerNorm already needed to center \(s\).
I would use LayerNorm—not RMSNorm—for \(c\), given the mean-drift evidence. I would also omit an outer normalization after the addition: an outer LN would globally remix/rescale the supposedly channel-local gated perturbation.
The slightly more “belief update” version is:
\[ q_{\text{updated}}
q+g\odot(c-q) \]
That interprets \(c\) as a proposed replacement belief rather than additive evidence. I like it conceptually, but it introduces an implicit per-channel forget operation on \(q\). For the first baseline, \(q+g\odot c\) is cleaner and safer: the lexicalized read is always preserved, and the recurrent pathway can only enrich it.
The main limitation is that \(g\) is static rather than token-dependent. That is appropriate for the simplest baseline. If it works, a later GRU-like content-dependent gate can be tested without conflating the core idea with another projection network.
\[ \left.\frac{\partial g}{\partial\theta}\right|_{\theta=0} =1 \]
so gate gradients flow maximally.
For:
\[ q’=q+\tanh(\theta)\odot c \]
the gate gradient is:
\[ \frac{\partial\mathcal L}{\partial\theta_j}
\frac{\partial\mathcal L}{\partial q’_j} \,c_j \]
at initialization. This is generally nonzero because \(c=\operatorname{LN}(s)\) is nonzero.
The distinction is:
- `sigmoid(0) = 0.5`: halfway open.
- `tanh(0) = 0`: completely closed, with full derivative.
- A raw gate \(g=\theta\) also works at zero but is unbounded.
- `tanh` gives us exact no-op initialization and bounds the eventual gate to \([-1,1]\).
The side branch itself receives no gradient through this connection on the very first update:
\[ \frac{\partial\mathcal L}{\partial c}
\tanh(\theta)\odot \frac{\partial\mathcal L}{\partial q’} =0 \]
But after the optimizer moves \(\theta\) away from zero, side-branch gradients begin flowing. That one-step delay is harmless.
The actual deadlock to avoid is zero-initializing both the gate and the candidate:
\[ q’=q+\tanh(\theta)\odot Wc,\qquad \theta_0=0,\ W_0=0 \]
Then neither \(\theta\) nor \(W\) receives a useful gradient. We should keep the candidate nonzero: ordinary LayerNorm initialization, no zero-initialized projection.
This is also the stability device used by T²MLR: its recurrent contribution is multiplied by a zero-initialized `tanh(γ_rec)`, giving an initial no-op while retaining gate gradient. T²MLR, §2.3
So my recommendation is unequivocally:
\[ \boxed{\theta_0=0,\quad g=\tanh(\theta)} \]
not a sigmoid gate and not an initially open gate.
