Deep learning and neural networksLoading progress…

Attention as a bridge

Trace a recurrent state and explain memory loss, gating, sequence-to-sequence models and attention.

Let each step look back at all of the input

A plain encoder-decoder squeezes the whole input into one fixed-size vector. For long inputs that is a bottleneck: 12 words of 8 numbers each cannot all survive in 8 numbers. Attention removes it. The decoder keeps all encoder states and, at every step, computes a weighted average of them, with weights that depend on what it needs right now.

  1. Score each position: the dot product of the decoder's query with that position's key.
  2. Turn scores into weights with softmax (they sum to 1).
  3. The context is the weighted sum of the values.
positionkeyscore = key · qweight
the[1, 0]20.468
cat[0, 1]00.063
sat[1, 1]20.468
q[0]2q[1]0
weights = softmax(scores) (they sum to 1) context = Σ weight_i · value_i
Three positions with 2-number keys. Change the query to point at different words, and try the mask.

Predict first. Must a decoder attend only to the last encoder state?

The transformer chapters later compute these scores at scale, with scaling and many heads; here they are plain dot products.

Chapter context

A sequence model processes ordered observations. A recurrent state summarizes previous inputs, creating both a mechanism for memory and a long differentiation path whose sensitivity can decay or grow.

Chapter reference: math, worked example & code

This section belongs to the whole chapter, so it is the same on every lesson in it and may cover a different lesson's topic. The code for the experiment you just ran is inside the experiment itself.

Math and notation

A simple recurrence is ht=ϕ(Whht−1+Wxxt+b)h_t=\phi(W_hh_{t-1}+W_xx_t+b). In a scalar linear example ht=aht−1+xth_t=a h_{t-1}+x_t, sensitivity to the initial state is

∂hT∂h0=aT.\frac{\partial h_T}{\partial h_0}=a^T.

This illustrates gradient decay or growth; nonlinear multidimensional RNNs have Jacobian products instead.

Worked example

Set a=0.5 and h0=0. Input [1,0,0] produces states [1,0.5,0.25]. The initial impulse is still present but attenuated. Over ten subsequent multiplicative transitions, its factor is 0.5^10=0.0009765625.

Reference code

The following example uses the Python standard library and does not call a remote service.

state, states = 0.,[]
for x in [1,0,0]:
    state=.5*state+x
    states.append(state)
assert states == [1,.5,.25]
assert .5**10 == .0009765625

Python examples are provided for study and local execution; this page does not execute Python.

Common mistakes

A recurrent model shares weights through time. Longer hidden vectors do not automatically prevent gradient decay. Training history and generated inference history can differ.