본문 바로가기

딥러닝

적은 데이터로 딥러닝 잘 학습하기

 

 

딥러닝의 정확도를 향상시키기 위해서는 엄청난 양의 레이블링된 데이터가 필요합니다. 그런데 학습 이미지의 개수가 충분하지 않은 경우, 혹은 레이블링되어 있는 이미지가 없어서 그 엄청난 양의 이미지에 대해 직접 레이블링하기 너무 힘들고 귀찮은 경우(?) 어떻게 접근하면 좋을까요? 이에 대해 검색해보다가 아래 출처에 있는 좋은 글을 발견해서 번역/추가 정리하여 작성해보았습니다.

 

요약


1. 이전에 학습된 지식 활용하기

    1) Transfer Learning

    2) Domain Adaptation

2. 유사도 기반 방식

    1) Few-shot learning

 


 

1. 이전에 학습된 지식 활용하기


사람이 이미 알고 있는 지식과 관련지어 이와 유사한 새로운 지식을 습득하는 것처럼, 머신러닝/딥러닝 알고리즘도 하나의 task에서 얻은 지식을 유사한 새로운 문제를 해결하는데에 사용할 수 있다.

 

비록 전통적인 머신러닝/딥러닝 알고리즘은 특정 작업을 처리하기 위해 독립적으로 작동하도록 설계되었지만, "Transfer Learning", "Domain Adaptation" 방법은 이러한 독립적인 학습 패러다임을 극복하고 사람처럼 학습할 수 있도록 개발되었다.

 

 

1) Transfer learning

 

Transfer learning은 이전 task에서 학습된 features와 weights 등을 이와 비슷한 새로운 task에 적용하는 방법이다. 컴퓨터 비젼에서 low-level에서의 features는 edges, shapes, corners 그리고 intensity 등을 나타내기 때문에 다양한 task에 공유하여 사용이 가능하다.

 

pytorch를 사용해서 transfer learning하는 방법은 여기를 참고해주시길 바랍니다.

 

 

2) Domain adaptation

Domain Adaptation은 데이터의 도메인을 이동함으로써 이전에 학습한 네트워크를 사용하는 방법이다. 새로운 도메인을 target 도메인이라 하자. target 도메인에 속하는 데이터의 분포는 이전에 학습한 source 도메인의 분포와는 다르다. 이에 따라 P(Xs) ≠ P(Xt)가 되기 때문에 이 차이만큼 이동시킬 수 있게 하는 모델이 필요했다.

 

 

Unsupervised Domain Adaptation을 하기 위해, 우리는 다음 세 가지 조건을 만족해야 한다.

 

1. Domain-agnostic Feature extraction : Source와 Target 도메인으로부터 추출한 features의 distribution을 Adversarial Discriminator Network 구분할 수 없어야 한다.

 

2. Domain-specific reconstruction : Embedding한 것이 Source와 Target 도메인으로 다시 decode 가능해야 한다.

 

3. Cycle Consistency : Source와 Target 중 어떤 Domain에서 시작했는지 알 수 있어야 한다.

 

 

Unsupervised Domain Adaptation을 학습하기 위한 가장 간단한 방법은 Discriminator Network로 구분할 수 없는 features를 추출하는 것이다. 그리고 동시에, 이러한 features가 Source Domain을 표현하여 object를 분류할 수 있어야한다. 비지도 학습 방식을 사용할 것이기 때문에, Target Domain의 labeling을 할 필요는 없고, Source Domain 내의 다양한 이미지들에 대한 labeling만 되어 있으면 된다.

 

 

그 대신에 Domain Adaptation이 Source Domain distribution과 Target Domain distribution을 각각 shared domain Z로 매팽시켜준다. 이 Embedding은 반드시 Domain-agnostic (도메인에 상관없이 가능해야 한다)해야 하고, 우리는 Source와 Target 이미지 간의 Embedded Distributions를 최대한 비슷하게 만들 수 있다.

 

 

 

더 읽어볼 거리

 

Murez, Zak & Kolouri, Soheil & Kriegman, David & Ramamoorthi, Ravi & Kim, Kyungnam. (2017). Image to Image Translation for Domain Adaptation. [PDF]

 

