Dataset Size 和 Loss 的关系

最大似然估计(MLE)

一切机器学习的本质都是最大似然估计:

  1. 模型下的理想真实世界的概率分布:$p(x|\theta)$

  2. 我们不知道真实世界的分布,所以我们要用样本估计似然函数 $L(\theta|x)$

  3. 现在 $x$ 已知,$\theta$ 未知,若对于两个参数 $\theta_1$ 和 $\theta_2$ 有

    $$ L(\theta_1|x) = p(x|\theta_1) > p(x|\theta_2) = L(\theta_2|x) $$

    那么意味着 $\theta=\theta_1$ 时,随机变量 $\theta_1$ 生成 $x$ 的概率大于当参数 $\theta=\theta_2$ 时。这也正是似然的意义所在,若观测数据为 $x$,那么 $\theta_1$ 是比 $\theta_2$ 更有可能为分布函数的参数。

  4. 在给定观测数据集 $X={x_n},n \in \mathbb{N}$ 时,真实世界最有可能的概率分布对应的参数 $\hat\theta$ 应该满足:

    $$ L(\hat\theta|x) = p(x|\hat\theta) > p(x|\theta) = L(\theta|x), \theta \in \mathbb{\Theta} 且 \theta \ne \hat\theta $$

    即:

    $$ \hat\theta = \arg\max\limits_\theta L(\theta|x) $$

  5. 求解最大似然函数:

    $$ \frac{\mathrm{d}}{\mathrm{d}\theta} L(\theta|x) = 0 $$

对这个方程数值求解的过程,对应的就是绝大部分机器学习算法中的梯度下降过程。

在测试集上评估的结果,我们预想的误差应当包含两部分:

  1. 似然函数 $L(\theta|x)$ 对真实世界概率分布描述能力不足,带来的误差;
  2. 通过 $X$ 估计 $\theta$ 时,样本本身的误差;

若假定我们可以通过梯度下降收敛(即上面最大似然函数的导数在 0 的一个很小的临域中),那么至少就是我们相信在观测数据集 $X$ 上,模型是正确的,那么评估的误差就更加明确的指向 $X$ 本身带来的误差。

Fisher 信息量

为了求解最大似然估计,我们常用的数值手段是:

假定观测数据集 $X$ 的真实世界概率对应的概率密度函数是 $f(x_i;\theta)$,定义似然函数:

$$ L(X;\theta) = \prod \limits^{n}_{i=1} f(x_i;\theta) $$

求解时,先对 $L(X|\theta)$ 取对数,再求导,这个函数定义为 Score function:

$$ S(X;\theta) = \sum \limits^n_{i=1} \frac{\partial \ln f(x_i;\theta)}{\partial\theta} $$

则 Fisher 信息量的定义就是这个 Score function 的二阶矩(second moment)

$$ I(\theta) = E[S(X;\theta)^2] $$

Fisher 信息量最重要的意义是:通过中心极限定理,弱大数定律,依概率一致收敛,以及 Slutsky 定理,可以证明 MLE 的渐进分布是正态分布 1,即:

  1. $\hat \theta \stackrel{P}{\longrightarrow} \theta_0$,其中 $\theta_0$ 是参数的真实值;
  2. $\sqrt{n}(\hat\theta - \theta_0) \stackrel{L}{\longrightarrow} N(0,I^{-1}(\theta))$ ;

数据量与误差的关系

花了大量篇幅描述了 最大似然 和 Fisher 信息量后,最终真正值得我们关注的结论却异常的简单:

$$ L(D) \propto D^{-0.5} $$

这个结论同计算均值时,数据样本带来的误差是完全一样的。

真实的机器学习条件下,我们的样本量的质量并不均匀,所以往往会优先使用更好的样本(小样本集不是大样本集的随机采样,而是精选),会导致观测数据集 $X$ 不能满足概率同分布,所以带来的结果是上述幂律关系中,实际的幂律值会小于 $0.5$。

理论上来说,如果我们能做到样本集随机采样,那样这个幂律就会更加接近 $0.5$,而如果样本集不能随机采样,某种意义上说,能否保持这种幂律关系是值得怀疑的。所以对于 OpenAI 和 Google 的 Scaling Law 的论文,在样本量同 Loss 的关系上,Google 的结果是更可信的。

哪怕依旧能维持幂律关系(维持幂律关系的数学基础是不存在的。。。),具体的数值也只能通过实际拟合来估计。因为这件事不是通用规律,只跟具体的训练数据集的分布有关,跟模型无关(前提条件是模型能在大数据收敛,即满足大数定律、中心极限定律,并且模型可以拟合真实分布)。

Compute 和 Loss 的关系

控制论和 PID 算法

梯度下降法的数值计算过程,某种视角下可以理解成就是控制论下的控制算法——我如何根据真实信息来控制我的预期值离目标值更近。

直观而好用的方法就是 PID 算法:

