回归任务在实际应用中随处可见——天气预报、自动驾驶、医疗诊断、经济预测、能耗分析,但大部分回归模型只给出一个预测值,对这个值到底有多靠谱却只字不提。这在某些应用场景下会造成很多问题,比如用模型预测患者血压,假设输出是120/80这样的正常值,表面看没问题。但如果模型其实对这个预测很不确定呢?这时候光看数值就不够了。
神经网络有几种方法可以在给出预测的同时估计不确定性。
回归中的不确定性问题
分类任务里,每个类别都有对应的预测分数,经过softmax之后就是概率值,可以直接当作置信度来看——概率高说明模型比较有把握。
回归就没这么简单了。用MSE(均方误差)训练回归模型时,模型对那些难拟合的样本会倾向于预测平均值。比如说训练集里有几个输入特征几乎一样、但目标值差异很大的样本,模型为了降低MSE,会把预测往它们的均值靠拢。
这就带来一个问题:当预测值接近训练集的整体均值时,很难判断模型是真的有把握,还是纯粹为了优化损失函数在"混日子"。而如果预测值偏离均值较远,可能说明模型比较确信——因为预测错了的话MSE惩罚会更重。
假设目标值在-1到1之间,训练集均值接近0。模型预测0.1时,不好说它是有信心还是在敷衍;但预测0.8时,大部分情况说明它确实掌握了某些模式,当然这个现象也不是在所有情况下都成立。
这里涉及两类不确定性的概念:
任意不确定性(Aleatoric uncertainty)来自数据本身的随机性和噪声,比如测量误差、自然界的随机过程。这种不确定性没法通过增加数据来消除,它就是客观存在的。
认知不确定性(Epistemic uncertainty)源于知识或数据的缺乏。弄日三级片训练数据太少或者测试样本落在从没见过的区域,模型就会产生这类不确定性。但是这种不确定性是可以通过改进模型结构、收集更多样化的数据来降低的。
前面提到的那个例子主要说的就是任意不确定性。但即便预测0.8,如果是在数据稀疏的区域,模型也可能因为认知不确定性而不靠谱。
四种不确定性估计方法
这里对比了四种在神经网络回归中估计不确定性的方法。
1、均值 + 对数标准差(Mean + LogStd)
模型输出两个值:均值作为预测值,对数标准差表示不确定性——值越大说明越不确定。损失函数用的是负对数似然,假设目标值服从正态分布,参数就是预测的均值和标准差。
x='input features'
y='targets'
mu, log_std=mean_logstd_model(x)
dist_obj=torch.distributions.Normal(loc=mu, scale=log_std.exp())
loss=-dist_obj.log_prob(y).mean()
2、均值 + 对数方差(Mean + LogVariance)
跟上一个类似,只是把标准差换成了方差。对数方差越大不确定性越高。损失计算方式如下:
x='input features'
y='targets'
mu, log_variance=mean_logvariance_model(x)
loss= (0.5*log_variance) + (((y-mu) **2) / (2*torch.exp(log_variance)))
loss=loss.mean()
3、蒙特卡洛Dropout(MC Dropout)
训练时用dropout,但预测阶段的时候不关闭它。对同一个样本预测多次,由于dropout的随机性,每次结果会略有差异。把这些预测值的均值当作最终预测,标准差就是不确定性的度量。
4、简化版PPO方法
PPO本来是强化学习里的算法,这里做了简化改造用到监督学习上。Actor网络预测均值和标准差,奖励定义为采样预测的负MSE。跟标准PPO的主要区别在于优势(advantage)的计算——监督回归可以看作单步环境不需要GAE,优势就是reward减去value。
实验设置
数据集
混凝土抗压强度数据集包含1030个样本,8个特征,1个目标值。按7:3随机划分训练集和测试集。输入特征标准化到均值0、标准差1,目标值除以100归一化到(0,1)区间。
模型结构
基础架构都是全连接网络,4个隐藏层,每层64个神经元。输出层根据不同方法有各自的设计。
训练参数
统一训练2000个epoch,batch size 256,学习率0.0001。
实验结果分析
图1展示了各方法在训练集和测试集上的MSE。基线方法(不估计不确定性的普通回归)测试集MSE最低,均值对数方差最高。均值对数标准差和MC Dropout在测试集上表现相当,排第二,PPO排第三。
图2画出了真实值和预测值的散点图,x轴是真值,y轴是预测。点越靠近对角线,预测越准。
图3展示了不确定性估计的实际效果。x轴是确定性阈值,比如0.3表示过滤掉30%最不确定的预测,只保留70%最有把握的,y轴是这些筛选后样本的MSE。
基线方法没有不确定性估计,所以MSE是条平线。PPO的表现比较奇怪——按理说高标准差应该对应高不确定性,但这里似乎反过来了,筛掉低标准差的预测后MSE反而上升。这可能跟PPO用标准差控制探索有关,那些被分配低标准差的样本探索不够充分反而预测不准。
均值对数标准差、均值方差和MC Dropout三者表现接近。均值对数标准差稍微好一点,在0.55阈值之后还能继续降低MSE,而均值方差已经平了。
图4把PPO的不确定性顺序反过来试了试——最确定的当最不确定,最不确定的当最确定。虽然在0到0.2的区间MSE有所下降,但0.2之后又回升了。说明即便反着用,PPO的不确定性估计也不太对。
总结
在混凝土强度这个数据集上,均值对数标准差和均值对数方差两种方法在估计预测不确定性方面效果最好。MC Dropout也不错,但PPO的简化版本表现不佳,即使反转其不确定性指标也无法获得可靠的估计。
代码仓库:https://github.com/navid-bamdad-roshan/regression-with-uncertainty-methods-comparison
作者:Navid Bamdad Roshan
点个在看你最好看!