위키 백과에서는 '한 분야의 문제를 해결하기 위해서 얻은 지식과 정보를 다른 문제를 푸는데 사용하는 방식'으로 정의
이를 딥러닝의 분야에서는 '이미지 분류' 문제를 해결하는데 사용했던 네트워크(DNN;Deep Neural Network)를 다른 데이터셋 혹은 다른 문제(task)에 적용시켜 푸는 것을 의미합니다.
특히나 기계의 시각적 이해를 목표로 하는 컴퓨터 비전의 영역에서 전이 학습으로 수행된 모델들이 높은 성능을 보이고 있어 가장 많이 사용되는 방법 중에 하나입니다.
전이학습을 수행하지 않은 모델들보다 비교적 빠르고 정확한 정확도를 달성할 수 있는 것이죠. 어떻게 이런 것들이 가능할까요?
바로 네트워크가 다양한 이미지의 보편적인 특징 혹은 피처(Feature)들을 학습했기 때문입니다.
일반적으로 네트워크가 깊어질수록 서로 다른 종류의 피처들을 학습한다고 알려져 있는데 낮은 층에서 학습되는 피처를 low-level features, 깊은 층에서 학습되는 피처들은 high level features라고 부릅니다.
low-level feature의 예로는 이미지의 색이나 경계(edge) 등을 말할 수 있고 high level features는 이보다 더 심화된 객체의 패턴이나 형태를 의미합니다.
그림을 보면 각각의 단계에서 이미지의 특징들을 추출하는 필터를 시각화한 그림입니다. 단계별로 서로 다른 형태를 띄고 있음을 알 수 있습니다.
low-level feature의 필터의 경우 색의 변화나 경계의 방향 등을 추출한다고 유추할 수 있다.
high-level feature는 동그라미가 반복되는 패턴이나 새의 부리 등의 이미지를 분류하는데 있어서 주요한 특징들을 학습한다고 말할 수 있다.
네트워크가 이러한 특징을 학습하기 위해서는 대량의 데이터셋이 필요한데 가장 대표적으로 ImageNet을 들 수 있습니다.
ImageNet은 2010년~2017년까지 매해 열린 대회 ImageNet Large-Scale Visual Recognition (ILSVRC)을 위한 데이터셋으로 자동차나 고양이를 포함한 1000개의 클래스, 총 1400만개의 이미지로 구성되어 있습니다.
해당 데이터셋을 가지고 이미지 분류를 수행한 모델들은 매년 뛰어난 성능을 보여주고 있는데 2015년 이후에는 사람보다 뛰어난 정확도를 가진 모델이 등장하였습니다.
2012년 AlexNet 이후에 VGG, GoogleNet, ResNet 등 주요 CNN 구조들은 전이 학습을 수행하는데 네트워크의 기저(base 또는 backbone)으로 사용되고 있습니다.
논문을 살펴보면 ResNet을 기반으로 한 여러 모델을 찾아보실 수 있으실 겁니다.
ImageNet으로 학습시킨 CNN 구조는 정말 많이 사용되기 때문에 pytorch나 tensorflow 같은 딥러닝 프레임워크에서 API 저장되어 있어 간편하게 불러와서 사용하실 수 있습니다.
이렇게 구현할 수 있는 모델의 목록은 공식 문서(tensorflow, keras, pytorch) 등을 통해 확인하실 수 있습니다.
주요 CNN 구조인 GoogleNet과 ResNet에 대해서는 중요한 구조이니만큼 꼭 게시글을 확인해보시면 좋을 것 같습니다.
전이학습을 위해서는 ImageNet과 같은 대량의 데이터셋으로 이미 학습이 되어있는 모델을 사용합니다.
몇가지 경우에 대해서 pretrained 모델 외에 학습시키는 레이어의 양이 달라질 수 있습니다.
만약 ImageNet과 비슷하지만 소량의 데이터셋을 가지고 있다면 ImageNet으로 학습시킨 CNN을 구조를 그대로 두고 뒷단에 분류를 위해 새로운 완전연결레이어(FC;Fully Connected Layer)를 붙여서 학습시키면 됩니다.
만약 내가 가진 데이터셋이 ImageNet과 다른 경우에는 어떨까요? 데이터가 많은 경우에 뒷단의 여러 FC 레이어를 묶어서 학습시키는 것이 충분할 것입니다.
전이학습, 이론적으로는 알겠으나 실제로 효과가 있는 것이 맞나? 나는 그냥 기본 모델에서 학습시키면 되는데?라고 생각하실 수도 있습니다.
이에 대한 답으로 2018년 FAIR(Facebook AI Research) 논문에서 실험을 통해 '전이학습이 학습 속도 면에서 효과가 있다'라는 것을 밝혀냅니다.
동일한 조건에서 바닥부터 훈련시키는 것(train from the scratch)이 사전 학습된 모델을 사용하는 것보다 2~3배의 시간이 더 걸린다는 것을 보여주고 있습니다.
아래 그림에서 랜덤으로 모델을 초기화를 시키는 것보다 사전 학습된 모델의 초기값을 사용하였을 때 더 빠르게 높은 정확도에 도달한다는 것을 보여주고 있습니다. 더 궁금하신 분들은 논문을 읽어보셔도 좋겠네요.