- Incremental Learning 설명 – 정의, 필요성, 데이터셋, 대표 논문
- [arxiv 2016] Less-forgetting Learning in Deep Neural Networks (LFL) 핵심 리뷰
- [NIPS 2017] Continual learning with deep generative replay (DGR) 핵심 정리
- [CVPR 2017] iCaRL: Incremental Classifier and Representation Learning 핵심 리뷰
- [PNAS 2017] Overcoming catastrophic forgetting in neural networks (EWC) 핵심 리뷰
- [PAML 2017] Learning Without Forgetting (LwF) 핵심 리뷰
- [NIPS 2018] Memory Replay GANs: learning to generate images from new categories without forgetting(MeRGAN) 핵심 리뷰
- [ECCV 2018] Piggyback: Adapting a single network to multiple tasks by learning to mask weights 핵심 리뷰
- [ECCV 2018] End-to-End Incremental Learning (EEIL) 핵심 리뷰
- [CVPR 2018] PackNet: Adding Multiple Tasks to a Single Network by Iterative Pruning
- [ECCV 2018] Memory Aware Synapses: Learning what (not) to forget (MAS) 핵심 리뷰
- [CVPR 2019] Learning to remember:A synaptic plasticity driven framework for continual learning (DGM) 핵심 리뷰
- [NIPS 2019] Compacting, Picking and Growing for Unforgetting Continual Learning (CPG) 핵심 리뷰
- [ICMR 2019] Increasingly packing multiple facial-informatics modules in a unified deep-learning model via lifelong learning (PAE) 핵심 리뷰
- [CVPR 2019] Learning a Unified Classifier Incrementally via Rebalancing (LUCIR) 핵심 리뷰
- [CVPR 2019] Learning without Memorizing (LwM) 핵심 리뷰
- [CVPR 2019] Large Scale Incremental Learning (BiC) 핵심 리뷰
- [CVPR 2020] Conditional Channel Gated Networks for Task-Aware Continual Learning (CCGN) 핵심 리뷰
- [CVPR 2020] Maintaining Discrimination and Fairness in Class Incremental Learning (WA) 핵심 리뷰
- [ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰
- [WACV 2020] Class-incremental Learning via Deep Model Consolidation (DMC) 핵심 리뷰
- [CVPR 2021] DER: Dynamically Expandable Representation for Class Incremental Learning 핵심 리뷰
내용 요약
기존의 distillation + exemplar방식에 Bias Correction layer를 추가한 incremental learning 방법론을 제안합니다. Distillation loss를 세분화한 POD loss와 classifier를 변형한 Local Similarity Classifier를 제안합니다.
1. 들어가며
이번 글에서는 ECCV 2020에 발표된 PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 논문을 리뷰합니다. 이 논문은 PODNet이라고 불리며, 이번 글에서도 PODNet이라고 지칭하겠습니다.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 1 전체-흐름-속에서-보기](https://blog.kakaocdn.net/dn/Uvikc/btrqBG2zDTo/XE1oXpO2DkNeABCj0E8Nd1/img.png)
Incremental Learning을 방법론에 따라 크게 구분하면 위의 그림과 같이 구분할 수 있습니다.
- Regularization : 이전 task에서 학습한 네트워크의 파라미터가 최대한 변하지 않으면서 새로운 task를 학습하도록 유도
- Distillation : 이전 task에서 학습한 파라미터를 새로운 task를 위한 네트워크에 distillation
- Distillation + Memory : 이전 task의 데이터를 소량 메모리로 두고 새로운 task학습 때 활용
- Distillation + Memory + Bias correction : 새로운 task에 대한 bias를 주요 문제로 보고, 이에 대한 개선에 집중
- Distillation + Memory + Dynamic structure : task에 따라 가변적으로 적용할 수 있는 네트워크 구조를 사용
- Distillation + Memory + Generative model : 이전 task의 데이터를 generative model을 사용하여 replay 하는 방식을 사용
- Dynamic structure : Pruning / Masking 등을 사용하여 task별로 사용할 파라미터 또는 네트워크 등을 정해줌
PODNet은 Distillation + Memory + Bias correction에 해당하는 방법 중 하나입니다.
2. 제안 방법
바로 제안 방법을 살펴보겠습니다. 저자들의 큰 그림은 다음과 같습니다.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 2 PODNet 제안 방법](https://ffighting.net/wp-content/uploads/2023/06/image-37-1024x328.png)
기존의 incremental learning에서 사용하던 distillation loss는 더 세분화되어 POD Distillation loss를 제안합니다. 또한 기존의 classifier는 Local Similarity Classifier로 변경합니다. 세부적으로 살펴보겠습니다.
2-1. POD : Pooled Outputs Distillation loss
먼저 distillation loss를 변형한 Pooled Outputs Distillation loss입니다.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 3 다양한-pooling-방법](https://blog.kakaocdn.net/dn/cW4Oyo/btro7fFknJ1/xVd76wvKemGul5c6Os3Aqk/img.png)
위의 그림과 같이 pooling은 다양한 형태로 수행할 수 있습니다. 이때 저자들은 width pooling과 height pooling을 묶어 POD-spatial이라고 정의합니다. POD-spatial Loss는 이렇게 Pooling된 Feature에 대한 L2 Loss로 표현됩니다.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 4 POD-spatial-loss](https://blog.kakaocdn.net/dn/RVTmn/btro7gxuoYN/g2WlKPTOLJ2VpV0VBSbeEk/img.png)
다음은 final embedding에 적용하는 POD-flat입니다.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 5 POD-flat-loss](https://blog.kakaocdn.net/dn/m701F/btro3023oIT/pIPMUNm5CyuTErWdgWAEV0/img.png)
위의 두 가지 pooling을 결합한 최종 POD-final loss는 다음과 같습니다.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 6 final-loss](https://blog.kakaocdn.net/dn/b5eOeY/btroTlOzjOV/Kiql9zLTodsAgy2p7KK0G1/img.png)
2-2. Local Similarity Classifier
다음은 기존의 classifier를 변형한 Local Similarity Classifier를 살펴보겠습니다.
기존 UCIR에서 classification logit은 다음과 같이 표현됩니다.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 7 기존-UCIR-classifier](https://blog.kakaocdn.net/dn/xBTzY/btro6bb7PV2/3rueSvks4WzXywT4vi7RG0/img.png)
저자들은 이때의 문제점은 ‘𝜃가 single proxy로서 한 개 클래스를 대표한다는 것’이라고 주장합니다. 이를 보완하기 위해 저자들은 Multi proxy 방식을 제안합니다. 각각의 클래스를 하나의 벡터가 아닌, 여러 벡터들로 표현하겠다는 것이죠.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 8 local-similarity-classifier-loss](https://blog.kakaocdn.net/dn/1D6VK/btroZD8ko1h/rtL8OUfEjtfyYktS6f2kB1/img.png)
위의 loss는 NCA loss의 형태를 취하며 small margin를 포함합니다.
이때 각각의 𝜃값을 어떻게 초기화할 것인지의 문제가 남습니다. 𝜃값 초기화 과정은 다음과 같습니다.
- 새로운 클래스 c의 feature 추출
- k-means clustering 수행
- k개의 centroids를 각 𝜃의 초기값으로 설정
2-3. Final loss
위의 POD와 Local Similarity Classifier를 결합한 최종 loss는 다음과 같습니다.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 9 final-loss](https://blog.kakaocdn.net/dn/dDcKaQ/btroWocLdpg/ZAMN2tii4P1SOGHUqzFRI0/img.png)
3. 실험 결과
다음은 이렇게 제안한 방법의 실험 결과를 살펴보겠습니다.
먼저 실험 방법은 다음과 같습니다.
- 절반의 클래스를 학습 (CIFAR100 : 50개, ImageNet100 : 50개, ImageNet1000 : 500개)
- 남은 클래스를 step만큼 나눈 뒤 step마다 학습 & 테스트
- 모든 step의 점수 평균을 최종 score로 설정
3-1. CIFAR100 테스트
먼저 CIFAR100에 대한 실험 결과입니다.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 10 CIFAR100-테스트](https://blog.kakaocdn.net/dn/ciFuoT/btro6aRNOSN/dALvXOh8aM1RpkHQbxcfB0/img.png)
비교 알고리즘은 iCaRL, BiC, UCIR, PODNet입니다. 모든 step에 대해 PODNet이 가장 높은 성능을 보입니다.
3-2. ImageNet100 & ImageNet1000 테스트
다음은 ImageNet에 대한 실험 결과입니다.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 11 ImageNet-테스트](https://blog.kakaocdn.net/dn/ZE3ev/btro31t5xM3/30LZGo5qyZau9Hahzvnnmk/img.png)
비교 대상은 CIFAR100 테스트와 같으며 마찬가지로 가장 좋은 성능을 보여줍니다.
4. Ablations
다음은 ablations를 살펴보겠습니다.
4-1. Contribution of each component
먼저 각 component에 따른 성능 비교입니다.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 12 contribution-of-each-component](https://blog.kakaocdn.net/dn/cHqFw8/btro081c2dI/WKkAuPYdH42eMyXkR2Bhr0/img.png)
a실험을 살펴보겠습니다.
Cosine classifier보다 LSC를 적용했을 때 더 성능이 좋은 모습을 확인할 수 있습니다. 이에 대해 저자들은 이를 ‘LSC의 model distribution shift에 대한 sensibility 감소 효과 덕분’ 이라고 해석합니다.
b실험을 보겠습니다.
POD가 적용되었을 때 GradCam, Perceptual Style 방식보다 성능이 좋으며 모든 POD가 적용된 POD-spatial 방식의 성능이 가장 높은 모습을 확인할 수 있습니다. 이에 대해 저자들은 ‘POD-pixel에 비해 POD-spatial은 statistics에 대해서만 constraint 하기 때문에 더 일반화 능력이 좋다’ 라고 해석합니다.
4-2. Robustness of our model
다음은 제안하는 방법의 robustness에 대한 실험입니다.
![[ECCV 2020] PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning 핵심 리뷰 13 robustness-of-our-model](https://blog.kakaocdn.net/dn/brWWjk/btroYk1VfJ4/U51HcCrEtHZINmJUlZu8Wk/img.png)
비교 알고리즘은 iCaRL, BiC, UCIR, PODNet입니다. Memory size와 initial task size를 바꿔봐도 어떠한 모델보다도 성능이 좋은 모습을 확인할 수 있습니다.