Leveraging Pre-trained Information
다른 데이터셋에서 사전 학습된 지식을 활용하여 적은 양의 데이터로도 좋은 성능을 달성할 수 있는 방법들을 알아보겠습니다.
Transfer Learning
여러분이 회사에서 새로운 task에 대해서 동작하는 인공지능 모델을 개발하는 업무를 담당하게 되었다고 생각해봅시다. 새로운 task이기 때문에 먼저 레이블링된 데이터를 확보해야하는데, 이 data annotation 과정은 시간적으로, 금전적으로 부담되는 작업일 뿐더러, annotation 품질에 대한 이슈도 있어 매우 어려운 작업입니다. 이런 어려움을 극복할 수 있는 실용적인 방안으로 Transfer Learning을 활용할 수 있습니다.
Transfer Learning 한 데이터셋에서 학습하며 배웠던 지식을 다른 데이터셋에서 활용하는 기술입니다. 이를 활용하면 기존에 미리 학습한 지식을 통해서 연관된 새로운 task에 적은 양의 학습 데이터로도 비교적 높은 성능을 달성할 수 있기 때문에 매우 경제적이면서도 강력한 방법입니다. 그렇다면 Transfer Learning이 잘 동작하는 이유는 무엇일까요?

위의 그림은 서로 다른 4개의 task를 위한 데이터셋들입니다. 즉 다른 특성을 가진 데이터셋이라고 볼 수 있습니다. 허나 모두 이미지 데이터셋이라는 공통점이 있으며, 심지어 일부 공통된 패턴을 확인할 수 있습니다. 가령 (a) 데이터셋의 승용차 이미지에서 차량 바퀴와 (b) 데이터셋의 트럭 이미지에서 차량 바퀴를 공통된 패턴으로 확인할 수 있습니다. 이렇게 한 데이터셋을 통해 학습한 지식이 다른 데이터셋에서도 공통된 부분이 많아 유의미하게 활용될 수 있지 않을까? 라는 것으로 부터 Transfer Learning이 고안되었습니다.

Transfer Learning에도 여러가지 방식이 있습니다. 첫 번째 방식은 사전 학습된 모델에서 마지막 FC layer들만 떼어내고, 새로운 FC layer들로 교체하여 기존 모델 가중치들은 학습시키지 않고(freeze), 새로 교체한 FC layer의 가중치만 업데이트하는 방식입니다. 적은 파라미터만 학습시키면 되기 때문에 작은 사이즈의 데이터셋으로도 비교적 좋은 성능을 기대할 수 있습니다. 위의 그림을 통해 확인할 수 있습니다.

두 번째로는 전체 모델을 그대로 fine-tuning하는 방식입니다. 새로운 FC layer들로 교체하는 것은 동일하지만 Convolution layer의 가중치 또한 업데이트를 진행합니다. 다만 사전 학습된 지식을 최대한 보존하기 위해 Convolution layer의 learning rate는 FC layer에 비해 작은 값으로 설정하여 학습을 진행합니다. 첫 번째 방식의 경우 데이터의 사이즈가 정말 작은 경우 활용하기 좋은 방법이라고 볼 수 있고, 그보다는 좀 더 데이터의 사이즈가 크다면 두 번째 방식을 활용하는 것이 적합하다고 볼 수 있습니다. 위의 그림을 통해 확인할 수 있습니다.
Knowledge Distillation

Knowledge Distillation도 매우 간단하면서 강력한 방법입니다. 이는 그림에서 확인할 수 있듯이 사전에 학습한 Teacher model을 활용하여 그보다 작은 Student model을 학습시키는 방법입니다. 큰 모델의 지식을 작은 모델에 효과적으로 주입하는 방식으로 모델 압축에 주로 활용되는 방법입니다. 또한 레이블링되지 않은(unlabeled) 데이터셋에 pseudo-lableling을 적용하기 위한 목적으로도 활용됩니다. 구체적인 방법은 다음과 같습니다.

먼저 사전 학습시킨 Teacher model을 준비하고, Student model을 초기화합니다. 이후 같은 입력 X에 대한 Teacher model과 Student model의 각 출력을 바탕으로 KL divergence loss를 계산하여 Student model을 학습시킵니다. 이때 KL divergence loss를 활용할 경우 두 출력 간의 distribution이 비슷하게 만들어지도록 학습이 진행되기 때문에, Student model이 Teacher model의 행동을 모방하도록 학습시키는 방식이라고 이해하시면 될 것 같습니다. 이러한 세팅은 레이블링되지 않은 임의의 데이터를 가지고 있는 경우에도 적용이 가능합니다만, 레이블링된 데이터를 가지고 있다면 다음 그림과 같이 Loss를 계산할 때 True label을 고려하도록 설계할 수 있습니다.