Pinheiro, Pedro H. O.( 2018). Unsupervised Domain Adaptation with Similarity Learning. IEEE/CVF Conference on Computer Vision and Pattern Recognition (2018): 8004–8013. [PDF]

 

 

 

2. 유사도 기반 방식


입력 이미지를 출력 클래스로 직접 분류하는 대신, 유사성 함수를 학습하여 이미지 간의 유사도를 측정할 수 있다.

 

1) 퓨샷 러닝 (Few-shot learning)

딥러닝 모델을 제대로 학습하기 위해서는 양질의 데이터와, 컴퓨팅 자원이 수반된다. 하지만 인간과 비교하면 딥러닝 모델의 학습 방식은 효율적이지 않다. 인간이 단 몇 장의 사진만으로 생애 처음으로 본 사물을 구분할 수 있는 반면, 딥러닝은 인간처럼 소량의 데이터로 학습될 수 없기 때문이다. 하나의(이 경우 one-shot learning) 혹은 소량의 데이터만으로 학습하기 위해 진행된 연구가 바로 퓨샷 러닝이다. 

 

퓨샷 러닝은 클래스 별 훈련데이터의 수가 적은 경우 사용된다. 이를 위한 데이터셋은 훈련에 사용하는 서포트 데이터와 테스트에 사용하는 쿼리 데이터로 구성된다. N : 클래스의 개수, K : 클래스 별 서포트 데이터의 수일 때, 이 태스크를 'N-way K-shot 문제'라고 부른다.

를 의미한다.

 

일반적으로 퓨샷 러닝 벤치마크(benchmark) 실험에서는 N은 10개 이하, K는 1개 또는 5개로 설정하고, 쿼리 데이터는 클래스 별 15개가 주로 사용된다. 아래와 같이 연구에 많이 쓰이는 5-way 1-shot 문제에서 모델 정확도는 50%대, 5-way 5-shot에서는 70% 수준이다.

 

 

 

▶ 퓨샷 러닝 태스크에 메타 러닝 (meta-learning) 도입

이전의 경험으로부터 새로운 태스크를 학습하는 방법을 학습하는 것이 메타러닝이다. 퓨샷 러닝 모델이 완전히 새롭게 주어진 데이터에서도 잘 작동하도록 만들기 위해서는 메타 러닝이 필요하다. 퓨샷 러닝 태스크에서는 에피소딕 훈련 (episodic training) 방식으로 메타 러닝을 시도한다. 에피소딕 훈련은 퓨샷 태스크와 유사한 형태의 훈련 태스크를 통해 모델 스스로 학습 규칙을 도출할 수 있게 함으로써 일반화 성능을 높일 수 있게 한다.

 

 

 

 

일반 딥러닝에서는 훈련, 검증, 테스트 데이터셋이 같은 클래스를 공유하고 데이터만 겹치지 않게 나뉘어진다. 예를 들어, 데이터셋 모두 {고양이, 자동차, 사과, 귤, 원숭이, 자전거}라는 클래스에 해당하는 데이터로 구성돼 있다. 

 

이와 달리 퓨샷 러닝을 위한 에피소딕 훈련에서는 훈련, 검증, 테스트 태스크를 둔다. 그리고 {고양이, 자동차}, {사과, 귤}, … {원숭이, 자전거}처럼 각 태스크를 구성하는 클래스들 완전히 다르게 한다. 

 

에피소딕 훈련에 대해 좀 더 자세히 설명하자면 다음과 같다. 대용량 학습 데이터로부터 N-way K-shot 훈련 태스크를 여러 개 샘플링한다. 모델은 다양한 클래스로 구성된 훈련 태스크를 최적의 성능을 낼 수 있도록 훈련된다. 훈련을 마친 모델은 완전히 새로운 데이터로 구성된 테스트 태스크로 그 성능을 평가받는다.

 

 

▶ 퓨샷 러닝 접근 방식

(1) 거리 학습 기반 방식 (metric learning)

