Image Feature Learning - supervised, self-supervised, semi-supervised, weakly-supervised
Image Feature Learning 에 대한 개념을 정리한 글입니다.
“Deep learning is learning the features of data and simplifying data representations for the purpose of finding patterns”
딥러닝은 어떠한 패턴을 찾기 위한 목적으로 data feature를 학습하고, data representation을 단순화 하는 과정을 말합니다.
여기서 말하는 data feature, data representation은 정확히 무엇을 의미하는 걸까요?
Data Representation
위 그림은 굉장히 많이 접하고 사용하는 인코더-디코더 구조 입니다. 인코더를 학습하여 data feature를 뽑아내고, 이것을 디코더에 넣어서 정의한 task에서 원하는 결과를 뽑아내죠.
여기서 인코더를 통해 나오는 부분이 바로 data representation. 다른 말로는 compressed data, embeddings, important information 이라고 합니다. input data의 압축된 정보를 벡터 형태로 표현한 것을 말합니다.
저희는 이 data representation이 input의 핵심정보/일반적인 정보/필요한 정보만 담고 있길 원하고, 이를 위해 학습하는 과정을 바로 representation learning 이라고 합니다. 다른 용어로는 feature learning 또는 deep learning 이라고 부릅니다.
Image Feature Learning
그렇다면 image 에서 data representation이 배우길 원하는 핵심정보는 무엇을 말하는 것일까요?
이를 설명하기 위해서 한 실험을 예시로 갖고왔습니다.
위 그림은 어떤 사람에게 당신의 기억속에 있는 1달러 지폐를 그려보라고 했을 때 그린 그림입니다. 사람들은 하루에도 수십번씩 돈 거래를 하고, 살면서 돈을 본 적이 굉장히 많음에도 불구하고 사람들의 뇌 속에 저장된 1달러 지폐 정보는 굉장히 단순합니다.
이 그림은 같은 사람에게 지폐를 옆에 두고 따라 그리라고 했을 때 그린 그림입니다. 비교하면 기억속의 지폐 모습이 얼마나 단순한지 알 수 있죠. 이 실험을 통해 사람들은 물체를 구별하는데 필요한 최소한의 정보만 뇌 속에 저장한다는 사실을 알 수 있습니다.
컴퓨터도 마찬가지입니다. 물체를 구별하는데 필요한 high-level feature만 encode하면 됩니다. 이것이 바로 image feature learning 입니다.
Image Feature Learning: encode enough high-level features to distinguish different objects
Increase Representation Power
모델이 high-level feature를 잘 학습하게 하기 위한 연구들은 계속해서 이루어지고 있습니다.
VGGNet이나 Inception model 처럼 network가 점점 깊고 커지기도 하고, ResNet이나 DenseNet처럼 layer 사이의 connection 형태를 다양하게 시도하기도 했습니다.
아니면 grouped/separable convolution처럼 layer의 배치/연결을 새롭게 해보기도 했습니다.
더 나아가서 Attention 과 gating mechanism을 사용해서 어떤 부분을 중점적으로 봐야하는지 정해주기도 했습니다.
하지만, 가장 중요한 것은 바로 Labeled Data가 많은 것입니다. 위 방법들이 아무리 좋아도 데이터가 부족하면 결국 rich representation을 얻을 수 없고, 데이터가 무한히 많으면 굉장히 rich한 representation을 얻을 수 있습니다.
Supervised Learning
현실에서 object detection 이나 segmentation 과 같은 task를 해결할 때, 항상 많은 data를 얻기는 힘듭니다. 하지만 data를 많이 볼수록 성능이 좋아지는 것은 확실하므로 보통 미리 많은 data로 학습시킨 모델을 사용합니다.
ImageNet 이라는 큰 데이터셋으로 미리 classification task를 수행해 high-level feature를 학습한 pre-trained model을 사용합니다. 이 model로 initialize를 해서 우리가 원하는 training을 하는데, 이것을 transfer learning이라고 합니다.
하지만, 이 방법도 완벽하진 않습니다. 결국 ImageNet 데이터도 개수가 매우 많다고는 하지만 한정된 데이터고 이보다 더 많이 볼 수 있으면 더 좋은 성능이 나올 수 있겠죠. 그리고 더 심각한 문제는 transfer learning을 통해 효과를 볼 수 없는 경우도 많다는 것입니다.
대표적으로 medical 분야에서는 적용이 어렵습니다. domain이 너무 다르기 때문에 오히려 ImageNet Pre-trained model을 사용하면 성능이 떨어지는 효과가 있습니다.
따라서 결국 원점으로 돌아와서 우리는 데이터가 부족합니다. 방법은 Labeled data를 많이 만드는 방법밖에 없는데, 이는 시간도 매우 많이 소모되고 전문가가 필요한 작업은 비용도 비쌉니다.
Other Learning Methods
그럼 Labeled data 없이 learning 할 수 있는 방법들이 없을까? 하는 생각해서 나온 방법들이 있습니다.
Weakly-supervised Learning
learn with coarse-grained labels or inaccurate labels
Label을 사용하기는 하는데, 퀄리티가 좋지 않은 label을 갖고도 잘 학습한다는 것입니다. 보통 segmentation task에서 많이 연구가 되고 있는 방법인데, segmentation mask는 보통 contour라인이 정확한 것이 매우 중요합니다. 하지만, 굉장히 정확한 segmentation mask를 만드는 것은 시간이 오래 걸리기 때문에, 대충 그린 mask로도 학습하겠다는 것입니다.
Scribble을 사용하거나, classification label만을 이용해 segmentation을 합니다.
Semi-supervised Learning
small amount of labeled data in conjunction with a large amount of unlabeled data
굉장히 적은 양의 labeled data와 많은 양의 unlabeled data를 같이 사용하는 방법입니다.
몇 가지 예시만을 보고 새로운 개념을 빨리 배우는 사람들과 유사하다고 생각할 수 있는 방법입니다.
Self-supervised Learning
a form of unsupervised learning where the data provides the supervision
Unsupervised Learning의 한 종류로 일단 unlabeled data만 이용하여 학습을 합니다. 다만 data 그 자체에서 supervision을 얻어서 학습을 합니다.
최근에 Image 분야에서 굉장히 활발히 연구되고 있는 분야이며, language 분야에서는 bert와 같은 모델로 좋은 성능을 얻어서 가장 많이 사용되고 있는 학습방법이기도 합니다.
앞으로 image 분야에서의 미래도 self-supervised learning 이라고 할 수 있죠.
이렇게 여러가지 learning 방법에 대해 알아보았습니다. 다음에는 각각에 방법에 대한 연구들을 좀 더 자세히 살펴보는 글을 작성할 예정입니다.
Leave a comment