We held a reading group on Transformers (watched videos / read blog posts / studied papers by @giffmana@karpathy@ch402@amaarora@JayAlammar@srush_nlp et al.), and now I _finally_ roughly understand what attention does.
Here is my take on it. A summary thread. 1/n
Consider BERT/GPT setting.
We have a text string, split into tokens (<=512). Each token gets a 768-dim vector. So we have a 2D matrix X of arbitrary width. We want to set up a feed-forward layer that would somehow transform X, keeping its shape.
How can this be set up? 2/n
Fully-connected layer does not work: it cannot take input of variable length (and would have too many params anyway).
Only acting on the embedding dimension would process each token separately, which is clearly not sufficient.
How can we make the tokens interact? 3/n
Here is the CORE TRICK:
X @ X.T @ X has the same shape as X, and all tokens get to interact with all other tokens (via scalar products in X.T @ X). Neat!
f(x) = X @ X.T @ X is _almost_ a self-attention layer, but this f(x) has no trainable parameters.
Can we add some? 4/n
Easy: we multiply each X in X @ X.T @ X with 768x768 weight matrices. They are called values, keys, and queries.
But conceptually, values can be folded into MLP later on, and keys are redundant given queries. We basically need only 1 matrix (KQ) that defines inner product. 5/n
This forms "affinities" between all pairs of tokens which are normalized using softmax. We got the attention matrix!!
Then tokens are added up with attention weights.
The interpretation is that this allows each token affect each other token based on the affinity they feel. 6/n
Transformer architecture interleaves attention layers with MLP layers.
An MLP layer (with 1 hidden layer) processes each token separately. Each token is processed using the same identical weights, so it's like a 1-convolution. 7/n
Putting it together, our X goes through self-attention (3 * 768^2 params) and then through MLP (8 * 768^2 params), all wrapped by skip connections.
One such block has ~7M params.
BERT-base stacks 12 blocks, giving ~85M params. (Plus another 25M for initial token encoding.) 8/n
BERT and GPT use identical architecture and identical loss: they mask some input tokens and let the model predict them.
BERT masks random tokens.
GPT always masks *the last* token only.
This is what makes GPT good at generating texts: it's trained to always append a token. 9/n
What about Vision Transformers (ViTs)?
It's the same thing!
Images are split into 16x16 patches. Patches play the role of tokens. 224x224 image gives 196 patches of 768 dimensions. This can directly go into a BERT-like architecture + classifier softmax on top. 10/n
The Google team behind ViTs (@giffmana) later showed that one can replace all attention layers with "1-convolution" *horizontal* MLPs (each dimension processed separately). That's "MLP-Mixer".
Amazing that it works!
But with a big caveat: it requires a fixed input size :( 11/n
I think we have finally understood the *real* difference between t-SNE and UMAP. It involves NCE! [1/n]
In prior work, we (@jnboehm@CellTypist) showed that UMAP works like t-SNE with extra attraction. We argued that it is because UMAP relies on negative sampling, whereas t-SNE does not.
Because UMAP uses negative sampling, its effective loss function is very different from its stated loss function (cross-entropy). @jnboehm showed it via Barnes-Hut UMAP, while Sebastian and Fred did mathematical analysis in their NeurIPS 2021 paper proceedings.neurips.cc/paper/2021/has… [3/n]
My paper on Poisson underdispersion in reported Covid-19 cases & deaths is out in @signmagazine. The claim is that underdispersion is a HUGE RED FLAG and suggests misreporting.
What is "underdispersion"? Here is an example. Russia reported the following number of Covid deaths during the first week of September 2021: 792, 795, 790, 798, 799, 796, 793.
Mean: 795. Variance: 11. For Poisson random data, mean=variance. So this is *underdispersed*. /2
For comparison, during the same week US reported 1461, 1185, 1202, 1795, 2010, 2003, 1942 deaths. Mean: 1657. Variance: 135470. So this is *overdispersed*.
Overdispersion is not surprising: day-of-week reporting fluctuations, epidemic growth, etc.
So what's up with the Russian election two weeks ago? Was there fraud?
Of course there was fraud. Widespread ballot stuffing was videotaped etc., but we can also prove fraud using statistics.
See these *integer peaks* in the histograms of the polling station results? 🕵️♂️ [1/n]
These peaks are formed by polling stations that report integer turnout percentage or United Russia percentage. E.g. 1492 ballots cast at a station with 1755 registered voters. 1492/1755 = 85.0%. Important: 1492 is not a suspicious number! It's 85.0% which is suspicious. [2/n]
We can use binomial Monte Carlo simulation to find how many polling stations with integer percentages there should be by chance. Then we can compute the number of EXCESS integer polling stations (roughly the summed heights of all INTEGER PEAKS).
Chari et al. (@lpachter) have updated their preprint and doubled down on their claim that an 🐘-looking embedding, a random (!) embedding, and 2D PCA, all preserve data structure "similar or better" than t-SNE.
They literally say: "Picasso can quantitatively represent [local and global properties] similarly to, or better, than the respective t-SNE/UMAP embeddings".
In my thread below I argued it's a non-sequitur from Fig 2, due to insufficient metrics. [2/n]
I argued that they should also consider metrics like kNN recall or kNN classification accuracy, where t-SNE would fare much better than these other methods.
I thought it should be obvious from this figure (using MNIST). But now @lpachter says it's a "mirage".
I am late to the party (was on holidays), but have now read @lpachter's "Specious Art" paper as well as ~300 quote tweets/threads, played with the code, and can add my two cents.
Spoiler: I disagree with their conclusions. Some claims re t-SNE/UMAP are misleading. Thread. 🐘
The paper has several parts and I have too many comments for a twitter thread, so here I will only focus on the core of the authors' argument against t-SNE/UMAP, namely Figures 2 and 3. We can discuss the rest some other time. [2/n]
In this part, Chari et al. claim that:
* t-SNE/UMAP preserve global and local structure very poorly;
* Purposefully silly embedding that looks like an elephant performs as well or even better;
* Even *untrained* neural network performs around as well.
PHATE finds the same 4/7/9 and 8/5/3 mega-clusters that are also emphasized by UMAP, but fails to separate some of the digits within mega-clusters, e.g. green & red (3 and 5) overlap a lot.
IMHO that's a clearly worse performance than t-SNE or UMAP. [2/7]
Of course PHATE was designed for continuous data and that's where it's supposed to shine. But the original paper and tweets like this one and the one above make it look as if it hands-down outperforms t-SNE/UMAP for clustered data.