NeurIPS 2020에서 발표된 CSI: Novelty Detection via Contrastive Learning on Distributionally Shifted Instances 라는 논문이다. Out-of-distribution detection에 SimCLR을 토대로 한 contrastive learning을 적용하였다.
논문: https://arxiv.org/pdf/2007.08176.pdf
코드: https://github.com/alinlab/CSI
Abstract
Novelty detection이라고도 부르는 Out-of-distribution (OOD) detection은, 주어진 sample이 training distribution 내부의 것인지 (in-distribution), 외부의 것인지 (out-of-distribtuion)을 판단하는 문제이다.
본 논문에서는 contrastive learning을 이용한 Contrasting shifted instances (CSI) 라는 방법을 제안하며, 이는 각 sample 뿐만 아니라 distributionally-shift augmented sample 역시 contrast (대조) 대상으로 두는 방법이다. 이에 추가로, 제안한 방법에 알맞는 detection score을 제안한다.
1. Introduction
Out-of-distribtuion (OOD) detection.
Out-of-distribtuion (OOD) detection이란, 어떠한 test input이 training distribution 으로부터 온 것인지 (in-distribution), 아닌지 (out-of-distribution)을 판단하는 문제이다. 일반적으로, 학습 과정에서는 training data만 주어지며, OOD sample space는 매우 크기 때문에, OOD space에 대한 특정한 prior knowledge를 이용하려는 시도는 오히려 특정 OOD에 대한 bias만 심어줄 수 있다. OOD detection은 medical domain이나 autonomous driving, industrial 등에서 유용하게 사용될 수 있다. OOD detection에 대한 보다 자세한 설명은 다음 링크를 참고 바람. (link)
Previous works.
OOD detection을 하기 위한 많은 시도들이 있었는데, 그 중 하나는 one-class classification이다. 이는 training sample 끼리 최대한 가까워지게 하는 feature mapping $\phi(\cdot;\mathcal{W}):\mathcal{X}\rightarrow\mathcal{F}$을 학습한다. Test sample에 대하여, feature space $\mathcal{F}$ 에서 center point $c$ 와 멀리 떨어져 있을수록 out-of-distribution, 가까울 수록 in-distribution에 가깝다고 판단한다. One-class classifier에 대한 보다 자세한 설명은 다음 링크를 참고 바람 (link)
또 다른 방법은 Autoencoder를 이용한 방법이다. Training sample들을 이용해 input image를 압축한 뒤 다시 원래의 image로 복원하는 autoencoder를 이용하고, test sample에 대해 autoencoder로 복원한 결과와의 차이를 비교해 reconstruction error이 높을 경우 out-of-distribution으로 판단한다.
본 논문에서는 contrastive learning을 이용해 OOD detection을 수행한다. Contrastive learning이란, 비슷한 여러 개의 view의 sample들끼리 서로 attract하고, 다른 sample들끼리는 repell하도록 함으로써 strong inductive bias를 추출하는 방법이다. 이 중 Instance discrimination은 contrastive learning의 한 종류로, 여러 개의 view를 만드는 방법으로 서로 다른 augmentation들을 사용한다.
일반적인 contrastive learning은 in-distribution에서의 각 sample들을 구별하는 것이 목적인 반면, 본 논문에서 제안하는 CSI는 in-distribution과 OOD sample들을 서로 구별하는 것이 목적이다. CSI는 "hard" augmentation들을 활용하는 방식으로 contrastive learning을 수정하여 OOD detection에 사용한다.
2. Method
Problem definition.
우선, OOD detection에 대한 problem definition은 다음과 같다.
- 전체 data space를 $\mathcal{X}$ 라 하고, data distribution $p_{data}(x)$ 에서 sample된 Dataset을 $\{x_m\}_{m=1}^M$ 라고 하자.
- 이 때, OOD의 목적은 $x$가 in-distribution $p_{data}(x)$에서 sample된 것인지 아닌지를 판별하는 detector $\{x_m\}$ 을 modeling하는 것이다.
- $p_{data}(x)$를 바로 modeling하는 것은 어렵기 때문에 많은 방법들은은 score function $s(x)$을 정의하여 사용한다.
Contrastive learning.
본 논문에서 제안하는 방법은 Contrastive learning을 이용하고 있다. Contrastive learning이란, 서로 비슷한 sample들과 그렇지 않은 sample들을 구분함으로써 중요한 정보들을 추출할 수 있는 encoder $f_\theta$를 학습하는 방법이다.
- $x$ 를 query, $\{x_+\}$ 와 $\{x_-\}$ 를 각각 positive sample과 negative samples의 set이라 하고,
- $sim(z, z'):= \frac{z\cdot z'}{||z||||z'||}$ 을 consine similarity라 하자.
- 이 때, contrastive loss의 기본 형태는 다음과 같이 된다:
- $\mathcal{L}_{con}=(x, \{x+\}, \{x_-\}):=-\frac{1}{|\{x_+\}|}\log\frac{\sum_{x'\in\{x_+\}}\exp(sim(z(x),z(x'))/\tau}{\sum_{x'\in\{x_+\}\cup\{x_-\}}\exp(sim(z(x),z(x'))/\tau}$
- $|\{x_+\}|$ : cardinality of the set $\{x_+\}$
- $z(x)$: output feature of the contrastive layer
- It can be defined by applying an additional projection layer $g_\phi$:
- $z(x)=g_\phi(f_\theta(x))$
- It can be defined by applying an additional projection layer $g_\phi$:
- $\tau$: temperature (hyperparameter)
- $\mathcal{L}_{con}=(x, \{x+\}, \{x_-\}):=-\frac{1}{|\{x_+\}|}\log\frac{\sum_{x'\in\{x_+\}}\exp(sim(z(x),z(x'))/\tau}{\sum_{x'\in\{x_+\}\cup\{x_-\}}\exp(sim(z(x),z(x'))/\tau}$
SimCLR.
본 논문에서는, instance discrimination을 이용한 SimCLR를 토대로 삼고 있다.
- $\tilde{x}_i^{(1)}$ 와 $\tilde{x}_i^{(2)}$ 를 pre-defined augmentation family $\mathcal{T}$ 에서 온 $x_i$의 서로 다른 augmentation들이라고 하자.
- i.e., $\tilde{x}_i^{(1)}:=T_1(x_i)$, $\tilde{x}_i^{(2)}:=T_2(x_i)$, where $T_1, T_2 \sim \mathcal{T}$.
- 이 때 SimCLR objective는 $(\tilde{x}_i^{(1)}, \tilde{x}_i^{(2)})$ 와 $(\tilde{x}_i^{(2)}, \tilde{x}_i^{(1)})$ 를 query-key pair로 하고 나머지를 negative로 하는 contrastive loss를 이용해 정의할 수 있다.
- Batch $\mathcal{B}:=\{x_i\}_{i=1}^B$ 에 대해, objective는 다음과 같이 정의된다:
- $\mathcal{L}_{SimCLR}(\mathcal{B};\mathcal{T}):=\frac{1}{2B}\sum_{i=1}^B\mathcal{L}_{con}(\tilde{x}_i^{(1)},\tilde{x}_i^{(2)},\tilde{\mathcal{B}}_{-i})+\mathcal{L}_{con}(\tilde{x}_i^{(2)},\tilde{x}_i^{(1)},\tilde{\mathcal{B}}_{-i})$
- $\tilde{\mathcal{B}}:=\{\tilde{x}_i^{(1)}\}_{i=1}^B \cup \{\tilde{x}_i^{(2)}\}_{i=1}^B$
- $\tilde{\mathcal{B}}_{-i}:=\{\tilde{x}_j^{(1)}\}_{j\neq i} \cup \{\tilde{x}_i^{(2)}\}_{j\neq i}$
- $\mathcal{L}_{SimCLR}(\mathcal{B};\mathcal{T}):=\frac{1}{2B}\sum_{i=1}^B\mathcal{L}_{con}(\tilde{x}_i^{(1)},\tilde{x}_i^{(2)},\tilde{\mathcal{B}}_{-i})+\mathcal{L}_{con}(\tilde{x}_i^{(2)},\tilde{x}_i^{(1)},\tilde{\mathcal{B}}_{-i})$
CSI.
SimCLR에서는, 어떠한 augmentation family $\mathcal{T}$ 를 사용했을 때 더 나은 representation을 학습할 수 있는지에 대한 실험을 진행했다. 즉, encoder $f_\theta$가 어떤 transformation을 postive로 두었을 때 더 좋은 성능을 보이는지에 대한 실험이다. 그 결과, rotation을 포함한 일부 augmentation들은, SimCLR의 성능을 오히려 떨어트릴 수도 있다는 결론이 도출되었다.
본 논문에서는, 그러한 augmentation들을 negative sample로 활용함으로써 OOD detection에 유용하게 사용될 수 있을 것으로 보았다. CSI는 그러한 augmentation family를 (distribution-) shifting transformation $\mathcal{S}$ 이라 정의한다.
CSI objective는 두 단계로 구성된다. 우선, 가장 중요한 부분인 con-SI는 다음과 같다. 이는 contrastive learning의 역할을 하는 loss이다.
- Identity $I$ 를 포함해, $K$ 개의 서로 다른 transformation을 포함하는 set $\mathcal S$ 을 정의한다:
- $\mathcal S := \{S_0=I,S_1,...,S_{K-1}\}$
- Augmented sample들을 positive로 고려하는 SimCLR과 달리,
- CSI는 만약 augmentation이 $\mathcal S$ 로부터 왔다면, 그들을 negative로 고려한다.
- 이때 contrasting shifted instances (con-SI) loss는 다음과 같다:
- $\mathcal L_{con-SI}:=\mathcal{L}_{SimCLR}(\cup_{S\in\mathcal{S}}\mathcal{B}_S;\mathcal{T})$
- $\mathcal{B}_S:=\{S(x_i)\}_{i=1}^B$
- 이 때 각 distributionally-shifted sample (i.e., $S \neq I$) 들은, OOD로 간주된다.
- 또한, con-SI는 in-distribution (i.e., $S=I$) sample과 OOD (i.e., $S\in\{S_1, ..., S_{K-1}\}$) sample들을 서로 구분하려고 한다.
- 참고로, 이 방법은 standard clsasification의 representation을 개선시키지는 않는다. 단지 OOD detection의 representation의 성능을 개선시킬 뿐이다.
- $\mathcal L_{con-SI}:=\mathcal{L}_{SimCLR}(\cup_{S\in\mathcal{S}}\mathcal{B}_S;\mathcal{T})$
두 번째 단계인 cls-SI는 다음과 같다. 이는 auxiliary classifier을 이용한 loss이다.
- Given input $x$ 에 대해, 어떤 shifting transformation $y^S\in\mathcal{S}$ 이 가해졌는지를 맞추는 auxiliary task를 추가로 정의한다.
- 이를 위해, 다른 연구들과 마찬가지로 auxiliary softmax classifier $p_{cls-CI}(y^S|x)$ 를 modeling하기 위한 linear layer을 $f_\theta$ 에 추가한다.
- $\tilde{\mathcal{B}}_S$ 를 SimCLR을 통해 augment된 batch $\mathcal{B}_S$ 라고 하자. 이 때 classifying shifted instances (cls-SI) loss는 다음과 같다:
- $\mathcal L_{cls-SI}:=\frac{1}{2B}\frac{1}{K}\sum_{S\in\mathcal{S}}\sum_{\tilde{x}_S\in\tilde{\mathcal{B}}_S}-\log p_{cls-SI}(y^S=S|\tilde{x}_S)$
최종 loss는 위 두 loss의 weighted sum으로 구성된다.
$\mathcal L_{CSI}=\mathcal{L}_{con-SI}+\lambda\cdot\mathcal{L}_{cls-SI}$
본 논문에서는 $\lambda=1$ 로 설정하여 실험을 진행했다.
SupCLR.
여기에 추가로, in-distribution의 class를 예측하는 extension을 함께 제안한다. Labeled dataset $\{(x_m,y_m)\}_m$이 주어졌을 때, classification의 confidence를 높일 수 있는 confidence-calibrated classifier을 학습하기 위해, supervised contrastive learning (SupCLR)을 이용한다. Confidence-calibrated classifier의 목적은 다음과 같다:
- accurate on predicting y when x is in-distribution,
- the confidence $s_{sup}(x):=\max_yp(y|x)$ is well-calibrated, i.e., $s_{sup}(x)$ should be low if $x$ is an OOD sample or $\text{argmax}_yp(y|x)\neq$ true label.
SupCLR은 SimCLR의 supervised extension으로, 각 sample을 instance-wise가 아닌 class-wise하게 대조한다. 같은 class에 속한 sample들은 positive로 두고, 다른 class에 속한 sample들은 negative로 둔다. Embedding network $f_\theta(x)$ 의 학습이 끝난 후에, $p_{SupCLR}(y|x)$ 을 modeling하기 위한 linear classifier을 $f_\theta(x)$ 에 대하여 학습한다.
CSI의 Supervised extenstion (SupCLR)은 다음과 같이 정의된다.
- $\mathcal{L}_{sup-CSI}:=\mathcal{L}_{SupCLR}(\cup_{S\in\mathcal{S}}\mathcal{C}_S;\mathcal{T})$
- $\mathcal{C}S:=\{(S(x_i),(y_i,S))\}_{i=1}^B$
How to choose shifting transformation?
Shifting transformation으로 어떤 것을 이용할 지는, vanilla SimCLR을 이용해 각 transformation의 OOD-ness를 측정하여 사용한다. OOD-ness를 측정하는 방법은, OOD detection score을 통해 in-distribution과 transformed sample 간의 AUROC를 측정하면 되는데, 본 논문에서는 새로운 OOD detection score 두 가지를 제시하고, 이 중 첫 번째를 shifting transormation을 정하기 위한 OOD-ness를 측정하는 데에 사용하고, 두 번째를 실제로 test 단계에서 OOD detection을 하는 데에 사용한다.
첫 번째 방법은 SimCLR representation의 feature들을 이용한 방법이다. 본 논문의 저자들은 두 가지의 feature이 OOD sample을 탐지하는 데에 매우 유용함을 발견했다.
A. the cosine similarity to the nearest training sample in $\{x_m\}$: $\max_msim(z(x_m),z(x))$
Training sample 중, feature space에서 가장 가까운 sample과의 cosine similarity이다. In-distribution sample들의 경우, 해당 값이 거의 1.0에 가까운 반면, OOD sample들의 경우 그 값의 분포가 훨씬 작았다. 그 이유는 SimCLR가 각 sample들 간의 거리가 최대한 멀어지는 방향으로 학습하지만, 비슷한 sample들의 경우 그 거리가 가까워지기 때문에 (t-SNE에서 이를 확인할 수 있다) in-distribution sample들의 경우 "가장 가까운" sample과의 거리는 가깝게 되는 것이다. 반면 OOD sample들의 경우, training set에서 비슷한 sample이 없기 때문에 그 거리가 상대적으로 멀어진다 ((c) 그림 참고).
B. the norm of the representation: $||z(x)||$
두 번째는 representation의 norm이다. SimCLR의 objective에는 각 vector가 normalize되어 들어가기 때문에 (cosine similarity 수식을 보면 알 수 있다) in-distribution과 OOD의 norm 값에 차이가 나는게 의아할 수 있다. 본 논문의 저자들은 이들을 다음과 같이 설명한다. "두 vector 간의 cosine similarity를 최대화하기 위한 쉬운 방법은, 두 vector의 norm을 키우는 것이다. 두 feature 간의 거리를 direct하게 줄이는 것보단, 전체 norm을 키우는 것이 relative distance를 줄이기 위해 더 쉬운 방법을 제공한다." (직관적으로 보자면 이 설명이 이해가 가고, 결과적으로 봤을 때 OOD sample의 전체적인 norm이 in-distribution sample보다 작다 ((b), (c) 그림 참고). 또한 norm을 score로 했을 때 실제로 epoch가 늘어날 수록 AUROC가 증가하는 것을 확인할 수 있다 (a). 실험결과와 직관적인 설명이 이를 뒷받침하지만 수학적으로 증명되지 않아 아쉽다.)
이 둘을 결합하여, 최종 detection score $s_{con}$은 다음과 같이 정의된다.
$s_{con}(x;\{x_m\}):=\max_msim(z(x_m),z(x))\cdot||z(x)||$
앞서 말했다시피 이 score의 AUROC를 vanilla SimCLR에 적용해 shifting transformation을 결정했고 (=OOD-ness), 그 결과는 다음과 같다. 실험대상은 perm을 제외하고는 모두 SimCLR에서 성능을 떨어트린다고 보고된 바 있는 augmentation들이며, CIFAR-10을 dataset을 이용해 실험을 진행하였다.
표에서 볼 수 있듯이, Rotate의 OOD-ness가 제일 높았기 때문에, 0, 90, 180, 270도 rotation을 shifting transformation으로 사용했다.
두 번째 방법은 CSI를 이용했을 때 사용 가능한 score이다. 두 가지의 추가적인 score이 정이되는데, 이들은 다음과 같다.
- $s_{con-SI}(x;\{x_m\}):=\sum_{S\in\mathcal S}\lambda_S^{con}s_{con}(S(x);\{S(x_m)\})$
- $\lambda_S^{con}:=M/\sum_ms_{con}(S(x);\{S(x_m)\})=M/\sum_m||z(S(x_m))||$: balancing term to scale the scores of each shifting transformation.
- it is an expectation of $s_{con}$ over $S\in\mathcal S$.
- $s_{cls-SI}(x):=\sum_{S\in\mathcal{S}}\lambda_S^{cls}W_Sf_\theta(S(X))$
- $\lambda_S^{cls}:=M/\sum_m[W_Sf_\theta(S(x_m))]$: balancing term
- $W_S$: weight vector in the linear layer of $p(y^\mathcal{S}|x)$ per $S\in\mathcal S$
- If the confidence of correct transformation $S$ is high, then the score is high.
CSI representation을 이용한 최종 score은 다음과 같다.
$s_{CSI}(x;\{x_m\}):=s_{con-SI}(x;\{x_m\})+s_{cls-SI}(x)$
3. Experiments
Setup.
Backbone으로 ResNet-18을 사용했고, positive sample을 생성하기 위한 data augmentation $\mathcal{T}$로는 inception crop, horizontal flip, color jitter, grayscale을 이용했다.
shifting transformations $\mathcal{S}$의 경우 앞서 언급한 바와 같이 random rotation 0, 90, 180, 270를 사용했다.
Unlabeled one-class datasets.
하나의 dataset을 이용해, 하나의 class는 in-distribution으로 두고 나머지 class를 OOD로 두어 실험하였다.
Unlabeled multi-class datasets.
하나의 데이터셋을 in-distribution으로, 다른 데이터셋을 OOD로 두어 실험하였다.
Labeled multi-class datasets.
Unlabeled multi-class dataset과 동일한 setting이나, classification task를 추가로 수행하기 위해 앞서 언급한 Sup-CSI를 이용했다.
Ablation study.
Shifting transformation과 관련된 다양한 ablation study를 진행했다.
첫 번째는 다양한 shifting transformation에 따른 성능이다. Rotation 외에도, cutout, sobel, noise, blur, perm, rotate를 이용해 모델을 학습하고 성능을 기록했는데, OOD-ness와 거의 비례하게 OOD detection 성능이 나옴을 확인할 수 있다 (Table 5 (a), second row). 또한, 해당 augmentation들을 shifting transformation이 아닌, 일반 augmentation으로 사용해, positive sample을 만드는 데에 사용한 결과 성능이 baseline에 비해 떨어짐을 확인할 수 있다 (Table 5 (a), first row). 이는 SimCLR에서 제시한 결과와 동일하다. 또한, SimCLR에서 사용한 augmentation들 중 일부를 제거하거나, 이를 shifting transformation으로 실험한 결과도 있는데 (Table 5 (b)), 이를 통해 각 augmentation을 positive sample을 만드는 데에 이용하거나, negative sample을 만드는 데에 이용함으로써 성능이 차이가 날 수 있음을 알려주고 있다.
또한, 본 논문에서는 rotation을 best shifting transformation으로 사용했지만, 이는 dataset에 따라 차이가 날 수 있다고 얘기한다. 예를 들어, rotation-invariant dataset (ex: textile dataset, aerial images) 의 경우 Rotation이 best shifting transformation이 아닐 수도 있다. 이를 보이기 위해 DTD와 Textile dataset을 이용한 실험을 진행했다. 두 dataset 모두 rotation-invariant 한 dataset으로, rotation을 shifting transformation으로 사용했을 때 성능이 좋지 않았고, 대신 gaussian noise를 사용했을 때 좋은 성능을 보였다.
마지막으로, training objective를 하나씩 제거해가며 비교한 결과와, 여러 detection score을 이용한 결과를 첨부한다. 당연하게도 논문에서 제시한 training objective와 detection score을 사용했을 때 결과가 가장 좋다.