Transformer is a clustering machines
2012 2015 2018 2019 2020 2022 2023
Alex Res GPT GPT2 GPT3 chatGPT GPT4
BERT Chinchilla Llama2
Claude2
ResNets
$x_0$ 可以是图片像素强度向量,经过多层网络后,学习到特征 $x_L$ (Learned representation),该特征相比于原始图像更利于图像分类。
\[x_0 \rightarrow x_1 \rightarrow \dots \rightarrow x_L\] \[L = \# layers\]将学习到的特征放入到传统的机器学习分类器(Classical ML step)中进行分类(例子为 logistic regression):
\[x_L \rightarrow y = \sigma (\beta^T x_L)\]在 2012 年以前,人们会将 $x_L$ 直接作为原始图片,放入到传统的分类器当中。
如果把神经网络看成一个整体,那么神经网络便是一个映射:
\[x_L = f_{\theta}(x_0)\]$\theta$ 是可训练的参数。$f_{\theta}$ 可以通过多个函数的嵌套组合来得到:
\[x_{k+1} = x_k + \sigma(W_k x_k + b_k),\ k = 0,\dots, L-1\]$W_k x_k + b_k$ 是仿射变换。$\sigma$ 是逐元素操作的非线性函数,例如 $\mathrm{max}(\cdot, 0)$。更详细一些,如果有一个向量 $x = [1,-2,3]$,应用 ReLU 函数($f(x) = \max(\cdot,0)$)则得到 $f(x) = [\max(0,1), \max(0,-2), \max(0,3)] = [1,0,3]$
这就是传统的前馈神经网络,也称为多层感知器。
Neural ODEs:
\[\begin{align} x_{k+1} &= x_k + \sigma(W_k x_k + b_k) \\ & \downarrow \mathrm{Continuous\ time}\\ \dot x(t) &= \sigma(W_t x(t) + b_t) \end{align}\]此时,我们得到一个关于 $x$ 的动态系统,因此可以用动态理论和控制理论进行分析。需要与神经网络中常提到的“训练的动态系统”作区分,训练的动态系统关心的是训练的过程中参数的演进,且只考虑一层(本文并不关注 参数 的动态系统):
\[\dot \theta (t) = - \nabla_{\theta} \sum_{i=1}^n (Y_i - f_{\theta(t)}(X_i))^2,\ \theta \in \mathbb{R}^N,\ N \rightarrow \infty\]NN 可以理解为一种流动映射(flow map, a NN is a compact representation of a funtion that can be represented as a flow map):
\[\mathrm{NN = Flow Map}\] \[f_{\theta}: x(0) \mapsto x(T); \mathbb{R}^d \to \mathbb{R}^d\]这似乎是在说,NN 不是直接参数化函数本身(有一个表格直接告诉你 f(x) 的值),而是参数化了某条曲线,它将会通过动力学告诉你如何从一个点到达另一个点。
Transformer
Prompt 可以是文本:
\[\begin{align} & \mathrm{\boxed{The}\ \boxed{quick}\ \boxed{bro}\boxed{wn}\ \boxed{fox}\ \boxed{jumps}\ \boxed{over}\ \boxed{the}\ \boxed{lazy}\ \boxed{dog}} \\ & \downarrow \hspace{6.5em} \mathrm{position + random map} \hspace{6.5em} \downarrow \\ & x_1 \hspace{10.5em} \cdots \hspace{11em} x_n \end{align}\]也可以是图片(整张图片被分割成多个图像块,每个图像块会被编码,附加上以某种顺序读取图片块的位置编码):
------- -------
| | | | |
| | ----> |-------|
| | | | |
------- -------
whole picture pitches
因为 tokens 已经作了位置编码,因此可以将输入视为一个集合,而不考虑顺序(e.g. $n=512,\ d=200$),之后将集合视为经验测量得到的概率分布:
\[\{x_1 \cdots x_n\} \in \mathbb{R}^d: \mathrm{tokens}\] \[\{x_1 \cdots x_n\} \iff \frac1n \sum_{i=1}^n \delta_{x_i}\]promp = input = probability measure on tokens (likehood of token being next)
output = probability measure on tokens (empirical dist. of tokens in prompt)
输入给 transformer 的是关于 tokens 的概率测量。而输出则是给定这个句子(经验分布)后下一个 token 的似然概率分布。
虽然输入和输出中的 probability 含义不同,但在数学上看是相同的,或者说是属于同一个集合内的,因此可以套用 ResNet 中 Map flow 的概念。
\[\mathrm{Transformer = Flow map}\] \[f_{\theta}: \mu(0) \mapsto \mu(T); \mathcal{P}(\mathbb{R}^d) \to \mathcal{P}(\mathbb{R}^d)\]其中,$\mathcal{P}(\mathbb{R}^d)$ 是指 $\mathbb{R}^d$ 上的概率分布的空间/集合。
此时,我们可以给出 $\mu(0)$:
\[\mu(0) = \frac1n \sum_{i=1}^n \delta_{x_i}\]那么动力学方程应该是什么呢?我们该如何移动给出的概率分布呢?
\[\partial_t \mu(t) = ?\]我们可以通过移动点的位置来改变概率分布。而对于 Transformer,它实际上是在实现一个在平均场下的相互作用粒子系统(Mean-Field interacting particle system):
\[\dot x_i(t) = X_t [ \mu(t) ](x_i(t)),\ i = 1,\cdots, n\]在此,粒子是 token,它的速度由向量场 $X_t$决定,而向量场受粒子的位置 $x_i(t)$ 以及当前时刻所有粒子/tokens 的分布(以一种整体的方式)。
知道了每个粒子(token)如何移动后,我们想知道分布 $\mu(t)$ 如何移动?
Mean-Field interacting particle siystem => Continuity equation
\[\dot x_i(t) = X_t [ \mu(t) ](x_i(t))\] \[\Downarrow\] \[\partial_t \mu(t) + \mathrm{div} (\mu(t)X_t[\mu(t)]) = 0\]Self-attention dynamics
Self-attention dynamics = Spacial choice of $X_t [ \mu(t) ] (\cdot)$
\[X_t [\mu(t)](x) = V_t \frac{\int y e^{<Q_t x, K_t y>} \mu(t) (\mathrm{d}y)}{\int e^{<Q_t x, K_t y>} \mu(t) (\mathrm{d}y)} = V_t \mathbb{E}_{\hat{\mu_x}}[Y_t]\]因为
\[\mu(t) = \frac1n \sum_{i=q}^n \delta_{x_i(t)}\]把分布带入速度场,可得
\[X_t [\mu(t)](x_i(t)) = V_t \left( \sum_{j=1}^n P_{ij}(t) x_j(t) \right)\]其中,$P_{ij}(t)$ 是横向的随机矩阵
Layer Normalization
LayerNorm (prevent explosion)
\[\dot{x_i}(t) = \mathrm{Proj}_{\tau_{x_i(t)}S^{d-1}} V_t \left( \sum_{j=1}^n P_{ij}(t) x_j(t) \right)\]