$$ u(t) = K_pe(t) + K_i\int^t_0 e(\tau)\mathrm{d}\tau + K_d\frac{\mathrm{d}e(t)}{\mathrm{d}t} $$

当然,我们的梯度下降法原没有 PID 算法如此之精密,实际流程大概率只使用了 P 的部分,也就是对误差做补偿。在深度学习中,被称为反向传播。

单参数计算量与误差的关系

单目标的 PID(只省 P 过程了)算法,误差与计算量(迭代次数)之间的关系:

$$ L(C) \propto K_p^{C}=e^{\lambda C} $$

即,误差同计算量之间的关系是指数关系,不是幂律关系。

这一点在 Sorscher et al. (2022) 中有所体现,它的结论是:至少对于某些任务,损失可以随着数据集 2 大小呈指数级增长,而不是作为幂律。

总计算量与误差的关系

不同于优化问题中,我们会通过反复迭代的方式增加计算量,深度学习的计算量基本上是同模型规模和数据量正相关的。反过来意味着对单参数的优化迭代很少的固定步数就可以收敛,所以在通常数据量规模下,可以将单参数计算量带来的优化效果视作常数(都能优化到收敛)。

单参数计算量带来的优化效果视为常数(不会随计算量、节点数、数据量变化而变化),意味着计算本身同误差之间没有直接关联,总计算量与误差之间的关联体现的是数据量与误差的关系和节点数(结构)与误差的关系。

总计算量与数据量成正比,而数据量同优化效果之间的关联我们已经在前文完成了论述。下一步我们将分析节点数和误差之间的关系,或者其实更加精确的说,应当是在单参数误差不变的条件下,节点数的变化与总计算量之间的关系,是这个关系蕴含了总计算量与误差之间的关联。

Compute 和 Parameters 的关系

分形维度

具有自相似性的结构就是分形。而我们的深度学习计算就是典型的分形结构——当模型规模扩大时,主流的扩大的方式就是增加层数 3,这带来的就是自相似性。

而自相似性带来的重要性质就是,系统会具有分形维度,分形维度会使得系统规模扩大时,对应的全局属性并不是等比增加,而是幂律增加,幂律的指数就是其分形维度。

示例

生物学中有重要的 $\frac{3}{4}$ 定律——生物随着重量的变大(原子数量的规模扩大),其相关的很多生物学特征,例如新陈代谢能力、血管长度、心跳、呼吸等等,并不与重量成正比,而是按照 $\frac{3}{4}$ 的幂律进行增长。 一个直观的理解,随着生物体长度增长,其体重会以幂律 $3$ 进行提升,而腿部的横截面则是幂律 $2$ 增长。所以生物的规模变大,就会带来腿部承受的压力不断变大,所以老鼠体型的动物的腿都很细,但大象规模的动物,腿都很粗;蚂蚁可以举起自身体重百倍的物品,但人只能举起和体重相仿的物品。这些都是因为规模变化带来的非线性,要求生物的动力学模型必须发生变化,而不能与小规模时一样。 类似的,在城市规模同城市中加油站、小超市、医院之类的城市核心建设之间,也存在着幂律增长的关系——相关幂律大约是 $0.85$。

对应的,深度学习模型中,在保证单参数误差不变的条件下,Parameters 规模的增加所需要的 Compute 计算量的增加不是等比的,而是幂律的,而且这个幂律应当是小于 $1$ 的。

换句话说,计算量同损失之间的关系是伴生关系——计算量本身同损失是没有直接关联的。带来损失变化的根本原因不是计算不足,而是模型表达能力以及数据本身蕴含的信息带来的。

但因为这里的结论中,计算量与参数数量也是幂律关系,由前文,数据同损失也是幂律关系,如果参数数量同损失同样是幂律关系的化,那么计算量与损失也可以用幂律关系来表示。

Parameters 与 Loss 之间的关系

这里要分析的是参数量增加为何能带来 Loss 的降低。这是因为 Parameters 的增加,可以提升模型的表达能力,可以更好的拟合目标函数。也就是说,一个模型距离真值的误差(Loss),除了因为 Dataset 自身的误差外,还有一部分是模型距离 Dataset 所描述的最大似然函数的误差。

这部分要是详尽分析起来会很复杂,幸好已经有一些这方面的研究:Sharma et al. (2020)Bahri et al. (2021) 都对这个问题进行了很好的分析,其结果也有对应的实验支撑。

笔记

文章假定深度模型将数据映射到一个 $d$ 维数据流形上,增加的模型参数(无限数据的条件下)都会被模型用来将数据流形分割成更小的组件,然后模型将在数据流形的每个分量上进行独立的预测,以优化训练损失。

这样自然的,如果我们想让子区域的大小缩小 $2$ 倍,就需要增加 $2^d$ 倍的数据量或模型参数。进而就是直观的结论:

$$ L(P) \propto P^{-\frac{1}{d}} $$

即 Loss 与 参数量之间是幂律关系,其幂律值小于 $1$(因为有 $d>1$)。

