You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DNN训练中两种Pearson相关系数损失计算方法的差异分析

两种批次内Pearson相关系数计算方案的差异分析

问题背景

在深度神经网络(DNN)训练中,若使用Pearson相关系数作为损失函数,针对批次内预测值与标签的Pearson系数(p)计算,存在两种常见方案:

  1. 逐行计算每个样本的p值,求和后除以批次大小得到平均p;
  2. 将批次内所有预测值与标签分别展平为一维数组x和y,直接计算全局p值。

举个具体示例:

  • 输入预测值 X = [[1,2],[3,4]],标签 Y = [[-1,-2],[-3,-4]]
  • 方法1:计算每个样本的p值:p1=pearson_loss([1,2],[-1,-2])、p2=pearson_loss([3,4],[-3,-4]),再取平均 p=(p1+p2)/2
  • 方法2:展平数组后计算 p=pearson_loss([1,2,3,4], [-1,-2,-3,-4])

附TensorFlow Keras中基于方法2实现的pearson_loss代码:

def pearson_loss(x, y):
    mx = K.mean(x)
    my = K.mean(y)
    xm, ym = x-mx, y-my
    r_num = K.sum(tf.multiply(xm,ym))
    r_den = K.sqrt(tf.multiply(K.sum(K.square(xm)), K.sum(K.square(ym))))
    r = r_num / r_den
    # ensure r is in range
    r = K.maximum(K.minimum(r, 1.0), -1.0)
    return -r

核心结论

这两种方法存在显著差异,仅在极少数特殊场景下结果会一致(比如每个样本的预测与标签都是完全线性相关且方向统一)。下面从数学原理和实际效果两方面展开说明:

1. 数学原理的本质区别

Pearson相关系数的核心公式是:
r = cov(x,y) / (σ_x * σ_y)
其中cov(x,y)是协方差,σ_x、σ_y分别是x和y的标准差。

  • 方法1:计算的是每个样本内部预测与标签的Pearson系数的平均值。它关注的是单个样本维度内,预测和标签的线性相关性,每个样本的计算独立于其他样本。
  • 方法2:计算的是整个批次所有数据点的全局Pearson系数。它关注的是批次内所有预测值和标签值之间的整体线性趋势,会把所有样本的点混在一起计算均值、协方差和标准差。

2. 实际案例的结果差异

用一个非极端示例就能看出区别:
假设输入 X = [[1,3],[2,4]],标签 Y = [[1,2],[3,4]]

  • 方法1:每个样本的Pearson系数都是1(因为每个样本内的预测和标签完全线性正相关),平均后结果为1。
  • 方法2:展平后的x=[1,3,2,4],y=[1,2,3,4],计算得到的全局Pearson系数为0.8,和方法1的结果明显不同。

3. 对模型训练的影响

作为损失函数,两种方法会引导模型学习不同的目标:

  • 方法1:要求模型对每个样本的预测都尽可能和标签线性相关,适合需要关注个体样本内部模式的任务。
  • 方法2:要求模型让整个批次的预测值和标签值呈现整体线性趋势,适合需要捕捉全局数据分布相关性的任务。

内容的提问来源于stack exchange,提问作者Ke MA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:23:29