- weights 是对 “智能” 的表示
- 这句话有点民科的感觉 ,但其实想说的是,weights + transformer 计算了数据分布中可解释的部分(后面会展开)。
- 另外一个角度,“智能” 其实是消耗能源用 Transformer + SGD 做压缩后的副产品 (by-product)
- 我们继续考虑 8 位数加法的例子,数据是均匀随机生成的,每字符就是一个 token (没有 bpe),并且沿用 auto regressive 的方式来训练。这其实就是一个常见的 GPT 训练的子集。比如我们考虑下面这个例子用来做训练好的模型的验证
- 17282456+79546852=96829308
- 当训练完全收敛时,对于这个序列的 loss 应该会长下面这样
- 因为前面两个数字的每一位都是从 0~9 均匀随机的,所以其实模型对此无法准确预测,进而只能等概率预测是 0~9 是个数字中的某一个,故
- “+”,“=”,以及最后的答案都是确定性可以预测的,所以 loss = 0
- 聪明的你应该发现了,这其实就对应这个分布的 aleatoric uncertainty 和 epistemic uncertainty。这个例子里:
- 选择某一个被加数里的数字是不可学习的 aleatoric uncertainty
- "+"、"="、8 位数字的答案、以及从无先验的每个字符 的概率变到 0~9 每个字符 的概率的信息差,是可学习的 epistemic uncertainty。而这一部分,就是我们要学习的 “智能”。
- 自然,前文提到的 其实就是 ,即只剩下了不可解释的随机部分。
- 这里(https://github.com/yulundu/compression)是一个使用 mingpt 的参考实现, 训练的结果 (wandb) 如下:
- Loss 曲线
- Accuracy 曲线
- 实际实现中
- 字符集为 0-9,s,e,+,= 共 14 个字符
- 序列长度为 1(s 开始符)+ 8(数字 a) + 1(+ 号) + 8(数字 b)+ 1(等号)+ 9(答案)+ 1(e 结束符) = 29
- 但因为是 predict 下一个字符,所以训练长度为 28
- training 比 validation 还差且 accuracy 没有到底是因为没注意到 mingpt 里训练 默认带 0.1 的 dropout
- loss 的收敛点大约是 1.31 左右,我们计算 "理论最低" loss
也是可以 match 上观察的。其中
- 16是两个 8 位数字,因为其随机性而没有办法压缩。
- 是每个数字都均匀有 10 种可能。之前提到过,pytorch 实现用了自然对数。
- 是序列 loss 算了平均值。
- 对数据进行最高效的压缩,即希望能最准确的预测下一个 token。找到了规律,则能把 epistemic uncertainty 降到 0,而剩余的不可压缩部分,便对应剩下的 aleatoric uncertainty。
- 不过一个令人沮丧的事实是,除非我们能精确描述数据的分布
(如 8 位数加法),我们没有办法知道我们是否收敛到了 。
- 等一等,你只是在拟合训练集么?为什么能推导出测试集泛化?
- Good question from @汪彧之
- 这里面有个很有趣的角度:是的,没错,训练是在拟合训练集。但在 autoregressive 的场景里,假设数据集里每个 token 都只看过一遍的话,那么 所谓的 "training loss" 其实是 "next token validation loss"。
- 类似的,在传统的过多遍数据集的场景下(如 ImageNet),第一个 epoch 的 loss 是可以看作和压缩率有线性关系的。但从第二个 epoch 开始,我们 empirically 知道模型的能力还在提高,但我暂时无法用压缩的观点来看 loss 的下降了。
- 思考题:对数据训练两个及其以上 epoch 时该如何用压缩观点来解释?跳出来看,这个问题的意义有多大?
- 压缩有限样本可以学习到真的 “智能”
- 考虑在 有限 但 足够多 的数据的情况下,压缩是 有可能 学习到真的智能的。
- 在有限在足够多的样本的情况下,如果假设我们的压缩算法(a.k.a, for now, Transformer + SGD) 对于当前的数据做训练时 training (a.k.a, next token validation) loss 能 “比较稳定” 的下降,并且 从某个 step T 开始,training error 都是 0(更精确一点是 epistemic uncertainty =0),能对未来 token 的预测完全准确则该模型就真的 “懂” 了数据的生成规律。
- 思考题:这里面缺少很多严格的数学定义,该如何严格地 formualte 这个命题?
- 所以我们知道,有限样本训练也是可以达到最大压缩率的
- for skeptics: 是的,收敛率的问题没有讨论,可能 “有限” 也大得离谱,但我希望收敛速度尽可能快,也希望有更多人来研究这个事情。
- 涌现 (emergence) 可以理解为在 loss 下降过程中,数据的某个子集的 epistemic uncertainty 突然快速下降,模型突然开始 “悟” 了。
- 由于 training dynamics 的复杂性,据我所知还没有办法预测什么时候能力会涌现、在什么时候涌现。我猜测涌现可能只是(我们目前还搞不太懂的) training dynamics 的一种行为;“慢慢学会” 其实到最后也没有太大问题。
- @Xiangyu Zhang 有个更符合中文语境的说法叫做 “顿悟” 。
- 涌现得到的人可以理解的智能,是和人没有区别的智能
- 在训练过程中压缩率越高,模型越 ” 智能 “
- 我们知道在训练过程中的 loss 其实是 validation loss,且当 loss 下降时,我们对于 next token 的传输压缩率会越高,再考虑到有限样本也是可以达到最高压缩率的,所以模型也就会越来越智能。
- (empirically)模型越大压缩率越高,从而模型越智能
- 我们已经知道了,模型训练过程实际上是在对数据集做无损压缩。经验上,我们知道模型越大,模型能力越强。我的理解是,“大模型好” 这个说法实际上是在第三层:
- 第一层是 机器学习就是压缩,压缩通向智能
- 第二层是 Transformer + SGD 是一个目前经验主义看起来还挺好的压缩算法
- “好” 这个算法可以在提供更多的能源的情况下达到更高的压缩率
- 第三层是 增加模型参数是一个在给定训练能源消耗上限的情况下,一个对压缩率有显著影响的超参数调节方法。
- 从压缩的角度,我们可以理解为,大模型的 loss curve 一般更低,从而对应更高的压缩率
- (non-truth) 这和人的智能观察有一些有趣相似之处
- 在地球上,人比其他生物看起来都明显聪明
- 人的大脑(weights、神经元数量、皮层细胞数)从统计意义上比绝大部分生物都大(是的,不仅有非洲象、蓝鲸等 outlier,人类自身也有小头症和巨头症)