总结

至此,关于 Scaling Law 的数学含义就已经基本都解释清楚了。

更重要的问题是,有了相关的理论支撑后,我们能做什么?哪些事情做不了。

基于多份数据融合的实验结果预测

这件事是不可行的

一切机器学习的基础都是最大似然估计,而最大似然估计的基础假设就是独立同分布。两组分布不同的数据融合,一定会破坏原有的分布,至于不同比例下融合后形成怎样的分布,具有怎样的特性,在两份数据的分布都已知的条件下,是可以计算的。但对于我们自己的机器学习任务,原本就是要去学习数据的分布,这就决定了,不可能在不了解数据分布的条件下,估计融合后的数据分布。

类似的,多分不同分布的数据集怎么融合能更贴近测试集也是不可知的,只能试出来。由于测试集也不是真值,甚至测试集对真实世界的表达很可能还不如训练集,所以针对测试集做针对性调优是不值得的。

这部分的定量分析,其实可以借鉴 OpenAI 关于 Scaling Laws 的经典文章 Kaplan et al. (2020) 中尝试的方法:

迁移学习与测试效果的提升

当我们在与训练集分布不同的文本上评估模型时,其结果与训练验证集上的结果强烈相关,损失函数中有一个大致恒定的偏移量。换句话说,转移到不同的分布会带来一定的固定惩罚,但除此之外,其提升程度大致与训练集上的表现一致。

可以用类似这样的方法,通过多份不同分布的测试集效果打分情况,评估模型表现。

当然,实操方面其实也不复杂,就是多看几个测试集的结果,记录下来。如果模型优化后,在各个测试集上的提升是基本一致的,那就说明这次改进不是因为数据分布变化带来的,而是因为模型能力带来的。

判断最优的参数和模型数据量配比

这件事不是特别值得做。因为我们当前模型的优质数据不够多。所以提供的数据质量是不稳定的。小模型上得到的预测数据值,在大模型上操作时,肯定不能按预测量来操作,而是还需要进一步增加数据量。但是具体增加多少,因为我们对数据质量无法在训练前得到评估,所以是不可预测的。

这件事值得做的条件是:我们已经用一份数据训练了一个很大的模型,然后我们可以通过抽样的方法构建小模型,用大模型预测小模型需要多少数据量,这件事是可行的。

当然,如果只是一个预估值做参考,这件事倒是可以做一下。

注:这件事值得做的数学理论基础是:我们需要找到样本的精度和模型训练的流型精度一致的对应比例。这件事的前提条件是:模型得到充分训练,且 Loss 与 样本、模型精度是同一个数量级(Loss 就是当前的精度)。如果这个精度不一致,loss 会被更大的精度所制约。带来的影响是会增加一定的无效计算量。

理论上,这件事更应该用适合的停机算法来避免冗余的计算,而不是需要精准的预估精度。

尝试用更小的模型达到更优的效果

这件事价值不是特别大。

  1. 不需要知道具体的比例,我们也知道,哪怕对于小模型,喂更多的数据可以达到更好的效果。
  2. 小模型的表达能力是有限的,所以也不是喂更多的数据就一定可以提升效果。

于是哪怕做出了预估,也需要加好多限制条件,而实际应用场景也不多。

其他?

昨天看完后,原本想说 Scaling Law 是个显然的结果,其规律并不蕴含更深层次的信息。但后来仔细想了想,可能还是有很多细节值得仔细的表述一下,以免遗漏什么可能性,所以写了这个文档。

总得来说,我对于 Scaling Law 并没有想到更深的应用场景,它所能表达的大概也只是:更多的数据、更大的模型(更多的模型参数)可以更好的拟合真实的概率分布。这件事对于机器学习来说,是自然的结论。这个规律几乎不涉及具体的模型形式——几乎只要是机器学习都符合这个规律。

所以从第一性原理角度出发,它算是一个数学上给出定性的存在性定理:我们的机器学习是可以不断优化的。但它不蕴含如何能更好地做优化的信息。


  1. 这个定理的前置条件和证明过程这里就不赘述了,需要的话自己查一下。 ↩︎

  2. 大部分的训练,增加迭代次数的方式都伴随着提供更多的训练样本,若模型距离收敛所需要的迭代次数比较多,例如如果 学习律(本质上就是 PID 中的 $K_p$)比较小,模型距离理论上限比较远,这时误差项主要不是来源于数据自身的误差,而是来自梯度下降逼近的误差,那么这个指数关系就会比较显著,对应的表象就是误差同数据量之间是指数关系。 ↩︎

  3. 还可以增加每层的神经元数量(宽度),这种增加模式就不属于分层。类似于 Scaling Law 的规律,这种扩大的方式(形状变化)对于结果的影响不显著。当然,这件事是值得做实验,试一试少层数多神经元和多层数少神经元(参数总数一致)训练的结果是否一致。盲猜会有显著性能差异。 ↩︎