极市导读
无损压缩的基本原理和具体实现以及对于 AI 未来发展的猜想。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
最近在研究 OpenAI 发现,他们其实做的只是机器学习的第一原理,也是机器学习的终局:优化对于未来观察的无损传输的压缩大小。进一步分析后发现,这个理论非常 powerful,因为仅仅如此,便能通向超过人类的智能 (Super-human Intelligence)。本文会介绍无损压缩的基本原理和具体实现以及对于 AI 未来发展的猜想。
在和小伙伴一起研究的过程中,引出一些有意思的讨论。虽然由于篇幅限制不会特别深入,但希望能引起大家的兴趣。讲无损压缩的部分为了保持 self-contained 的阅读体验,正文里尽量没有引用资料;参考文献会在最后一起给出。对模型训练的无损压缩解释有了解的同学,也可以直接跳到后面的章节开始阅读。本文不是为了创造新的理论、追求 novelty 等目标而写,只是为了尽自己努力去理解观察到的现象。当然同样的现象也可以用其他的理论来解释,也欢迎大家讨论,找到不同理论之间的联系。
本章假设读者理解 GPT 的基本原理。出现的对数函数 log 均以 2 为底。
假设 Alice 希望把一个 (可能无限长) 的数据集 无损地传送给 Bob。不失一般性,我们假设
这样传输一个大小为 的数据集 的代价 为
baseline 方法对于 的分布没有先验知识, 故 是一个离散均匀分布。此时其自信息(https://en.wikipedia.org/wiki/Information_content) 为
故此时 也可以看作是 的自信息。
我们考虑利用一个 Auto-Regressive 神经网络如何进行压缩。具体的,我们考虑这样一个过程:
每次查找的动作都会有两种结果:向左或向右。
由此我们实现了 Alice 将 根据 Alice 和 Bob 共同知道的概率分布编码为 传输给 Bob, 并且 Bob 根据同样的概率分布将其解码回 的无损压缩传输过程。我们对比 baseline 方法可以发现, 本来要传 8-bit, 现在只用传 3-bit, 传输的数据量有了显著降低。
整个过程每步都很严格, 我们将一个参考的实现放在了这里(https://github.com/zxytim/arithmetic-encoding-compression)。这个简单的 proof-of-concept 的实现里, 当 codebook size 时, 最高能达到 的压缩率。
既然刚才我们讨论了一个看起来能利用已知概率分布降低传输量的方法,那么我们自然想知道,如何计算所需要的比特数?由于二分查找的可能提前结束,期望意义上的查询次数证明 在这里:https://hackmd.io/%40Q83Jd7TeRUm0NanRCOpsFg/SJJnSfBWh,也有比较简单的解释:https://bigeagle.me/2023/03/llm-is-compression/。由于我们希望最小化传输量,那么优化传输量的上界,即 “最多查询次数” 也是殊途同归的。
由此我们计算一下这样二分查找的上界, 这里提供一个直观的思路。我们接着用刚才 的例子: 将 的区间均匀铺满整个 的区间, 假设 , 那么会分成 个区间, 那么大约要查询 次。忽略各种取整误差, 可以知道最大二分查询的次数 。
实际上,查询次数的上界为
由此可知传输数据集 的代价
进一步观察,我们发现 其实就是训练时 这个 token 的 loss。所以我们可以进而发现, 这一项其实就是训练曲线下方的面积:(实际实现中差个常数 , 因为 torch.nn. functional.cross_entropy 算的其实是 , 这里为了理解就省去了)
从而压缩率
假设训练稳定, loss 平滑下降收敛 , 那么当数据集 无限长时, 压缩率
时压缩率为 0 是为什么?
Auto Regressive 模型的 训练过程 是在 显式的对数据集进行无损压缩
weights 并不是对数据集的压缩表示
大部份人会先验地认为 “训练是把数据压缩到了神经网络的 weights 中”。ChatGPT Is a Blurry JPEG of the Web(https://www.newyorker.com/tech/annals-of-technology/chatgpt-is-a-blurry-jpeg-of-the-web) 里虽然提到了无损压缩的 Hutter Prize(https://prize.hutter1.net/), 但因为 没有被存下来,而被看做了 lossy compression。
进一步,我认为 weights 并没有存下对数据集的压缩。
我们从一些例子入手,比如 OpenAI 提到的 Grokking(https://arxiv.org/abs/2201.02177) 现象
这里有趣的发现是,训练集上很快准确率到达 1,验证集上 "overfitting" 而一直学不会,直到 3 个量级以上的训练步数后,也慢慢会了,准确率趋近于 1。这里说 “overfitting” 是因为,按照传统统计机器学习的观点,随便一个 Transformer 的 VC dimension 都会非常大,在一个只有 5000 个样本的这么简单的训练集上训练几乎就是奔着 overfitting 去的。
如果 weights 在训练中随着 training loss 下降 仅仅 在更完美地记忆原始数据集,那么不应该能在 validation set 上能达到 1, 因为真的是一点 validation set 都没见过。
如果这个例子会有 “数据量太少” 的 concern,那么可以考虑类似的 “8 位数加法” 的问题,一共有 个样本,基本上不可能学习完。后面的实验表明是能学出来的。如果随便挑两个 8 位数作为 validation,那么也是几乎一定没有在训练集里出现过的。
那么 weights 既然不是对数据的压缩,那么到底存了什么呢?
weights 是对 “智能” 的表示
这句话有点民科的感觉 ,但其实想说的是,weights + transformer 计算了数据分布中可解释的部分(后面会展开)。
另外一个角度,“智能” 其实是消耗能源用 Transformer + SGD 做压缩后的副产品(by-product)
我们继续考虑 8 位数加法的例子,数据是均匀随机生成的,每字符就是一个 token (没有 bpe),并且沿用 auto regressive 的方式来训练。这其实就是一个常见的 GPT 训练的子集。比如我们考虑下面这个例子用来做训练好的模型的验证
当训练完全收敛时,对于这个序列的 loss 应该会长下面这样
因为前面两个数字的每一位都是从 0~9 均匀随机的,所以其实模型对此无法准确预测,进而只能等概率预测是 0~9 是个数字中的某一个,故 loss
“+”,“=”,以及最后的答案都是确定性可以预测的,所以 loss = 0
聪明的你应该发现了,这其实就对应这个分布的 aleatoric uncertainty 和 epistemic uncertainty。这个例子里:
选择某一个被加数里的数字是不可学习的 aleatoric uncertainty
"+"、"="、8位数字的答案、以及从无先验的每个字符 的概率变到 0~9 每个字符 的概率的信息差,是可学习的 epistemic uncertainty。而这一部分,就是我们要学习的 “智能”。
自然,前文提到的 其实就是 ,即只剩下了不可解释的随机部分。
这里(https://github.com/yulundu/compression) 是一个使用 mingpt 的参考实现, 训练的结果(wandb) 如下:
实际实现中
字符集为 0-9,s,e,+,= 共 14 个字符
序列长度为 1(s开始符)+ 8(数字a) + 1(+号) + 8(数字b)+ 1(等号)+ 9(答案)+ 1(e结束符) = 29
training 比 validation 还差且 accuracy 没有到底是因为没注意到 mingpt 里训练 默认带 0.1 的 dropout
loss 的收敛点大约是 1.31 左右,我们计算 "理论最低" 也是可以 match 上观察的。其中
对数据进行最高效的压缩,即希望能最准确的预测下一个 token。找到了规律,则能把 epistemic uncertainty 降到 0,而剩余的不可压缩部分,便对应剩下的 aleatoric uncertainty。
等一等,你只是在拟合训练集么?为什么能推导出测试集泛化?
Good question from[@汪彧之]
这里面有个很有趣的角度:是的,没错,训练是在拟合训练集。但在 autoregressive 的场景里,假设数据集里每个 token 都只看过一遍的话,那么 所谓的 "training loss" 其实是 "next token validation loss" 。
类似的,在传统的过多遍数据集的场景下(如 ImageNet),第一个 epoch 的 loss 是可以看作和压缩率有线性关系的。但从第二个 epoch 开始,我们 empirically 知道模型的能力还在提高,但我暂时无法用压缩的观点来看 loss 的下降了。
压缩有限样本可以学习到真的 “智能”
所以我们知道,有限样本训练也是可以达到最大压缩率的
涌现 (emergence) 可以理解为在 loss 下降过程中,数据的某个子集的 epistemic uncertainty 突然快速下降,模型突然开始 “悟” 了。
由于 training dynamics 的复杂性,据我所知还没有办法预测什么时候能力会涌现、在什么时候涌现。我猜测涌现可能只是(我们目前还搞不太懂的) training dynamics 的一种行为;“慢慢学会” 其实到最后也没有太大问题。
@Xiangyu Zhang有个更符合中文语境的说法叫做 “顿悟” 。
在训练过程中压缩率越高,模型越 ”智能“
(empirically)模型越大压缩率越高,从而模型越智能
我们已经知道了,模型训练过程实际上是在对数据集做无损压缩。经验上,我们知道模型越大,模型能力越强。我的理解是,“大模型好” 这个说法实际上是在第三层:
第一层是 机器学习就是压缩,压缩通向智能
第二层是 Transformer + SGD 是一个目前经验主义看起来还挺好的压缩算法
第三层是 增加模型参数是一个在给定训练能源消耗上限的情况下,一个对压缩率有显著影响的超参数调节方法。
从压缩的角度,我们可以理解为,大模型的 loss curve 一般更低,从而对应更高的压缩率
(non-truth) 这和人的智能观察有一些有趣相似之处
长期看来,碳基的智能一定会远远小于硅基的智能
现在的 gpt 表现出的硅基智能是 “人类可以理解的智能”,但在压缩过程中也可能会产生 “人类不可理解的智能”。
我们可以将 GPU 和人类进行对比
从计算到通信到能源使用量,人类统统不占优。
压缩可以超过人类智能
但正因为这样, AI for Science 单独存在的意义反而可能变低了
GPT 很危险
没人同时是天文地理人文政治生物化学物理数学专家,而 GPT 压缩了足够的知识后就可以是。
如果一个毒贩问 GPT 你是否有便宜简单的方法合成冰毒,GPT 若回答了,那可能地球上某个地区就会毒品泛滥
GPT 的价值观和政治倾向也可能会对世界格局产生巨大影响。
为了不教大家做坏事,这里就不展开了。
如何控制训练好的硅基智能?
不要让它控制自己的能源
用 EMP (电磁脉冲) 设备对准机房,不听话就电疗(杨教授?)
对有限数据压缩只能对有限世界进行解释。如果这时智能 “有意识”,那么也只是 “有限世界” 的意识,
可以推断的是,现有的 GPT 如果造成了对人类的破环,那么这个行为的要求一定最初是人类发起的。
硅基只需要 encode “对未来下一个 token 预测的压缩” 这一条规则,并且人类给了它这个机会,可能也会造成不可控的危害。
但,别慌:压缩告诉了我们目标,但没有告诉我们道路。
我们如果把视野放得开一点,我们会发现,其实很多计算问题都是学习问题,于是都可以从压缩角度来理解。
一个例子是密码学。从某个角度看,机器学习和密码学其实都在研究数据的学习能力:机器学习研究一份数据有 多可学,而密码学研究一个东西有 多不可学。
假设我们用 RSA 算法生成了一对密钥后, 对于一段明文 , 用其私钥加密 得到密文 , 把 连在一起得到 , 然后用看做一个 autoregressive 学习问题。如果能正确预测 , 则说明模型学到了 RSA 算法 + 所用的密钥。
同样的,刚才 8 位数加法的问题,如果我们认为数据是一个很长的序列 [a1+b1=c1, a2+b2=c2, ...] ,且压缩算法足够厉害(可能 Transformer + SGD 还不够),那么最后不仅应该学会加法,还应该能学到随机数生成器及随机数种子。
当然,还有很多很多的问题可以探讨,这里还有一些没有展开的话题
传统统计机器学习学习分布 的视角和压缩的联系是什么?VAE 是否也是在做压缩 (@malike)?判别模型中的 Information Bottleneck 和 生成模型的 Minimum Description Length (a.k.a., 压缩) 之间关系该怎么理解?(@Xiangyu Zhang)
Mathematica 的 symbolic computation 能力被 GPT 学会是不是只是时间问题?最近也有一些 用 GPT 模拟图灵机 的工作。这样下去是不是 google/bing/wolframalpha 最后都会沦为 gpt 的一个外部数据库?wolframalpha 可能是其中 truthfulness 最高的。
RLHF 在压缩的视角里是什么作用?
Computer Vision 为什么抄 NLP 到今天也还在一个百分点一个百分点地把 ImageNet/MSCOCO 往上拱?
BERT 也建模了 , 并且如果只 mask 则可以建模 从目标包含了 Auto Regressive, 并且也可以通过 Gibs 采样生成文本,那如果用 BERT 会怎么样?
被压缩的数据该以什么样的视角来理解?图片里信息量这么大(随便找三支笔往桌上一扔,请用语言精确描述一下这三支笔的姿态)为什么压缩了也没见 “智能的感觉” 有本质提升?究竟什么是我们想压缩的东西?
BPE 对序列的压缩和 GPT 对 token 的压缩是否能统一看待?多模态是否有单独研究的必要?是否应该直接把 jpeg/h264/mp3 扔进去压缩?是否有从 bit/byte 层面直接做压缩的高效算法?
扩散模型 (Diffusion Model) 在计算过程中加入了随机噪声,是否意味着白白增大了 aleatoric uncertainty?是否意味着其压缩效率上限在更多任务上会受到天生的劣势。
经验上加宽网络,可以使得网络学习能力更强,从而提高压缩率。从 NTK 角度如何理解压缩?(@Xiangyu Zhang)
如果我的 GPT 输出的是围棋棋谱, Alignment 的 Reward Model 是读棋谱数目数,那么在 RLHF 是否包含了一个 AlphaGo 的实现?如果不是还差什么?
如果我想把中文学术做好,知网数据的价值该怎么来衡量?
Chain of Thoughts 利用 "Let's think step-by-step" 诱导出更多的 token,从而使得能 Transformer 能写更多中间步骤,最后给出更好的答案。Self-critique or self-relfection 也可以看作是一种广义的 CoT。从压缩角度好像选择了一条 Alice 和 Bob 同时 “降智”、压缩率更低的解。如何理解这一点?
这里面的问题很多都想写一些观点,也想把我们对数据 和 Alignment 的一些想法写出来(上面有一些很相关的问题),但发现到这里文章已经挺长了,并且 “猜想” 的不严谨部分已经挺多了,所以打算先写到这里。如果大家对于哪个问题比较好奇,可以告诉我,之后有时间会再来谈谈。
前段时间在研究 OpenAI 到底在做什么时,发现了其过去的主要路径只是在做一件事:压缩。这段时间拉着很多小伙伴们或多或少的讨论后,大家纷纷觉得有道理,也写了几篇文章 。从无损压缩开始,有了一个非常具体的实现和证明,便能一点点来解释 OpenAI 坚定这样做的原因、Sam Altman 为什么 2019年 给投资人说我们把 AGI 造出来问他怎么赚钱就行了,为什么他这么担心 AI 安全, OpenAI 的使命是 "Creating safe AGI that benefits all of humanity"。这很马后炮,但如果从 “通过压缩的观点可以合理解释 OpenAI 的行为” 这句话来看,我们其实也是把 对 OpenAI 的观察做了很高的压缩,那么这句话的压缩率其实也挺高的 ,可能还是值得花时间来思考一下。
本篇文章内容没有用 ChatGPT,为人类创作作品。封面为 Midjourney V5 生成。
公众号后台回复“CVPR2023”获取最新论文分类整理资源
极市干货
极视角动态:「无人机+AI」光伏智能巡检,硬核实力遇见智慧大脑!|「AI 警卫员」上线,极视角守护龙大食品厂区安全!|点亮海运指明灯,极视角为海上运输船员安全管理保驾护航!
CVPR2023:CVPR'23 最新 125 篇论文分方向整理|检测、分割、人脸、视频处理、医学影像、神经网络结构、小样本学习等方向
数据集:自动驾驶方向开源数据集资源汇总|医学影像方向开源数据集资源汇总|卫星图像公开数据集资源汇总
点击阅读原文进入CV社区
收获更多技术干货