TemporalNorm
时间归一化已被证明在神经预测任务中至关重要,因为它使得网络的非线性能够充分表达。预测缩放方法特别关注方差主要存在的时间维度,这与 BatchNorm
等其他深度学习技术不同,BatchNorm
在 batch 和时间维度上进行归一化,而 LayerNorm
在特征维度上进行归一化。目前我们支持以下技术:std
, median
, norm
, norm1
, invariant
, revin
。
参考文献
- Kin G. Olivares, David Luo, Cristian Challu, Stefania La Vattiata, Max Mergenthaler, Artur Dubrawski (2023). “HINT: Hierarchical Mixture Networks For Coherent Probabilistic Forecasting”. Neural Information Processing Systems, 已提交。工作论文版本可在 arxiv 获取。
- Taesung Kim 和 Jinhee Kim 和 Yunwon Tae 和 Cheonbok Park 和 Jang-Ho Choi 和 Jaegul Choo。“用于应对分布偏移的精确时间序列预测的可逆实例归一化”。ICLR 2022。
- David Salinas, Valentin Flunkert, Jan Gasthaus, Tim Januschowski (2020). “DeepAR: 使用自回归循环网络的概率预测”。International Journal of Forecasting。
1. 辅助函数
masked_median
*带掩码的中位数*
计算张量 x
沿 dim 的中位数,忽略 mask
为 False 的值。x
和 mask
需要可广播。
参数
x
: 用于计算沿 dim
维度的中位数的 torch.Tensor。
mask
: 与 x
形状相同的 torch Tensor 布尔值,其中 x
有效则为 True,应掩码则为 False。在 dim 维度的任何列中,mask 不应全为 False,以避免零除导致的 NaN。
dim
(int, 可选): 计算中位数的维度。默认为 -1。
keepdim
(bool, 可选): 是否保留 x
的维度。默认为 True。
返回值
x_median
: 包含归一化值的 torch.Tensor。*
masked_mean
*带掩码的均值*
计算张量 x
沿维度的均值,忽略 mask
为 False 的值。x
和 mask
需要可广播。
参数
x
: 用于计算沿 dim
维度的均值的 torch.Tensor。
mask
: 与 x
形状相同的 torch Tensor 布尔值,其中 x
有效则为 True,应掩码则为 False。在 dim 维度的任何列中,mask 不应全为 False,以避免零除导致的 NaN。
dim
(int, 可选): 计算均值的维度。默认为 -1。
keepdim
(bool, 可选): 是否保留 x
的维度。默认为 True。
返回值
x_mean
: 包含归一化值的 torch.Tensor。*
2. 缩放器
minmax_statistics
*MinMax 缩放器*
通过确保时间特征的范围位于 [0,1] 范围内对其进行标准化。这种变换通常用作标准缩放器的替代方法。缩放后的特征如下所示:
参数
x
: torch.Tensor 输入张量。
mask
: torch Tensor 布尔值,与 x
维度相同,True 表示 x
有效,False 表示应掩码 x
。在 dim 维度的任何列中,mask 不应全为 False,以避免零除导致的 NaN。
eps
(float, 可选): 用于避免零除的小值。默认为 1e-6。
dim
(int, 可选): 计算最小和最大值的维度。默认为 -1。
返回值
z
: 与 x
形状相同,但已缩放的 torch.Tensor。*
minmax1_statistics
*MinMax1 缩放器*
通过确保时间特征的范围位于 [-1,1] 范围内对其进行标准化。这种变换通常用作标准缩放器或经典 Min Max 缩放器的替代方法。缩放后的特征如下所示:
参数
x
: torch.Tensor 输入张量。
mask
: torch Tensor 布尔值,与 x
维度相同,True 表示 x
有效,False 表示应掩码 x
。在 dim 维度的任何列中,mask 不应全为 False,以避免零除导致的 NaN。
eps
(float, 可选): 用于避免零除的小值。默认为 1e-6。
dim
(int, 可选): 计算最小和最大值的维度。默认为 -1。
返回值
z
: 与 x
形状相同,但已缩放的 torch.Tensor。*
std_statistics
*标准缩放器*
通过移除均值并沿 dim
维度缩放到单位方差来标准化特征。
例如,对于 base_windows
模型,缩放后的特征如下所示(dim=1):
参数
x
: torch.Tensor。
mask
: torch Tensor 布尔值,与 x
维度相同,True 表示 x
有效,False 表示应掩码 x
。在 dim 维度的任何列中,mask 不应全为 False,以避免零除导致的 NaN。
eps
(float, 可选): 用于避免零除的小值。默认为 1e-6。
dim
(int, 可选): 计算均值和标准差的维度。默认为 -1。
返回值
z
: 与 x
形状相同,但已缩放的 torch.Tensor。*
robust_statistics
*鲁棒中位数缩放器*
通过移除中位数并使用平均绝对偏差 (mad)(一种鲁棒的方差估计器)进行缩放来标准化特征。这种缩放器对于包含噪声数据特别有用,因为在噪声数据中异常值会严重负面影响样本均值/方差。在这种情况下,中位数和 mad 会给出更好的结果。
例如,对于 base_windows
模型,缩放后的特征如下所示(dim=1):
参数
x
: torch.Tensor 输入张量。
mask
: torch Tensor 布尔值,与 x
维度相同,True 表示 x
有效,False 表示应掩码 x
。在 dim 维度的任何列中,mask 不应全为 False,以避免零除导致的 NaN。
eps
(float, 可选): 用于避免零除的小值。默认为 1e-6。
dim
(int, 可选): 计算中位数和 mad 的维度。默认为 -1。
返回值
z
: 与 x
形状相同,但已缩放的 torch.Tensor。*
invariant_statistics
*不变中位数缩放器*
通过移除中位数并使用平均绝对偏差 (mad)(一种鲁棒的方差估计器)进行缩放来标准化特征。此外,它还使用 arcsinh 变换来补充该变换。
例如,对于 base_windows
模型,缩放后的特征如下所示(dim=1):
参数
x
: torch.Tensor 输入张量。
mask
: torch Tensor 布尔值,与 x
维度相同,True 表示 x
有效,False 表示应掩码 x
。在 dim 维度的任何列中,mask 不应全为 False,以避免零除导致的 NaN。
eps
(float, 可选): 用于避免零除的小值。默认为 1e-6。
dim
(int, 可选): 计算中位数和 mad 的维度。默认为 -1。
返回值
z
: 与 x
形状相同,但已缩放的 torch.Tensor。*
identity_statistics
*恒等缩放器*
一个占位符恒等缩放器,对参数不敏感。
参数
x
: torch.Tensor 输入张量。
mask
: torch Tensor 布尔值,与 x
维度相同,True 表示 x
有效,False 表示应掩码 x
。在 dim 维度的任何列中,mask 不应全为 False,以避免零除导致的 NaN。
eps
(float, 可选): 用于避免零除的小值。默认为 1e-6。
dim
(int, 可选): 计算中位数和 mad 的维度。默认为 -1。
返回值
x
: 原始的 torch.Tensor x
。*
3. TemporalNorm 模块
TemporalNorm
*时间归一化*
特征的标准化是许多机器学习估计器的常见要求,通常通过移除水平值并缩放其方差来实现。TemporalNorm
模块根据缩放器的类型对输入批次应用时间归一化。
如果 scaler_type
是 revin
,则在常规归一化技术之上添加可学习的归一化参数,参数通过尺度解耦全局跳跃连接学习。该技术适用于点预测和概率输出。
参数
scaler_type
: str, 定义 TemporalNorm 使用的缩放器类型。可用选项:[identity
, standard
, robust
, minmax
, minmax1
, invariant
, revin
]。
dim
(int, 可选): 计算尺度和偏移的维度。默认为 -1。
eps
(float, 可选): 用于避免零除的小值。默认为 1e-6。
num_features
: int=None, 用于类 RevIN 的可学习仿射参数初始化。
TemporalNorm.transform
*对数据进行中心化和缩放。*
参数
x
: torch.Tensor,形状为 [batch, time, channels]。
mask
: torch Tensor 布尔值,形状为 [batch, time],True 表示 x
有效,False 表示应掩码 x
。在 dim 维度的任何列中,mask 不应全为 False,以避免零除导致的 NaN。
返回值
z
: 与 x
形状相同,但已缩放的 torch.Tensor。*
TemporalNorm.inverse_transform
*将数据缩放回原始表示。*
参数
z
: torch.Tensor,形状为 [batch, time, channels],已缩放。
返回值
x
: 原始的 torch.Tensor 数据。*