GPT 战无不胜的法宝是什么
一开始, 我以为 BERT 和 GPT 是旗鼓相当的对手, 甚至 BERT 对信息的利用效率更高一些.
这种想法一直持续到 ChatGPT 出现.
为什么 GPT 这种 decoder only 的模型结构要更优, 存在着各种假说.
有学者尝试对 attention matrix 进行低秩分解, 来验证模型的表达能力.
本位主要从低秩的角度, 试着呈现大家对 decoder only 成功的原因做一些探讨.
Prerequest
有一些你应该知道的前置知识
知识点 | 推荐阅读 |
---|---|
线性空间的维度 | 矩阵理论-线性变换 |
transformer 的基本结构 | 超详细图解Self-Attention |
BERT vs. GPT
简单来说, BERT 和 GPT 各取了 Transformer 的编码、解码器。
他们的主要区别在于, BERT 用的是 Multi-head Attention 而 GPT 用的是 Masked Multi-head Attention.
对于 GPT 来说, 下一个词组仅能用前面已经预测出来的词组去组成.
如果对于这方面的区别有疑问, 可以参看 Multi-head-attention 的作用到底是什么.
要是读完成还是没懂, 可以看产品经理写的 关于ChatGPT:GPT和BERT的差别(易懂版)
decoder only 的胜出
首先跟 transformer 本身的优秀有关, 观察深度学习模型的重大变革, 可以发现大多数改进都是为了使得模型具有更大的参数量.
然而, 参数量增加使得模型能力增强之后, 也容易带来过拟合的问题.
在 transformer 出现之前, 大家并不认为模型越大越好, 普遍的时间经验是超过一定参数量之后, 大模型的能力会退化.
但是今天这个问题似乎不存在了, ChatGPT 的参数量达到了惊人的 175B, 并且泛化性相当好。
那么 transformer 的优秀之处在哪, 为什么它某种程度上解决了模型坍缩的问题.
此外, 为什么 OpenAI 采用的 Decoder Only 结构似比 谷歌T5 这样的 Encoder-Decoder 有优势, 本文进行一些不严格的分析。
文章结构如下
- 介绍前置知识, 低秩矩阵
- transformer 不退化的关键在于跳跃连接
- decoder only 的注意力矩阵满秩
0. 低秩矩阵的表达能力
我们从低秩矩阵说起.
对于空间 $X \in R^{n\times m}$, 我们用矩阵 $A\in R^{n\times n}$ 将其映射到像空间 $Y\in R^{n\times m}$ 中.
假设空间 $X$ 的维度是 $n$, 那么矩阵 $A$ 的表达能力由 $A$ 的秩 $rank(A)$ 决定.
例如 $rank(A) = 1$, $A = \begin{pmatrix} 1^T \ 1^T \ \vdots \ 1^T \\end{pmatrix}$, 那么 $rank(Y) = 1$
深度神经网络起到的作用和矩阵 $A$ 很类似, 要想具有强大的表达能力, 必须也要防止神经网络退化成一个只能表示简单变换的矩阵.
1. 跳跃连接是关键
这一发现来源于论文 Attention is NOT All You Need.
作者研究发现, 对于 SAN(Self Attention Network) 来说, Skip Connection 和 MLP 很重要.
大家很早就意识到了 skip connection 的重要性, 但是以为 skip connection 的作用主要是 facilitating optimization and gradient flow.
也有人意识到了跳跃连接对模型训练的帮助, 例如博客 Multi-head-attention 的作用到底是什么 中提到
全等变换是深度学习模型不容易学会的, 因此引入跳跃连接能够更好地帮助学习。
但是作者从数学的角度刻画 skip connection 防止了模型退化为秩为 1 的矩阵。
1.1 路径分解
为了方便说明, 先引入路径分解(path decomposition) 来表示 SAN.
模型的输入为 $\mathbf{X} \in n\times d_{in}$, 其中 $n$ 为序列长度.
同时, SAN 含有 $L$ 层 multi-head self-attention layer, 每层有 $H$ 个头.
那么第 $h$ 个 attention 可以表示为
其中 $\mathbf{X} \in R^{d_{in} \times d_v}$, $\mathbf{P} \in R^{n\times n}$. 且 $\mathbf{P}$ 为 row-stochastic matrix(行和为 1).
▶ 计算过程
首先 $\text{softmax}$ 具有 shit-invariant 的性质, 根据其[定义](https://en.wikipedia.org/wiki/Softmax_function)不难得出 $$ \text{softmax}(\mathbf{x} + c) = \text{softmax}(\mathbf{x}) $$ 我们把 $\mathbf{P}_h$ 展开 $$ \begin{align*} \mathbf{P}_h &= \text{softmax} \bigg( d^{-\frac{1}{2}}_{qk} ( \mathbf{X}\mathbf{W}_{Q,h} + \mathbf{1b}^T_{Q,h} ) ( \mathbf{X}\mathbf{W}_{K,h} + \mathbf{1b}^T_{K,h} )^T \bigg) \\ &= \text{softmax} \bigg( d^{-\frac{1}{2}}_{qk} (\mathbf{X} \mathbf{W}_{QK,h} \mathbf{X}^T + \mathbf{1b}^T_{Q,h}\mathbf{W}^T_{K,h}\mathbf{X}^T + \mathbf{A} \mathbf{1}^T ) \bigg) \\ \end{align*} $$ 其中 $\mathbf{A} = (\mathbf{XW}_{Q,h} + \mathbf{1b}^T_{Q,h} ) \cdot \mathbf{b}_{K,h} \in R^{n\times d_{qk}}$ 我们要说明的是: $\mathbf{A} \mathbf{1}^T$ 行内元素都相等, 从而在 $\text{softmax}$ 的作用下可以忽略. 简单计算可以验证, 结论是对的. 因此最后 $\mathbf{P}_h$ 展开只留下前面的两项.根据第 $h$ 个 head 的输出结果 $\text{SA}_h(\mathbf{X})$, 我们综合考虑把每个 head 的结果沿着最后的维度拼接起来.
其中
我们把第 $L$ 层模型的输出表示为 $\mathbf{X}^L$, 那么初始输入 $\mathbf{X}^0 = \mathbf{X}$.
对于 $\mathbf{X}^L$ 可以进行一次展开
由于 $\mathbf{P}_h = \text{softmax}(\cdot)$ 是 row stochastic 矩阵, 也就是 $\mathbf{P}_h \mathbf{1} = \mathbf{1}$
我们可以得到
对于 $(3)$ 的第一项, 可以继续展开, 直到 $\mathbf{X}^0$.
对于 $(3)$ 的第二项, 它与输入 $\mathbf{X}$ 无关, 并且 $\mathbf{W}b$ 得到的仍然是一个相同大小的偏置.
从而, 我们可以把整个 $L$ 层模型的偏置一起写为 $\mathbb{1}\mathbf{b}^T$
Theorem 1 (Path Decomposition of SAN)
1.2 矩阵坍缩
得到我们想要的形式后, 我们开始说明为什么 naive 的 SAN 会收敛成低秩矩阵.
首先定义残差
当 $\text{res}(\mathbf{X}) \rightarrow 0$, 我们就证明了 SAN 已经退化为一个秩为 1 的矩阵.
证明思路
Step One, 引入 residual $\mathbf{R} = \text{res}(\mathbf{X})$ 来表示 $\mathbf{P}_h$.
记 $\text{res}(\mathbf{X}) = \mathbf{R}$, 则 $\mathbf{X} = \mathbf{1}\mathbf{x}^T + \mathbf{R}$.
那么 Attention Matrix
其中 $\mathbf{R} \mathbf{W}_{Q,K} \mathbf{x} \mathbf{1}^T$ 的行内元素都相等, 所以根据 $\text{softmax}$ 的 shit-invariant 性质可以忽略这一项. 第三项可以简写为 $\mathbf{1} \mathbf{r}^T$.
得到
记
则利用 Lemma 1 我们可以得
也就是说, 当 $\mathbf{E}$ 很小的时候, $\mathbf{P}_h$ 约等于 $\text{softmax}(\mathbf{1}\mathbf{r}^T)$, 秩几乎为 1.
Lemma 1 对于 $\mathbf{P}$ 为 row-stochastic 矩阵, $\tilde{\mathbf{A}} = \mathbf{A - E}$, $\mathbf{P} = \text{softmax}(\mathbf{A}), \tilde{\mathbf{P}} = \text{softmax}(\tilde{\mathbf{A}})$.
其中 $\mathbf{E}$ 是一个近乎于
但是我们真正需要的结论是 $\Vert \text{res}(\mathbf{P}_h\mathbf{X}) \Vert \leq 2\Vert \mathbf{D}\mathbf{1}\mathbf{q}^T \mathbf{R} \Vert$, 这样才能证明 $\text{SAN}_h(\mathbf{X})$ 的收敛性.
具体的证明细节可以看 Attention is Not All You Need: Pure Attention Loses Rank Doubly Exponentially with Depth 的附录 A.1 部分.
1.3 Skip Connection
刚才已经说明了 $\text{SAN}$ 随着 transformer layer 增加的退化, 但是显然在实际使用中我们没有遇到这个问题.
这主要是归功于模型中的 skip connection, 它的存在使得 $\text{res}(\mathbf{X})$ 不会迅速收敛为 $0$.
要想严格说明这一点, 我们应该为 $\text{res}(\mathbf{X})$ 找到一个下界. 但是这里只做简单说明
其中当 $h = 0$ 的时候 $\mathbf{P}_h = \mathbf{W}_h = \mathbf{I}$ 表示跳跃链接.
因此在所有的路径中, 必然有一条路能够跳过所有的 SAN, 也就是说模型可以至少保证 $\text{res}(\mathbf{X}) = \mathbf{X}$.
同时我们知道还有很多其他的路径, 因此存在一个几乎无限大的参数空间, 能够使得 $\text{res}(\mathbf{X}) \geq \mathbf{X}$.
2. Decoder Only 注意力矩阵满秩
上一章我们说了 skip connection 在 transformer 中的重要性. 但是 BERT, GPT 都是 transformer 的结构, 为什么 GPT 获得了更大的成功呢.
同样从低秩矩阵的角度, 我们给出这两者的对比分析.
分别用 $\mathbf{B}, \mathbf{G}$ 表示 BERT, GPT 的 Attention Matrix.
在经过 Attention Mask 的作用之后, $\mathbf{G}$ 是一个上三角矩阵.
根据 Attention Matrix 的计算方法, 我们知道 $b{ij}, g{ij} > 0$.
而 $\mathbf{G}$ 作为上三角矩阵, 其行列式等于对角线元素之积, 从而 $\det G > 0$.
根据矩阵的只是, 我们知道行列式大于 0 的矩阵是满秩的.
从而可以看出, decoder only 是如何保护 transformer 不向低秩矩阵坍缩的.
3. 两者等价
有一些人认为, Encoder-Decoder 和 Decoder-Only 的结构没有大家声称的那么不同, 他们在某种程度上其实是等价的.
总结
最近一年各种大模型飞速发展, 很多现象都找不到合理的解释, 低秩矩也许是一个不错的切入角度 —— 它对数学基础的要求不高, 因此也更容易被广泛接受.
但是应该知道, 深度学习尚未被系统理论正确解释, 如果有一天低秩矩阵的这种解释被质疑不合理, 我们也毫不意外.