Rendered at 01:08:29 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
MCP123 4 hours ago [-]
This is great, thank you. I have to teach this stuff on Friday so perfect timing. It's hard to explain the attention mechanism in a way that becomes intuitive because the weighting scheme does not help much with the intuition. Having a visualization like this helps a lot. Don't move that page please since I'll link to it!
fuddle 6 hours ago [-]
This is great, I've read multiple books and watched videos about the attention mechanism. Now that I understand it, this is the clearest example I've seen on how attention works.
wopak 6 hours ago [-]
neat, combining info from two phrases is hard to see without such a tool.
are you worried later-layer attention gets drowned out by earlier layers just because there are more of them contributing to the sum?
ifz 6 hours ago [-]
Hmm, I might try to add some controls to limit which layers get summed up. It might be able to reveal more patterns.
Right now only simple correlations are visible.
sva_ 7 hours ago [-]
I highly question this simplistic idea of high vector magnitude = high influence.
I don't disagree with that. I did add an entire caveat paragraph there.
To me, it's more of a neat visualization, not something that can be used to interpret LLM behavior. Even with a lot of simplification, it can show some interesting patterns.
apnabhidu47 6 hours ago [-]
Same I dont get it just, could you clarify it
itsnasme 7 hours ago [-]
I like the visualisation. Pretty cool
fermlon30000 2 hours ago [-]
INSANE
ex-aws-dude 5 hours ago [-]
I don't know much about LLMs but does that mean you have N^2 computation with the context size since every token needs to track how it relates to every other token?
acedTrex 5 hours ago [-]
For full self attention yes
5 hours ago [-]
TomatoCo 5 hours ago [-]
Yes, except no with the KV cache. Because tokens aren't modified by future tokens you can cache the meaning of previous tokens. This makes the total effort linear over the entire context (or constant per forward pass).
libraryofbabel 4 hours ago [-]
> This makes the total effort linear over the entire context (or constant per forward pass).
This is incorrect. The compute required per forward pass to generate each additional token during decode will scales as O(N), even with a KV cache (without a KV cache, it would scale as O(N^2)). Over generating N tokens, it's O(N^2) with the cache (and O(N^3) without).
It's O(N) for a forward pass because that new token still has to "attend to" to each previous token. That requires N dot products: between the cached key vectors and the new query vector for the new position. You also have N reads from memory (K and V) which is probably gonna be your actual bottleneck. (Decode is memory-bound.)
This is why you should avoid long contexts, if you can, even with a warm cache. You will get charged more, in "cache read" tokens.
ex-aws-dude 4 hours ago [-]
I see and is there only 1 layer of relations?
Or does it accumulate the relations like A relates to B, so also add in B's relations
stared 6 hours ago [-]
I am curious what's the actual formula.
I mean, there so many headers and layers, it is tricky to make a choice that will resonate with our intuition . Is it some weighted average? Or maybe ablation test?
ifz 6 hours ago [-]
It's really simple, basically just the magnitude of the value vector, weighted by QK dot product, summed across all attention heads and layers.
When I started, I expected I'd have to experiment a lot to find something comprehensible. But this simple computation can already show some patterns.
stared 6 hours ago [-]
Nice! Sometimes the simplest approaches work the best.
visarga 6 hours ago [-]
If you want quick access look at google images for "transformer attention formula" there are some interesting depictions
are you worried later-layer attention gets drowned out by earlier layers just because there are more of them contributing to the sum?
Right now only simple correlations are visible.
To me, it's more of a neat visualization, not something that can be used to interpret LLM behavior. Even with a lot of simplification, it can show some interesting patterns.
This is incorrect. The compute required per forward pass to generate each additional token during decode will scales as O(N), even with a KV cache (without a KV cache, it would scale as O(N^2)). Over generating N tokens, it's O(N^2) with the cache (and O(N^3) without).
It's O(N) for a forward pass because that new token still has to "attend to" to each previous token. That requires N dot products: between the cached key vectors and the new query vector for the new position. You also have N reads from memory (K and V) which is probably gonna be your actual bottleneck. (Decode is memory-bound.)
This is why you should avoid long contexts, if you can, even with a warm cache. You will get charged more, in "cache read" tokens.
Or does it accumulate the relations like A relates to B, so also add in B's relations
I mean, there so many headers and layers, it is tricky to make a choice that will resonate with our intuition . Is it some weighted average? Or maybe ablation test?
When I started, I expected I'd have to experiment a lot to find something comprehensible. But this simple computation can already show some patterns.