클래스 별 학습 데이터가 적은 경우 과적합이 일어나기 쉬워 딥러닝처럼 분류기의 가중치를 훈련하는 방식을 사용하지 않는다. 그 대신, 서포트 데이터와 쿼리 데이터 간의 거리(유사도)를 측정하는 방식을 사용한다. 쿼리 이미지와 더불어 특정 클래스에 대한 참조 이미지를 인풋으로 받아서, 두 이미지 사이의 거리를 측정하고, 같은 클래스의 데이터는 더 가깝고 다른 클래스의 데이터는 멀어지도록 "거리를 학습"한다.

 

가장 간단하게는 샴 네트워크 (Siamese Network)를 사용해서 거리를 측정하는 방법이 있다. 이전에는 인간이 직접 설계한 특징으로 거리학습을 시도했다면, 여기서는 처음으로 CNN을 활용했다는 점에서 의의가 있다.

 

샴 네트워크는 같은 weights를 가지고 두개의 다른 이미지를 입력받는 두개의 동일한 Fully Connected CNN으로 만들어져 있다. 두 네트워크는 두 개의 테스트 이미지를 각각 encoding한다. 그 다음, 두 개의 encodings을 통해 이미지들 간의 거리(= Loss = Similarity Score)가 측정된다.

 

 

 

자세히 설명하자면, 네트워크는 Triplet Loss와 Contrastive Lost Function을 사용한 outputs간의 Loss를 통해 학습된다. 

 

먼저 Triplet loss function은 gradients를 계산하는 데에 사용되고 아래와 같이 표현된다:

 

a : anchor image (reference image)

p : positive image

n : negative image

 

우리는 a와 p 간의 dissimilarity가 a와 n간의 dissimilarity 보다 작아야 된다는 것을 안다. 추가적으로 dissimilarites가 얼마나 작야야되는지를 나타내는 hyperparameter로 margin 변수가 더해진다. 예를 들어 만약 margin = 0.2, d(a,p) = 0.5 이면, d(a,n) 는 적어도 0.7여야 한다.

 

Contrastive Loss Function 은 다음과 같다.

 

 

Dw : 두 Siamese networks의 outputs 간의 Euclidean distance. 

 

 

이 학습절차를 통해, 네트워크가 일반화된 지식을 학습할 수 있도록 하였다.

 

 

더 읽어볼 거리

 

Li Fei-Fei, Rob Fergus, and Pietro Perona (2006). One-shot learning of object categories. IEEE Transactions on Pattern Analysis and Machine Intelligence, 28(4):594–611. [PDF]

 

Koch, Gregory, Richard Zemel, and Ruslan Salakhutdinov.Siamese neural networks for one-shot image recognition.2015. [PDF]

 

Santoro, Adam, Bartunov, Sergey, Botvinick, Matthew, Wierstra, Daan and Lillicrap, Timothy P. (2016). One-shot Learning with Memory-Augmented Neural Networks.” CoRR abs/1605.06065. [PDF]

 

 

(2) 그래프 신경망 방식

이는 데이터 간의 복잡한 관계 정보를 학습에 활용하는 방식이다. 일반적인 인공 신경망이 입력값으로 벡터나 행렬 형태를 활용한다면, GNN은 밀집 그래프 구조를 활용한다. 밀집 그래프는 모든 노드가 서로 완전히 연결된 형태로, 노드는 데이터, 노드와 노드를 잇는 간선은 데이터 간 관계 정보를 나타낸다. GNN은 바로 이 그래프의 구조와 각 노드에 해당하는 데이터의 특징 벡터를 입력으로 받는다.

 

 

 

 

 

 

 


출처

 

https://medium.com/sciforce/robust-image-classification-with-a-small-data-set-be4de9897495

 

Robust image classification with a small data set

One of the biggest myths about AI is that you need to have a large amount of data to obtain sufficient accuracy — and the rapid…

medium.com

 

https://www.kakaobrain.com/blog/106

 

1.퓨샷 러닝(few-shot learning) 연구 동향을 소개합니다. - 카카오브레인

카카오브레인 AutoLearn 연구팀은 데이터 수가 매우 적은 상황에서도 모델을 훈련시킬 수 있는 퓨샷 러닝(few-shot learning) 연구를 진행하고 있습니다. 퓨샷 러닝에 대한 간략한 개념을 설명하고, 자��

www.kakaobrain.com