현황
- 현재 Active Learning 연구를 하고 있다.
- 일반적인 active learning처럼 각 learning cycle마다 다른 데이터를 고르도록 한다.
다시 학습하는김에(weight init하진 않으나) 이전 learning cycle의 lash epoch을 teacher로 삼고 knowledge distillation을 하여 Born Again Neural Network처럼 동작하도록 만들었다. - 그 과정에서 각 Learning cycle에 student model이 어떻게 학습되는지에 대해 이런저런 실험을 하고 있다.
- [선택 1] unlabeled pool에 있는 데이터를 활용한 semi-supervised learning.
간단하게 teacher의 output을 soft label로 사용하여 CE loss를 가지고 학습.
그렇게 unlabeled epoch - labeled epoch을 1씩 돌아가면서 총 20+20 epoch 학습하는 식.
원래 supervised training시에는 40 epoch 적용. - [선택 2] 아니면 그냥 supervised training을 하되, 자기 자신의 모델을 teacher로 활용하여 born again neural network처럼 효과를 낼 수 있지 않을까 싶었다. 그래서 training loss를 GT label 사용 (CE loss) + soft label 사용 (CE loss) 으로 했다.
- [선택 1] unlabeled pool에 있는 데이터를 활용한 semi-supervised learning.
- Image Classification처럼 비교적 간단한 task가 아닌 관계로 한번 실험하는데 4일정도 소요된다.
실험결과
- 선택1에 해당하는 supervised learning with KD loss + random/entropy sampling 모두 KD를 안 쓰는 것 보다 성능이 안좋았다.
- 선택2는 더 큰 차이로 성능이 안좋았다. 아무것도 쓰지 않은 random/entropy sampling + GT CE loss로 학습이 가장 좋았다.
무슨 이유인지는 알 수 없으나 KD, Semi-Supervised Learning의 성능이 기존 데이터셋만 사용한 학습보다 성능이 떨어진다.
특히 SSL의 경우, 두번째 learning cycle의 경우가 가장 unlabeled data가 많은데 이때의 성능저하가 가장 심했다.
다른 모델과 거의 10% 가까이 차이날정도로 성능이 떨어졌고, 다음 cycle들로 넘어갈때가 되어서야 이 갭이 점점 줄어드는 현상을 목격했다.
Semi-Supervised Learning 기법을 조금 찾아보고 적용해봐야하나 싶다.
현 데이터 특성상 Augmentation 기법을 사용하기에 까다롭기 때문에 MixUp처럼 perturbation based 기법을 활용하기에는 어렵다.
개선을 하는건 하는거지만 왜 저하되었는지 원인부터 밝혀야할 것 같다.
왜 떨어졌을까?
unlabeled data가 오히려 방해가 된 것인가?
공통적인 특징은 '불확실한 teacher'로 인해서 발생한 loss 때문에 모델 성능이 저하된다는 것이다.
SSL이 아닌 일반 supervised learning에다가 soft label만 사용한 연구의 경우, soft label loss의 비중이 커질수록 generalization이 안되는 것을 확인했다. 다른 연구에서 soft label로 성능이 오히려 향상된 것과는 이례적이라고 볼 수 있다.
혹시 이전 cycle과 현재 cycle의 성능 차이가 많이 나서 그런건가? 그렇다면 teacher network는 뭐가 되어야할까?
해결책 및 다음 단계 모색
원래는 semi-supervised learning을 이용하면서 관련된 AL strategy를 고안할 수 있지 않나 싶었으나, 이렇게되면 SSL을 적용하는 것이 성능 저하를 많이 시키게 된다.
아니면 SSL을 명목상으로 딱 한번만 적용시키고, learning cycle중에 한번 얻은 loss를 활용한 AL strategy를 고안할 수 있을까 싶기도 하다.
loss를 사용하는게 inference때의 logit을 활용하는 것 보다 좋을까 의문이 들긴 하다.
하지만 loss를 사용한다면, 학습중에 teacher의 soft label CE loss를 통해서 얻어온거니까 음...........
음.. 그러게 왜 다르지?
음! 아니면 현재 Learning cycle의 마지막 에폭에서 계산하는데, 그냥 loss만 얻고 모델 업데이트는 안하는거다.
비디오 단위로 추출하고 평가내려야해서 이 loss를 aggregate하는 방법도 중요하다.
AL survey paper에서도 언급했듯이, entropy처럼 margin 정보에만 너무 초점을 두기보다는 다양성에도 초점을 맞춰야한다고 했다.
1. Unlabeled Data의 어떤 정보를 활용할 것인가?
KD를 사용하는 것은 일단 킵하고 있다. 사용한 것 vs 안한 것 둘다 실험을 지속할 예정이다. (다만 SSL을 제외할 듯)
우선 SSL은 안쓰더라도, 다음 step의 teacher model의 관점에서 unlabeled data에 대한 정보를 뽑을 것이다.
현재 learning cycle의 last epoch이 다음 learning cycle의 teacher network가 될 것이다. 그렇다면 여기서 가장 uncertain한 데이터를 데이터를 가져오겠다는건데.. 음... entropy sampling이랑 뭐가 다를까?
현재 Soft Label을 기본적으로 쓰고있는데, teacher model (이전 learning cycle)의 output과 현재 모델의 output을 가지고 계산하게 CE loss를 계산하게 된다. 문제는 여기서 target label이 이전 learning cycle이기 때문에 오히려 현재보다 좋지 못한 prediction을 할 가능성이 높다는거다!
2. aggregate 방법 정하기
물론 가장 간단한 방법은 평균이다.
근데 생각해보면 그 어디에도 GT는 없고 그냥 이전 step과 현재 step의 inference 차이를 알 수 있는건데.
현재 성능이 개선되었기 때문에 soft label loss 규모가 클수록 generalization에 방해를 했다면, 오히려 차이가 나는 게 좋다는 의미일지도 모른다.
그렇다면 어쩌면 이렇게 얻는 loss는 이러한 의미가 있을지도 모른다. "이전보다 학습이되고/데이터가 추가됨으로써 현재 unlabeled data에 대한 평가가 달라졌는가?"
그렇다고 해서 무조건 값이 큰걸 고르면 안될 것 같다. 잘 되었는데 이번에 모호해져서 안되는 것일 수도 있다.
그러면 loss값이 작은 값인건 두가지 경우다. 계속 잘맞췄거나, 계속 못맞췄거나.
계속 못맞추는걸 가져오는 게 optimal하지만, GT가 없기에 이는 알 수 없다.
=> 그러면 간단하게는 loss variance가 가장 큰 video를 선택하도록 하면 될 것 같다.
그러면 density와 margin 모두 고려한 AL strategy가 될 수 있지 않을까?
여담.
KD가 정말 쓸만할까?
매몰비용이라는 생각도 들긴 하지만, 엔지니어링 관점이 아니라 뭔가를 새롭게 연구하는걸로 생각한다면 하던 방향으로 하는 게 좋을 것 같다.
'AIML 분야 > self supervised, Learning Theory 등' 카테고리의 다른 글
[Continual Learning 조사 1] 마구잡이로 찾아보는 글 (0) | 2022.03.31 |
---|---|
[Active Learning] A Survey of Deep Active Learning 읽기 (0) | 2021.02.23 |
[Active Learning] 서베이 하기 (0) | 2021.02.23 |
[연구 노트] Deep Active Learning 베이스라인 코드 리뷰 + 내 연구 (0) | 2021.01.15 |
Self-Supervised Learning 몰라서 공부하는 글 (0) | 2020.12.21 |
댓글