글의 목적: 요즘 Continual Learning에 대해서도 논문을 보고 있음 + 해당 논문에 대한 리뷰 글이 없는 것 같아서..
잘못 작성된 부분이 있으면 언제든 메일 주세요
이 논문에서는 먼저 Practical Continual Learning(CL) setting으로 "Blurry" task를 제안한다.
보통 Continual learning은 Online Learning 상황 + task 혹은 class가 increase하게 들어오는 상황을 가정하고 있다.
많은 연구가 Class Incremental Learning(CIL)쪽으로 이뤄지고 있는데, 이때 주의할 지점은 특정 시차(혹은 Task)가 바뀔 때 class가 disjoint하다는 것이다.
(예를 들어, 1번째 task에 seen class와 2번째 task의 seen class는 서로 다르다(disjoint))
그러나 저자들은 이러한 disjoint setting이 현실적이지 않음을 지적하고 각 task간의 일부 겹치는 class가 존재할 수 있는 "Blurry" task를 제안하게 된다.
예를 들어, 여름에는 당연히 수영복과 같은 상품들의 class가 major하겠지만 여전히 패딩과 같은 품목이 존재할 수 있다. 그리고 시간이 지나서 겨울이 되면 minor였던 패딩이 major가 되고, 수영복은 minor가 될 것이다. 이렇듯 현실 setting을 고려할 때, 각 task간 일부 겹치는 class가 존재할 수 있고, 다만 task별로 주어진 class가 major한지 minor한지의 여부가 달라질 수 있겠다.
그렇다면 이러한 문제를 어떻게 풀면 좋을까?
저자들이 먼저 고려한 지점은 "Memory"를 통해 dataset을 저장하되, 이것이 diversity를 보장하는 방식이 되어야 한다고 주장한다.
다양한 task와 그에 맞는 major/minor class가 들어오는 상황에서 모델은 Robust하게 주어진 task들을 잘 수행할 수 있어야 CL상황에서 catastrophic forgetting을 막을 수 있기 때문이다.
이를 위해서 저자들은 per-sample classfication uncertainty + data augmentation 을 융합한 Rainbow Memory를 제안한다.
먼저 이 논문의 method로는 크게 두 가지가 있는데, 하나는 Diversity-Aware Memory Update(4.1 section)과 Diversity Enhancement by Augmentation이 있다.
이 부분에서는 몬테카를로 알고리즘과 베이지룰을 이용해서 주어진 Data(x)의 uncertainty를 구하는 게 핵심이다.
수식적인 부분을 나열하면 아래와 같다.
직관적으로 생각해보면, perturbation을 가한 어떤 를 이용해서 우리는 를 MC 알고리즘을 통해 approximate할 수 있다 (수식 1).
이후 (수식 2,3)을 통해서 x에 perturbation을 가하게 되고, (수식 4)를 통해서 주어진 data 의 uncertainty를 구할 수 있게 된다. 이것의 의미를 해석해보면, T개의 Task마다 perturbation을 가해서 classify task를 수행했을 때, 가장 많이 예측된 class의 횟수를 T(the number of tasks)로 나누어 비율로 만든 이후, 1과 해당 값을 빼주게 된다. 즉, top-1 class가 perturbation이 주어지고 task가 달라지는 상황에서도 robust하게 나온다면 이것은 certainty하다고 말할 수 있겠다. (근데 만약 top-1 class가 자기자신의 원래 label이 아니라 다른 label로 예측이 되는 상황이 될 수도 있지 않나? 그런상황에서도 uncertainty가 낮다는 식으로 판단될텐데 그건 잘못된 certainty를 가지고 있는 게 아닌가?)
이와 같은 기본적인 preliminary 이후에 드디어 해당 method의 알고리즘이 등장한다!
어떻게 하면 diversity한 memory를 매 task마다 dynamic하게 구성할 수 있을지가 해당 method의 핵심이라고 할 수 있겠다.
사실 처음에 해당 알고리즘을 제대로 이해하지 못했다(과연 지금은..?). 나름 설명해보면, K개의 memory size가 정해지면, 개만큼 class별로 고르게 size를 정의할 수 있게 된다. 이때 에 해당하는 memory 내 data와 현재 task에 들어온 data를 몽땅 에 넣는다.
이후 에 있는 각 data instance 하나하나마다 우리는 uncertainty value를 구할 수 있게 되고 sort를 취해서, 이를 step-wise하게 하나씩 memory에 추가하면 된다.
다시 말하면, 매 task가 끝날때 마다 memory는 지금까지 본 class를 uncertainty 기반으로 정렬해서 이를 골고루 섞일 수 있도록 다시 메모리를 구성한다는 것이다. (근데 이게 은근히 시간이 오래 걸리지 않을까라는 생각이 문득 든다. when dataset과 task의 개수가 많아질수록 -> 그렇게 되면 continual learning이 online 상황에서 이뤄지니까 빠르게 모델을 재학습하지 못하지 않을까)
이 논문에서는 크게 Mixed-Label Data Augmentation과 Automated Data Augmentation 기법을 모두 이용했다.
mixed label data는 주어진 두개의 data를 적절히 섞는 것을 의미하고, Automated Data augmentation은 인용된 논문의 것을 그대로 사용했다.
아래 table1,2는 RM이 다른 모델들보다 성능이 좋고, K(memory size)를 늘림으로써 더욱 나은 성능을 보여준다고 설명하고 있다.
이 논문에서 사용된 metric은 A5, F5, I5로 각각 Last Accuracy (A5), Last Forgetting (F5), and Intransigence
(I5)을 의미하는데, appendix를 참고하길 바란다.
더불어서 아래 그림은 online/offline 상황에서 disjoint, blurry10, blurry30의 상황을 각각 나타낸다. RM이 비록 online/offline 모든 상황에 적용가능하고, online 상황에서 sota의 성능을 보여주지만, offline 상황에서는 매 epoch를 돌면서 다른 class들이 보여질 수 있는 환경이므로 rainbow memory가 갖는 diversity의 효과가 떨어진다고 생각해볼 수 있다.
또한 disjoint한 상황에서는 극심한 상황에 대해서 저자들은 다음과 같은 말을 남기고 있다.
"In disjoint-CIL where catastrophic forgetting is more severe than blurry-CIL, regularization-based methods such as EWC [27] and Rwalk [5] show competitive performances. It is expected that disjoint-CIL setup tends to exaggerate catastrophic forgetting that regularization-based methods aim to address (Section 3)."
이 논문을 읽으면서 느낀점은 Online Continual Learning에서 diverse한 memory를 구성하여 catastrophic forgetting을 방지하는 것이 중요하다는 지점이었다. 이를 위해서 저자들이 제안한 MC+bayes rule방식의 uncertatiny 역시 흥미로운 지점이었고, 다양성을 극대화하기 위해서 augmentation을 강화하는 식의 방식이 있었던 것 같다. 물론 주어진 uncertatinty metric이나 computation이 얼마나 효율적인지에 대해서는 또 논의가 필요할 것 같지만, 그래도 본 논문의 method가 working하는 것을 보여주기 위해서 다양한 실험(비록 offline 및 disjoint한 setting에서는 성능이 낮을 지라도)을 report해주어서 인상깊었다.
내가 풀고 싶은 문제에 대해서 생각해보면, diverse를 고려한 memory가 좋을지 아니면 hard sample이 좋을지에 대한 의문은 여전히 남아있긴 하지만 앞으로 연구하면서 차차 풀어나가봐야겠다.
수식 1번이 어떻게 나오는지에 대해서 손으로 풀어봤는데 참고로 넣습니다.