이 세팅에서는 두 가지 Loss를 사용합니다. 하나는 앞서 설명했었던 KL div.를 계산하는 Distillation Loss, 또 다른 하나는 Ground truth와 Student model의 출력을 바탕으로 cross-entropy loss를 계산하는 Student Loss입니다. Distillation Loss와 Student Loss의 가중합을 최종적인 Loss 값으로 사용하는데, Distillation Loss의 경우 앞서 설명하였듯이 Teacher model의 행동을 모방하기 위한 것이라고 볼 수 있고, Student Loss의 경우 정답을 맞추기 위한 것이라고 볼 수 있습니다. 이때 주의깊게 볼 만한 두 가지 포인트가 있는데요. 첫 번째로 Teacher model의 경우, softmax 출력 값에 argmax를 수행한 hard label(one-hot vector)이 아닌 softmax 출력 값을 그대로 활용하는 soft label의 형태로 결과를 출력하여, 이 출력 값을 Loss 계산에 사용한다는 것입니다.

두 번째는 softmax 함수에 Temerature T값을 인자로 입력한다는 것입니다. 위의 수식에서 확인할 수 있는 것과 같이 temperature를 입력해주게 되면 보다 smooth한 결과값을 얻을 수 있어, 결과적으로 Student model이 Teacher model의 동작을 더욱 더 잘 모방할 수 있게됩니다.
Leveraging Unlabeled Dataset for Training
앞서 언급하였듯이 레이블링된 데이터가 한정적인 상황에서, 레이블링되지 않은 데이터를 활용하여 성능을 높히는 방법을 알아보겠습니다.
Semi-supervised Learning
Semi-supervised Learning은 레이블링된 데이터를 활용하는 것과 더불어 레이블링되지 않은 데이터를 효과적으로 학습에 활용하는 학습 방법입니다. 즉 두 가지 데이터를 모두 학습에 활용하여 데이터 부족 문제를 효과적으로 완화하는 방법이라고 볼 수 있습니다. 구체적인 예시로 다음의 그림과 같이 pseudo-labeling을 활용하는 방법이 있습니다.

먼저 레이블링된 데이터를 활용하여 모델을 학습합니다. 이후 레이블링되지 않은 데이터에 대해 학습된 모델을 활용하여 레이블을 예측합니다(pseudo-labeling). 이후 pseudo-labeled 데이터셋과 레이블링된 데이터를 합하여 보다 큰 사이즈의 데이터셋으로 새롭게 모델을 학습합니다.
Self-training
지금까지 컴퓨터 비전 분야에서 데이터 부족 문제를 해결하기 위한 방법으로 Data Augmentation, Knowledge Distillation, Semi-supervised Learning을 살펴보았습니다. 이 방법들을 잘 결합하면, 2019년 ImageNet classification에서 SOTA 성능을 달성했던 Self-training 방법으로 활용할 수 있습니다.

이 방법론은 위의 그림에서 확인할 수 있듯이 Self-training with nosiy student라고도 명명됩니다. 먼저 ImageNet(labeled dataset)으로 Teacher model을 학습시킨 후, 훨씬 큰 사이즈의 레이블링되지 않은 데이터에 대해 pseudo-labeling을 수행합니다. 이후 pseudo-labeled 데이터셋과 ImageNet을 합한 데이터에 RandAugment를 적용하여 Augmentation시킨 데이터셋을 활용하여 Student model을 학습합니다. 이때 주의할 점은 Knowledge Distillation에서는 일반적으로 Student model의 사이즈를 Teacher model의 사이즈보다 작게 설정해주었는데, Self-training에서는 반대로 Student model의 사이즈를 더 크게 설정해준다는 점입니다. 이후 이 Student model을 다시 Teacher model로 대체하여, pseudo-labeling을 수행하고 새로운 Student model을 학습시키는 과정을 2-4번 가량 반복합니다. 다음의 그림에서 각 반복에 따른 구체적인 수행 과정을 확인하실 수 있습니다.

생각해보기
- 본 강의에서 설명하였듯이 High-quality labeled dataset을 구축하는 일은 매우 어렵습니다. 그렇다면 dataset의 품질은 어떻게 평가하고 검증할 수 있을까요?
- 본 강의에서 소개되진 않았지만, unlabeled dataset을 효과적으로 사용하기 위한 방법으로 Self-supervised Learning도 굉장히 활발하게 활용되고 있습니다. 본 강의에서 학습한 내용을 기반으로 Self-supervised Learning의 개념을 스스로 학습해봅시다.
참고자료
comment