DIVERSIFY
Background
0 Abstract
由于时间序列的不平稳性(non-stationary property),分布会随时间变化,现有的算法大多数建立在给定域信息作为先验知识的基础上,很难捕捉时间序列的不变分布。本文提出DIVERSIFY框架,解决有着“动态分布”的时间序列的OOD检测和泛化问题。具体操作是,迭代操作,先通过对抗训练得到一个最差的(“worst-case”)潜在(“latent”)分布情况,再最小化潜在分布的差距。用提取到的特征或者模型输出做分布外检测,同时也用输出做分类。从理论上阐明了可行性。在七个不同OOD设定的数据集上进行了实验。
潜在分布:因为时间序列随时间变化,所以可能一段时间后的数据与前一段数据差异比较大,切分成多个序列视作不同分布,最终1个域可以划分出多个分布。文章有时也称其sub-domain。
1 Introduction
OOD detection 和 OOD generalization 的主要区别是前者针对的问题是标签偏移,后者是特征偏移。
标签偏移主要发生在classes里,unseen的目标域可能会有源域中没出现过的classes。
特征偏移主发生在输入中,源域目标域输入数据可能有不同的特征分布。
OOD detection 可以看做一个特殊的分类任务,进行ID和OOD的“分类”。
OOD generalization 现有的方法是努力减少给定域的差距学习域不变特征,迁移到unseen的目标域。
但现有的OOD方法都不很适用time series,因为不平稳性带来了特征空间的空间偏移(spatial shift)之外的时间偏移(temporal shift),latent、dynamic、variable。就很难对序列数据进行预分割或基于先验知识划分(先验在变)。而且似乎没有考虑到时间偏移的时间序列OOD数据集。
不考虑划分潜在分布/子域的情况下,很容易对时间序列误分类。
DIVERSIFY最终的想法是不用原有的域标签描述数据的潜在分布(原有的可能会给检测和泛化带来不利影响)。
具体:min-max对抗:一方面,以最大化segment-wise的分布差距(“worst-case”)以保留多样性的目的学习将分布segment为一些潜在分布(latent-distribution);一方面通过减小上一步的得到的潜在域间的分布散度学习域不变特征。得到characterized latent domain之后的下游目标(OOD detection 和 generalization),对其提出了实现方法。对detection提出了(DIVERSIFY-MAH、DIVERSIFY-MCP)。
贡献:1.提出OOD detection 和 generalization 问题解决的通用框架DIVERDIFY,可以划分潜在分布和泛化表征。2.提出2种OOD detection实现方法。3.好的表现和有洞察力的结果。4.可扩展。
2 Related work
2.1 时间序列分析
主要是基于时间关系的模型。
2.2 Domain/OOD generalization
区别于迁移学习,迁移学习的目标域不同但相关,DG和OOD generalization的目标域是unseen的,不能用于训练。现有方法可以大致分三类:data manipulating,representation learning,learning stategy。(可以看王晋东老师的综述)。大多数方法假设训练的时候域标签时刻是可获得的。也有方法是使用没有域标签的数据集的,但是会用图像的风格特征做聚类,不能端到端训练,且不适用于时间序列。single domain generalization和本文任务设定相似,就一个训练域。但他们没有再继续找latent分布了,就把每个域当成一个分布。多域的学习和DG类似,在多个域上训练,但还是在训练的域上测试。本文的任务假设分布不重合,研究的是内部(internal)分布偏移,distribution level。
2.3 OOD detection
OOD detection目标是找出类别没有在训练数据中出现过的样本。现有方法主要三类:post-hoc,training-time regularization,training with Outlier Exposure。时间序列问题中还没有能同时处理特征偏移(上面的空间偏移就是特征空间的偏移)和时间偏移的有效方法。
3 Methodology
问题阐述
D
t
r
=
{
(
x
i
,
y
i
)
}
i
=
1
N
D^{tr} = \{(\pmb{x}_i,y_i)\}_{i=1}^{N}
Dtr={(xi,yi)}i=1N 其中,
D
t
r
D^{tr}
Dtr是时间序列训练集,经常会经过滑动窗口处理成
N
N
N个输入,
x
i
∈
X
⊂
R
p
\pmb{x}_i\in\mathcal{X}\subset\mathbb{R}^{p}
xi∈X⊂Rp是一个
p
p
p维的instance,
y
i
∈
Y
=
{
1
,
.
.
.
,
C
}
\pmb{y}_i\in\mathcal{Y}=\{1,...,C\}
yi∈Y={1,...,C}是标签。用
X
×
Y
\mathcal{X}\times\mathcal{Y}
X×Y上的
P
t
r
(
x
,
y
)
\mathbb{P}^{tr}(\pmb{x},y)
Ptr(x,y)表示训练集的联合分布。目标是从
D
t
r
D^{tr}
Dtr上学一个泛化模型,以在一个unseen的
D
t
e
D^{te}
Dte (不能用于训练)目标数据集上predict well。问题中,训练集测试集有相同的输入不同的分布。
X
t
r
=
X
t
e
\mathcal{X}^{tr} = \mathcal{X}^{te}
Xtr=Xte,但
P
t
r
(
x
,
y
)
≠
P
t
e
(
x
,
y
)
\mathbb{P}^{tr}(\pmb{x},y) \neq \mathbb{P}^{te}(\pmb{x},y)
Ptr(x,y)=Pte(x,y)。
OOD detection:
Y
t
r
⊂
Y
t
e
\mathcal{Y}^{tr} \subset \mathcal{Y}^{te}
Ytr⊂Yte,
C
I
D
=
{
1
,
2
,
.
.
.
,
C
n
}
C_{ID} = \{1,2,...,C_n\}
CID={1,2,...,Cn}(分布内类别),
C
O
O
D
=
{
C
n
+
1
}
C_{OOD} = \{C_n+ 1\}
COOD={Cn+1}(分布外类别)。目的是从
D
t
r
D^{tr}
Dtr上学一个模型h检测OOD类别,以及在
D
t
e
D^{te}
Dte的ID类别上有最小的error。
OOD generalization:
Y
t
r
=
Y
t
e
\mathcal{Y}^{tr} = \mathcal{Y}^{te}
Ytr=Yte,分布外泛化中的分布外指特征分布,要在
D
t
r
D^{tr}
Dtr上训练一个模型
h
h
h在
D
t
e
D^{te}
Dte上有最小的error。
Motivation
- 时间序列中域和特征分布偏移是什么?
时间序列可能有很多潜在分布。举例:传感器收集了3个人的数据,这3份数据可能划分到2个分布,这是 spatial 分布偏移。但是其中单个人的数据可能随时间而改变,这份数据又可以划分到2个分布,这是 temporal 分布偏移。label 偏移可以是(走、跑、跳)ID,但测试数据中不光有这些,还有(摔),这个就OOD了。 - 潜在域表征(characterization)对于OOD的检测和泛化是必不可少的。
由于non-stationary特性,把时间序列粗略看成一个分布的一般方法很难捕捉域不变性,因为他们忽视了数据集中的多样性,会造成误分类。所以为了更好地做OOD检测和泛化,需要characterize多样的潜在分布。 - latent域表征的主要公式
一个时间序列可能存在K个未知的潜在分布(K太小,划分粗糙,K太大,不好优化,这里可手动调,但希望未来可以对这个参数进行学习)。
P t r ( x , y ) = ∑ i = 1 K π i P i ( x , y ) \mathbb{P}^{tr}(\pmb{x},y) = \sum_{i=1}^{K}\pi_{i}\mathbb{P}^{i}(\pmb{x},y) Ptr(x,y)=∑i=1KπiPi(x,y)
∑ i = 1 K π i = 1 \sum_{i=1}^{K}\pi_{i} = 1 ∑i=1Kπi=1
i i i表示第i个潜在域。有无限种划分方式,但是目标是找worst-case,任意两个隐域(也是latent)之间的散度都最大化了。worst-case是为了留存多样性,更好地学习泛化。
DIVERSIFY
4步,2-4步迭代进行。
-
预处理
把数据通过滑动窗口切分成固定大小,作为最小的域unit。 -
fine-grained feature update(细粒度特征更新)
用伪标签作为监督更新特征提取器参数。
提出一个新概念:通过伪造domain-class标签充分利用域和类别的信息,并以伪标签作为特征提取器学习的监督。这样学习到的细粒度特征更合域、类别都相关,而不仅只与一方有关。
第一次迭代,domain标签 d ′ = 0 d'=0 d′=0(因为数据事实上只来自同一个域,现在加标签是为了区分不同latent域)。每个类别每个域(latent)赋予一个标签 s ∈ { 1 , 2 , . . . , S } s\in\{1,2,...,S\} s∈{1,2,...,S}, S = K × C S = K \times C S=K×C, K K K是latent域个数(pre-defined), C C C是class个数。 s = d ′ × C + y s = d' \times C + y s=d′×C+y(指针遍历二维数组那个道理)。 f / b / c f/b/c f/b/c 对应 feature extractor / bottlenect / classifier。损失是交叉熵。这部分损失期望是针对 S S S个类别分类的损失期望,优化 h f 2 h_f^2 hf2的方向是最小化这部分损失,学习细粒度可区分domain-class全类别的特征。
-
latent distribution characterization(潜在域表征?识别?描述?)
为每个instance识别域标签,并获取潜在域信息。这一步最大化分布间差距以增大多样性。
用改版的对抗式训练从类别标签中解缠域标签。但没有实际的域标签,阻碍了解缠。所以应用了自监督伪标签策略获取域标签。
a. 先用每个域的类别(class)无关特征获取每个域的centroid μ ~ k \tilde{\mu}_{k} μ~k。 δ k \delta_k δk是 x i x_i xi这个数据经过(f/b)之后的特征向量经过(c:针对K个域的分类)的第 k k k类的分类softmax分数(0-1),作为权值加权经过(f/b)得到的特征向量,再除以该域权值和。得到 μ ~ k \tilde{\mu}_{k} μ~k。
b. 对每个instence以距离最近的centroid的域标签作为自己的伪域标签 d i ′ ~ \tilde{d'_{i}} di′~。
c. 得到伪域标签后以此作为判断域的标准,对归属于同一域的特征向量计算平均值作为 μ k \mu_{k} μk
d. 再用 μ k \mu_{k} μk计算一次伪域标签 d i ′ d'_{i} di′
损失包括两部分,一部分是 L s e l f L_{self} Lself是上述自监督获取伪域标签过程产生的损失。一部分是分类产生的损失(C个类别的分类), h a d v h_{adv} hadv包括上面架构图中的绿色部分的 classifier 和 linear。涉及一个梯度反转层,因为,对 h a d v h_{adv} hadv是要最小化分类损失,但是为了模糊类别的区分,增强latent域的区分,(f/b)的优化是要最大化类别分类的损失的。
-
domain-invarient representation learning(域不变表征学习)
利用上一步得到的伪标签学习域不变特征并训练泛化模型。
这一步从DANN借鉴而来(读书人的事)。
这一步又和上一步形成对抗,这一步(f/b)的优化要最小化类别分类的损失,最大化域分类的损失,为了学习域不变特征。 h a d v h_{adv} hadv是要最小化域分类损失,同样有梯度反转层。
然后,迭代直到收敛或最大epoch。与现有方法不同的是,最后两步只优化最后几个独立的层。大部分可训练参数在模块之间是共享的,这表明该方法与现有方法具有相同的模型大小。最后一步的模块用于推理。(只优化最后几个独立的层,那后两步是不优化(f/b)吗?)
for OOD detection
训练如常,测试时结合post-hoc方法分别处理representation和logit。
- DIVERSIFY-MAH
Mahalanobis distance-based confidence score 马氏距离置信度分数。(简洁点的)
- DIVERSIFY-MCP
maximum class probability
v = > y ′ ~ v => \tilde{y'} v=>y′~
就是softmax分数,他还建议可以加温度T(我猜,他在凑)。
for OOD generalization
注意,虽然都用softmax分数,但是检测和泛化有不一样的测试集,检测标签OOD,泛化标签ID,可以回看问题阐述。
理论角度
4 Experiments on OOD detection
三类任务:手势识别,可穿戴压力和影响检测,以及基于传感器的活动识别。
数据集:6个
手势识别:EMG 7选6作为ID。we set the window size to 200 and the step size to 100, which means there exist 50% overlaps between two adjacent sample。
AUROC
AUPR
5 Experiments on OOD generalization
四类任务:手势识别,语音命令识别,可穿戴压力和影响检测,以及基于传感器的活动识别
手势识别:36名受试者分进4个domain。
6 Analysis
消融分析
- step 3 为什么要用class-invariant 特征获取伪域标签?
如果用一般特征,得到的域标签可能和类别标签有关,在学习域不变表征时可能会产生矛盾带来一般的表现。 - step 2 为什么要用 fine-grained domain-class 标签?
无论仅用其中哪一类的标签,都会造成表征向这一类的偏差,造成对另一类很差的分类性能。 - 潜在域划分越多越好?
不是。划分太多了可能会破坏数据内在特性。会给伪造域标签带来麻烦。
参数敏感度
主要参数有 K K K,step 3梯度反转层的 λ 1 \lambda_1 λ1,step 4梯度反转层的 λ 2 \lambda_2 λ2,epochs和rounds。
可视化研究
我们提供了一些可视化来展示多样化的基本原理。在检测方面,图9(a)和图9©表明,diversified可以更好地学习边缘并产生很少的错误分类,而图9(d)和图9(f)表明,diversified可以压缩和区分OOD样本。为了泛化,在图10(a)中,不同初始域标签的数据点混合在一起,而在图10(b)中,diversity可以很好地表征不同的潜在分布并将其分离。图10(d)和10©表明,与最新的方法ANDMask相比,diversified可以更好地学习域不变表示。综上所述,多样化可以找到更好的表征来增强泛化。
Quantitative analysis for ‘worst-case’ distributions
计算
H
\mathcal{H}
H-divergence。,latent sub-domains generated by our method have larger H-divergence among each other。
7 Limitation and discussion
限制:自动学习参数K;划分分布时加入更多经验知识;预测问题。
8 Conclusion
按我的想法,他先切再分,原来的长数据变成短数据,这些短数据再组合进不同的分布。如果一个序列时间偏移比较小,切分后划进一个类可能性还是比较高的,但是时间偏移大的话,那很可能一个父序列的多个子序列分进很多不同的类。现在用domain-class标签来学习特征,学既能区分子域又能区分类别的特征,如果只用类别特征,忽略他的域,学到的特征大概就只根据可以区分类别的特征了(比如最高值超过a是A类的特征,就划为A类,但没有考虑它随时间变化很快,这其实是父序列P的特征,父序列P的其它子序列都没有超过a的,但是我超过了,是因为时间偏移,但是我确实是P的子序列,P是B类的(讲不清楚,大概就是切了之后只按一方面分类根本不准))。step3感觉像聚类(或者就是聚类),并且让不同类在特征空间上的差异越来越大,然后我从上面学域不变特征是不是显得更具有泛化性,这么不同的,worst-case都被我同化了,还有谁!!!最后,要域不变的特征,毕竟我要做分类,我不管你域哪个,我不看你域专属的特征,我看你其他特征,分出你是哪一类就可以。