Federated Learning

[CVPR 2021] PROSER - (1) 본문

Machine Learning/Out-of-Distribution Detection

[CVPR 2021] PROSER - (1)

pseudope 2023. 2. 17. 18:00
728x90

논문 제목: Learning Placeholders for Open-Set Recognition

출처: https://arxiv.org/abs/2103.15086

 

 이번 포스트에서는 Open Set Recognition(OSR) 기법 중 하나인 PROSER method에 관하여 알아보도록 하겠습니다. OSR을 블로그에서 처음 다루기 때문에, 우선 이에 대하여 간략히 언급하면서 시작하겠습니다.

 

0. Closed Set과 Open Set

 

 여기에서 이야기하는 open, closed는 topology에서의 개념과 무관합니다. (단적으로, topology에서는 clopen이라는 개념이 존재하지만, 여기에서는 open과 closed는 서로 반대되는 개념입니다.) 어떠한 test dataset이 open되어 있다는 것은, model의 학습에 사용되지 않은 새로운 class에 해당하는 data가 test dataset에 존재할 수 있음을 의미합니다. 그리고 OSR은 Open Set으로부터 새로운 유형의 data가 test time에 들어왔을 때 "어라, 이 data는 못 본 종류의 것인데?"라고 model이 반응하도록 만드는 것이 목표입니다. 이러한 맥락에서, 어떠한 연구자들은 OSR을 Out-of-Distribution Detection(OoDD)으로 지칭하기도 하는데, 이 둘을 엄밀하게 구분하는 사람들도 존재합니다. (만약 이 둘을 구분하여 사용한다면, 전자는 비슷한 맥락이지만 어찌됐든 본 적 없는 data가 outlier로 들어오는 경우를, 후자는 이와 더불어 전혀 다른 맥락의 data도 outlier로 들어오는 경우를 지칭합니다.) 저는 이 둘을 구별하지 않고 사용하도록 하겠습니다.

 

 그리고 Closed Set은 Open Set에 반대되는 개념으로 정의합니다. 즉, 우리가 지금까지 줄곧 해왔던 model 학습 방식이 사실 "test dataset은 Closed되어 있다", 다시 말해 "test time에 새로이 들어오는 유형의 data는 없다"는 가정 하에 진행되었던 것이고, OSR을 연구하는 사람들은 이러한 가정이 현실 세계에 적절하게 부합하지 못 한다는 점을 지적하고 있는 상황입니다.

 

 우선, 기존의 Closed Set Classification 과정을 살펴보겠습니다. train dataset $\mathcal{D}_{train} := \{ (x_i, y_i) \}_{i=1}^L$, 그리고 test dataset $\mathcal{D}_{test} := \{ (x_i, y_i) \}_{i=1}^M$가 있다고 가정합시다. 이때, $\textbf{x}_i \in \mathbb{R}^D$는 data, $y_i \in Y := \{ 1, 2, \cdots, K \}$는 그 data에 해당하는 label입니다. Closed Set을 가정하였기 때문에, $\mathcal{D}_{train}$과 $\mathcal{D}_{test}$는 동일한 분포로부터 sampling되었으며, 우리의 목적은 hypothesis set $\mathcal{H}$에 속한 여러 $f$들 중에서 다음을 만족하는 $f^*$를 찾는 것입니다:

$$f^* := \text{argmin}_{f \in \mathcal{H}} \; \mathbb{E}_{(\textbf{x}, y) \sim \mathcal{D}_\text{test}} \mathbb{I} (y \neq f(\textbf{x}))$$

다시 말해, 우리가 찾고자 하는 $f^*$는 $\mathcal{H}$ 안에서 오답의 개수가 제일 적은 hypothesis 내지는 optimal optimizer입니다. 일반적으로,  어떠한 hypothesis를 찾은 다음에는 $\mathcal{D}_{train}$, $\mathcal{D}_{test}$와 동일한 분포로부터 validation dataset $\mathcal{D}_{val}$을  sampling한 후, 이를 잉용하여 우리가 찾은 것이 적절한 것인지 판단하는 과정을 추가적으로 거치게 됩니다.

 

 다음으로, Open Set Recognition이 동작하는 방식을 살펴보겠습니다. train dataset은 $\mathcal{D}_{train} := \{ (x_i, y_i) \}_{i=1}^L$로 기존과 동일할 것입니다. 하지만 OSR에서의 test dataset $\hat{\mathcal{D}}_{test}$는 $\hat{\mathcal{D}}_{test} := \{ (x_i, y_i) \}_{i=1}^N$인데, 여기에서 $\textbf{x}_i \in \mathbb{R}^D$는 data, $y_i \in Y := \{ 1, 2, \cdots, K, K + 1 \}$는 그 data에 해당하는 label입니다. Closed Set Classification에서는 존재하지 않았던 $K + 1$번째 class가 존재하는데, 이것은 novel class, unknown class 등으로 불리는 것으로, 기존에 학습하지 않았던 유형의 data를 분류하기 위한 label입니다. 물론, 그러한 data가 여러 종류일 수도 있습니다만, OSR에서는 unknown class들을 다시금 분류하는 데에는 그다지 관심을 가지고 있지 않습니다. (이와 관련한 자료를 찾고 계신다면, Class Incremental Learning 쪽을 알아보시기 바랍니다.)

 

 이제 test dataset이 바뀌었으니, optimal classifier를 찾는 과정도 다음과 같이 수정되어야 합니다:

$$\hat{f}^* := \text{argmin}_{f \in \mathcal{H}} \; \mathbb{E}_{(\textbf{x}, y) \sim \hat{\mathcal{D}}_\text{test}} \mathbb{I} (y \neq f(\textbf{x}))$$

다만, 이 방식에는 한 가지 문제가 있는데, model이 over-confident하기 때문에 $K + 1$번째 class, 즉, unknown class로 예측하는 일이 잘 없다는 것입니다. 다시 말해서, 새로운 유형의 data가 들어와도 기존에 알고 있던 class로 분류하는 일이 자주 발생하게 되고, 이는 곧 알고 있던 class에 대한 분류 정확도와 새로운 유형의 data에 대한 검출 정확도 모두 감소하는 결과로 이어지게 됩니다. OSR에 관한 여기에서부터 비롯되었습니다.

 

1. 기존의 OSR methods

 

 조금 더 자세하게 이야기하기 위하여, 각 $f$가 $f(\textbf{x}) = W^T \phi (\textbf{x})$로 decomposed된다고 합시다. 여기에서 $\phi (\cdot): \mathbb{R}^D \to \mathbb{R}^d$는 embedding function이고, $W \in \mathbb{R}^{d \times K}$는 linear classifier입니다. 이때, $W$는 $W = [w_1, \cdots, w_K]$로 구성되어 있고, 각 class $k$에 대한 output logit은 $w_k^T \phi (\textbf{x})$가 될 것입니다.

 

\begin{equation} \hat{y} = \begin{cases} \text{argmax}_{k = 1, \cdots, K} \; \textbf{w}_k^T \phi (\textbf{x}) & \text{if $ \text{conf} > \text{th}$} \\ K + 1 & \text{otherwise} \end{cases}, \text{ where } \text{conf} = \max_{k = 1, \cdots, K} \textbf{w}_k^T \phi (\textbf{x}) \end{equation}

 

 선행 연구들은 크게 두 가지 방식의 접근을 하였는데, 위의 식과 같이 적절한 threshold $\text{th}$를 선택하는 것이 그중 한 가지였습니다. 하지만 이와 같이 threshold에 기반한 OSR 기법들은 한 가지 치명적인 문제점을 가지고 있었습니다. OoD data도 저마다 가지각색이기 때문에, 어떠한 OoD data에 대해서는 잘 작동하던 threshold도 다른 OoD data에 대해서는 정상적으로 작동하지 않는 일이 발생하는 것이었죠. 가령 오른쪽 그림의 예시를 살펴보면, vehicle의 경우 기존의 dataset과 판이한 성격의 data이기 때문에 사전에 지정한 threshold를 사용해도 큰 문제가 없었지만, tiger의 경우 기존에 잘 알려진 cat class와 유사한 성격을 지닌 data이기 때문에 동일한 threshold를 사용하였을 때 unknown임에도 known class로 분류하는 오류가 발생한 것을 확인할 수 있습니다. 이러한 문제를 해결하려면 매번 새로운 threshold를 지정해주어야 하는데, 이는 현실적으로 어렵습니다.

 

 다른 접근 방식으로는 GAN 등의 생성 기법을 이용하여 outlier를 만들어낸 후, 이 outlier들에 기반하여 학습하는 것이 있었는데, generating을 위한 별도의 model을 갖고 있어야 한다는 점, 그리고 outlier를 만들어내는 데에 많은 시간이 소요된다는 점 등이 단점으로 지적되었습니다.

 

 다음 포스트에서는 기존의 두 가지 접근 방식이 지닌 문제점들을 마주한 PROSER의 해결책에 관하여 알아보도록 하겠습니다.

'Machine Learning > Out-of-Distribution Detection' 카테고리의 다른 글

[CVPR 2018] Evidential Deep Learning - (1)  (1) 2023.04.29
[CVPR 2021] PROSER - (4)  (0) 2023.03.01
[CVPR 2021] PROSER - (3)  (1) 2023.02.28
[CVPR 2021] PROSER - (2)  (0) 2023.02.25
Comments