일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- subdag
- Counterfactual Explanations
- grad-cam
- API
- 상관관계
- session 유지
- GCP
- 공분산
- login crawling
- top_k
- airflow subdag
- Airflow
- Retry
- spark udf
- XAI
- GenericGBQException
- API Gateway
- flask
- gather_nd
- chatGPT
- TensorFlow
- UDF
- 유튜브 API
- hadoop
- youtube data
- BigQuery
- correlation
- tensorflow text
- integrated gradient
- requests
- Today
- Total
데이터과학 삼학년
Zero-Shot, One-Shot, Few-Shot learning 본문
인간은 새로운 물체를 볼때 적은 양의 샘플로도 구별할 수 있는데 기계(머신)은 수천장의 샘플이 필요함
제한된 양의 샘플로도 학습하여 만족할 만한 기계학습을 이루기 위한 개념에서 나온 Zero-Shot, One-Shot, Few-Shot learning 을 살펴보자~!!!
>> meta learning -> learn to lerarn 학습하는 방법을 학습하는 것
>> 즉, 사람이 물체를 구별하는 방법을 학습하게 하는 시스템 -> 적은 양의 데이터로도 가능
Few shot learning vs Supervised learning
- Supervised learning : Test image ( Query image ) 의 클래스가 Training set에 있음!! -> 학습에 강아지 사진을 주고 강아지를 잘 학습했는 지 묻는 것!
- Few shot learning : Training set에 없는 클래스를 맞추는 문제(Zero, One, Few shot)
모델은 이미 Training Set으로 학습되어 있고 inference 단계에서 Support Set의 어떤 클래스에 속하는지 맞히는 것!!!
- Support set의 클래스 개수와 샘플 수를 기준으로 k-way n-shot 이라는 표현
- k-way는 Support set이 k개의 클래스로 이루어졌다 -> k가 클수록 모델의 정확도는 낮아지게 됨
- n-shot은 각 클래스가 가진 sample의 개수로 비교해볼 사진이 많으면 많을수록 어떤 클래스에 속하는지 알기 쉽기 때문에 n이 클 수록 모델의 정확도는 높아지게 됨 -> n=1 이면 one-shot learning
>> support set과의 비교는 유사성을 구하는 방식으로 이루어짐 -> 히든 layer를 통해 representation layer간 차이
Zero-shot learning (ZSL)
- 라벨링 되지 않은 새로운 클래스에 대한 분류 작업을 수행할 때, 이전에 학습된 모델을 사용하여 분류하는 기술!
- 이전에 학습된 모델을 사용하여 학습 데이터에 없는 새로운 클래스를 인식하고 분류
- e.g. 얼룩말, 소에 대한 label을 학습한 모델이 있을때 새로운 객체인 젖소를 label로 인식하는 형태
One-shot learning
- 하나의 샘플 이미지만으로 새로운 클래스를 인식하는 것을 의미
- 고양이를 인식하는 딥러닝 모델에게 "스핑크스"라는 새로운 종류의 고양이를 인식하도록 요청한다면, 모델은 이전에 본 적이 없는 스핑크스 고양이 사진 하나만으로도 인식을 수행
Few-shot learning
- 한 클래스당 일부 샘플 이미지만 사용하여 새로운 클래스를 인식하는 것
- e.g. 알파벳 손글씨 이미지를 분류하는 딥러닝 모델에게 "종이 상자"라는 클래스를 추가하라는 요청을 받았다면, 모델은 종이 상자에 대한 몇 가지 샘플 이미지를 보고 이를 인식
- 특징 추출 (Feature extraction): 딥러닝 모델이 이미지나 텍스트 등의 데이터를 분석하고 이해하기 위해 사용하는 고차원 특징 데이터를 추출
- 유사도 측정 (Similarity measurement): 새로운 데이터와 기존의 학습 데이터 간의 유사도를 측정하여 새로운 데이터가 어느 클래스에 속하는지 결정
- 분류 알고리즘 (Classification algorithm): 유사도 측정 결과를 기반으로 새로운 데이터를 올바른 클래스로 분류하는 알고리즘 -> k-최근접 이웃(k-NN), 서포트 벡터 머신(SVM), 신경망 등이 있습니다.
또한 이러한 학습을 위해 사용되는 기술에는 신경망 아키텍처의 변형 및 데이터 증강 기술이 포함됩니다.
- 신경망 아키텍처 변형: 일반적인 딥러닝 모델보다 더 적은 수의 학습 데이터로도 학습이 가능하도록 하는 신경망 아키텍처 변형이 필요합니다. 대표적인 예로는 신경망의 가중치를 공유하는 시각적 추론 네트워크(Siamese Network)와 유사도를 학습하는 메타-학습 모델(Meta-Learning Model) 등이 있습니다.
- 데이터 증강: 적은 수의 학습 데이터로도 학습 성능을 향상시키기 위해, 기존의 학습 데이터를 변형하거나 학습 데이터에 노이즈를 추가하는 등의 방식으로 데이터를 증강합니다. 이를 통해 모델이 데이터의 다양성을 더 잘 이해하도록 돕습니다.
코드
# load the sentence-bert model from the HuggingFace model hub
!pip install transformers
from transformers import AutoTokenizer, AutoModel
from torch.nn import functional as F
tokenizer = AutoTokenizer.from_pretrained('deepset/sentence_bert')
model = AutoModel.from_pretrained('deepset/sentence_bert')
sentence = 'Who are you voting for in 2020?'
labels = ['business', 'art & culture', 'politics']
# run inputs through model and mean-pool over the sequence
# dimension to get sequence-level representations
inputs = tokenizer.batch_encode_plus([sentence] + labels,
return_tensors='pt',
pad_to_max_length=True)
input_ids = inputs['input_ids']
attention_mask = inputs['attention_mask']
output = model(input_ids, attention_mask=attention_mask)[0]
sentence_rep = output[:1].mean(dim=1)
label_reps = output[1:].mean(dim=1)
# now find the labels with the highest cosine similarities to
# the sentence
similarities = F.cosine_similarity(sentence_rep, label_reps)
closest = similarities.argsort(descending=True)
for ind in closest:
print(f'label: {labels[ind]} \t similarity: {similarities[ind]}')
참고
'Machine Learning' 카테고리의 다른 글
커널 함수(kernel function) 조건 및 종류 (0) | 2023.09.13 |
---|---|
TensorRT for Inference (0) | 2023.09.04 |
SOTA (State-of-the-Art) 가장 최신의 성능 좋은 모델들...어떻게 확인?! (0) | 2023.08.06 |
SCIKIT_LLM (sklearn + llm), large language model을 쉽게 쓰자!!! (0) | 2023.07.31 |
catboost encoder 방식 (CatBoostEncoder in categorical-encodings) (0) | 2023.06.26 |