상세 컨텐츠

본문 제목

4. Beyond supervised learning - 데이터가 적을때

학교/딥러닝

by 움바둠바 2024. 6. 13. 16:02

본문

728x90

지금까지의 내용은 정답라벨이 있는 supervised learning에 대한 내용이었다.

하지만 현실세계에는 정답라벨이 없는 데이터가 훨!!씬!! 많다. 라벨이 있는 데이터는 극소수의 데이터이다

-> 적은 양의 데이터를 가지고 어떻게 overfittint에 안빠지고 잘 학습시킬 수 있을까? 에 대한 내용이다.

-> 잘 모르겠고, 수업듣도고 잘 모르겠고

    수업도 대충 어떤방법을 사용했는지만 기억하는 방식으로 진행되었다!

    목표는 기술이름이랑 방법 잘 매치시키는것!


[data augmentation]

데이터를 여러개 만드는거다! (일부를 자르거나, 확대하거나, 노이즈를 추가하거나 등등,,)

[Transfer Learning]

=> 내가 목적으로 하는 task에 대한 데이터들이 적으면, 비슷한 task를 수행하는 많은양의 데이터로 학습을 시키고 (pre training) 여기에 내 목적에 맞는 데이터로 학습을 시킨다 (fine-tuning)

    중요한점은 pre triaining에 사용하는 dataset (data-rich source)랑 tine-tuning에 사용하는 dataset( data-poor target)이랑 비슷한 data여야 한다는것이다! 

이 그림처럼 일단 왼쪽으로 pre trian을 한다. -> 이러면 각 레이어의 weight가 source data에 맞춰서 바뀌게 된다.

그러면 진짜 목적을 가진 target data를 학습할 때, 초기값을 pre train된  weight값으로 사용한는것이다!

 => 즉 간단하게, output layer만 내 target data에 맞춰서 변경해주고, 아래부분을 그대로 사용해주면 된다

! python에서 torch로 모델을 불러올 때, pre train된 모델을 불러온다음, output layer만 수정하는게 이것이다!

더보기
from torchvision import models
resnet_pt = models.resnet50(weights='ResNet50_Weights.DEFAULT')

# fc layer 수정
fc_in_features = resnet_pt.fc.in_features
resnet_pt.fc = MyLinear(fc_in_features, len(classes))
resnet_pt = resnet_pt.to(device)

이런식으로 pre-train된 모델을 가져올 때 (weight를 저렇게 초기화해주는것) fc layer를 내가 학습시킬 데이터셋의 모양에 맞게 수정해준다!


[self-supervised learning]

unsupervised pre training을 하는것이다. (라벨이 없는 데이터가 더 구하기 쉽기때문이다)

-> 그러면 라벨이 없는 데이터를 어떻게 학습시키는 것일까? 이와 관련된 다양한 방법들이 있다!

 

[Domain Adaptation]

transfer learning을 두개 넣는것!

    -> 일반적인 transfer learning은 input은 비슷하지만, 대부분 output은 차이가 많이난다 (그냥 다름!)

    -> domain adaptation은 input이 다르고, output이 비슷한것! (같은것)

=> domain adversarial learning 이 된다 (min max 문제가 들어가는걸 adversarial learning이라고함)

         (나중에 배울 GAN의 adversarial learnign도 min max 문제가 들어가서 그런것!)

 

초록색 부분 : 세타에 대한 학습

파란색 부분 : 세타y에 대한 학습 -> y에 대한 loss가 나온다

핑크색 부분 : 세타d에 대한 학습 -> d에 대한 loss가 나온다

=> 위 식에서 오른쪽 부분은 lavel y 를 classifying하는것 => loss를 min하는것! (일반적은 classification)

=> 하지만 왼쪽부분 (세타, d에 대한 부분)은 -loss를 minimize한다 == loss를 maximize하는것!

이렇게 loss를 두고, 어느쪽 기준으로는 max, 어느쪽 기준으로는 min하는에 adversarial learning이다.

-> 일부러 헷갈리게 만들어서 source dataset에 대한것과 target dataset에 대한걸 비슷하게 만들려는것같다!

(엥??)

 

[semi-supervised learning]

label이 있는 데이터만 가지고 분포를 구하는게 아니라, label이 없는 데이터도 참고해서 분포를 생각하자는것이다!

=> 이 그림처럼, 라벨이 없는 데이터까지 생각한 오른쪽그림이 조금더 잘 분류한것이라고 볼 수 있다!

 

[Active Learning]

data가 아주 적을 때, 양질의 데이터를 모으려는것이다 (??)

라벨이 없는 데이터들을 모델이 가지고있다가, 학습할 때 이 데이터가 좀 중요한것 같아서 라벨이 필요해!! 할때 인간에게 라벨을 붙여달라고 부탁하는 느낌인것같다.

== 모든 데이터에 하나하나 라벨을 부여할 필요가 없어지는것!

 

[meta learning]

일반적으로 data로부터 parameter를 얻는 알고리즘은 인간이 정해준다

-> 이 알고리즘을 학습하는것! (알고리즘 자체가 parameter로 주어지는것)

=> 즉 prior 자체를 학습하는 느낌인것같다!

파이가 알고리즘 파라미터!

-> 이렇게 가장 적절한 알고리즘을 찾는다

=> 이 때 세타j는 무엇인가? -> 최적의 start point이다!

(어디서 시작하는지에 따라 gradient descent를 할 때 수렴까지 걸리는 시간이 달라질 수 있다)

=> 뭔가 기존에 인간이 정해주던 부분까지 파라미터화 해서 training을 해주려는것같다!


이거,,, 이름외우는게 넘 헬이다,,, 헷갈리고 어려움;;;

그리고 다 영어이다,, 한글이면 외울만할것같은데,,,,,,,,,,,,,,,,

에잇!!

 

728x90

관련글 더보기