为什么做机器学习的很少使用假设检验？
感觉这个问题下的回答有点两极化了，一说是认为机器学习领域做不来假设检验，一说是认为机器学习研究过程本身就在做假设检验… 我个人认为，传统数理统计中的假设检验之所以没法或者很少被直接迁移到机器学习领域中，有一个很重要的原因就是现在的机器学习模型，比如各种 NN，的参数空间（space of parameters/weights）太大了。要做假设检验，首先要提出假设吧，然后再根据样本点的存在规律去接受或者拒绝该假设。但是在机器学习模型中，比如 CNN，不管模型的 macroarchitecture 还是 microarchitecture 做出改变，整个参数空间其实就已经变了，所谓的优化过程，不过是在假设该参数空间包含了客观真实的 function 的前提下去寻找最优解的过程。谁敢说自己的网络构架就是最接近理想的模型构架呢？如果对一个问题，或者对一堆 \{\mathbf{x}_i,y_i\} 样本点，连一个公认可信的假设都提不出来，又要怎么做假设检验呢？ 我认为研究假设检验的目的，在于对被测模型的可信度/不确定度进行一个定量描述，与此沾点边的，还有 confidence interval/prediction interval/uncertainty analysis，所以我打算从神经网络的不确定性分析角度抛砖引玉一下。 机器学习（其实题主想问的应该就是神经网络吧）里研究假设检验或者说模型不确定性（uncertainty）的并不是没有，但是在热门的几个 CV 领域内（分类、识别、分割等）的文章的确很少涉及这一方面的内容，要解释这个原因应该先从目前神经网络不确定分析方法及各自的短板讲起。 长的可以看 Gal 的 Uncertainty in Deep Learning, 2016 这篇博士论文，短的可以看 Comprehensive Review of Neural Network-Based Prediction Intervals and New Advances 这篇期刊文章，我简要复述一下里面的主要思想。 神经网络不确定检验目前主要就四种方法：Delta（差异法？不知道这么翻译是否恰当）、Bayesian、MVE（mean-variance estimation，基于最大似然估计）和 Bootstrap。 Delta Method 假设存在一个理想化的回归模型，其对应的一组参数为 w^{\ast} ，而我们优化的模型参数为 w ， w^\ast 和 w 之间的差异就是模型不确定性的主要来源。当我们训练出的模型足够好时，也就是 w^\ast 和 w 足够接近时，真实值和模型预测值之间的差异可以用 w 的泰勒级数来表示，其系数就是 NN output 关于 w 中各个参数的一阶导数。既然要求的是不确定性，光知道模型的点估计（point estimation）是没用的，我们要的是真实值和模型预测值之间的差异的方差。很好理解，既然均值/点估计用的是一阶导数，那么方差肯定涉及的就是 Jacobian，所以问题就来了，对于大型的 NN，求 Jacobian 并不现实，所以 Delta Method 顶多只能用于分析少数几个变量的回归问题，例如天气预测、金融分析等，对于图像方面的应用，计算开销超出了目前硬件所能承受的范围。 Bayesian Method，其实就是已知 NN 模型参数和训练样本点之间的先验概率，去最大化关于模型参数 w 后验概率的问题。在最大化的过程中（或者最小化 negative log likelihood 的过程中）需要计算 Hessian matrix，所以限制 Bayesian Method 的瓶颈与 Delta Method 的类似，也是目前的硬件不足以应付复杂模型 Hessian 的计算。Bayesian Method 强就强在它有非常可靠的数学根据，同时可以提供比其他三种方法更好的泛化能力，目前神经网络不确定性研究很大一部分都是基于 Bayesian 理论，而且相当一部分研究者都在研究 NN 和 Gaussian process 之间的联系。  MVE Method 比较简单，也是现阶段可操作性比较强的 NN uncertainty 计算方法之一。它的目标是在 NN 输出的均值（点估计）的基础上去估计一个置信区间（prediction interval），如果模型预测值落在这个区间内则认为这个置信区间是有效的。显然，区间的大小（width）间接反映了模型估计的不确定程度，而所有有效的区间数占样本点总数的比例则反映了所估计的置信区间的可靠性。MVE Method 通常会在原始 NN 模型结构的基础上新建一个新的 NN 模型（例如只改变最后几层 FC 层），这个新的模型的 cost function 就是 W+\lambda\frac{1}{R} ，其中 W 就是所有置信区间的平均 width，R 是有效置信区间所占比例， \lambda 是一个惩罚权重。MVE 最坏的情况也就是训练两个 NN，对于大部分应用应该都可以接受。Nix 有一篇 Learning Local Error Bars for Nonlinear Regression, 1995 里面提到了一种 3-phase 训练法，我用在 CNN 训练上，的确可以得到不错的不确定性分析结果。 Bootstrap 听名字就知道是四种方法里面最为简单粗暴的一种，它的思想与 Delta Method 类似，也认为模型的不确定性在于优化参数 w 与理想参数 w^\ast 间的差异，因此上来就直接训练 K 个 NN，由于初始化的不同和训练过程中的一些不可知因素，这 K 个 NN 通常会收敛于不同的 local optima，因此对于相同的观察点通常会得到略有差异的 K 个预测值，这些预测值之间的方差就直接代表了模型的不确定性。显然，K 越大 Bootstrap Method 就越可靠，所以可以理解为 Bootstrap 是一种有点类似 O(n) 的方法，让你在 ImageNet 上训练100、1000、10000个 NN，显然不现实嘛。 所以题主的问题可以简单几句话概括一下，为什么目前的神经网络研究很少涉及不确定性分析？因为视觉任务相关的神经网络结构过于复杂，参数数量巨大，传统统计学中的分析方法在现有硬件水平的条件下无法承担不确定性分析所需的计算开销。此外，还有一点很重要的原因，可靠性分析要“可靠”，通常都需要知道统计量的先验分布，对于一维、二维数据，这个分布可以通过大量样本得出，但是对于 CNN 这种模型，谁也不知道参数到底满足一个怎样的分布，所以假设检验中的很多前提条件，对于大型 NN 来说都是过于 restrictive 了。 另外说一个有意思的内容，在分类任务中，最后 softmax 层计算了各个类别的归一化分数，有点类似各个类别的概率分布对不对？比如一张图像被分到 dog 类的 softmax 分数是0.9，另一张是0.5，看起来似乎第一张的不确定性要更低一些，也就是 NN 对第一张的预测似乎要更可靠一些？其实不对，softmax 的分数跟分类的不确定性/置信程度基本没有关系。 @Jay Wang 提到机器学习不缺数据所以不需要假设检验，我是不太赞成的。工业领域哪怕算法性能再强，可靠性分析都是不可缺少的步骤。比如我比较熟悉的图像 AWB 方面，目前还没有哪家敢全用 ML，都得有一套传统方法作为 fallback，就是因为用户总能找到一些不在训练集中的样本来考验 NN 的泛化能力，所以这种时候有一个不确定性检验模块是无比重要的：某一张图像 NN 吃不准自己估计得到底对不对，那么直接 fallback 给传统算法呗。 