본문 바로가기
étude/AI

transfer learning (upstream, downstream)

by mummoo 2023. 11. 15.

transfer learning (전이 학습)

= 새로운 task를 수행하는 모델을 만들 때, 기존에 학습했던 지식을 재사용하는 것

=> transfer learning 적용 시 기존 LLM보다 학습 속도가 빨라지고, 새로운 task를 더 잘 수행할 수 있음

e.g. BERT (Bidirectional Encoder Representations from Transformers) , GPT (Generative Pre-trained Transformer)

=> transfer learning 적용 이전의 기존 모델들은 task를 처음부터 학습했었다!!

 

task1 = upstream task (학습 데이터 말뭉치를 통해 문맥을 이해하는 task) : pretrain

= 문맥을 모델에 내재화

 

e.g.1 다음 단어 맞추기 : GPT

"티끌", "모아" 다음에 올 단어를 예측할 것이고, 학습 데이터 말뭉치에 "티끌 모아 태산"이라는 구 (phrase)가 많다고 할 때 모델은 이를 바탕으로 "태산"이라는 단어를 예측함

=> "태산" 이라는 단어에 해당하는확률은 높이고 나머지 단어에 대한 확률은 낮추는 방향으로 모델 업데이트

=> 모델이 대규모 말뭉치를 가지고 이런 과정을 반복 수행하게 되면, 이전 문맥을 고려했을 때 어떤 단어가 그 다음에 오는 것이 자연스러운지 알 수 있게 됨 (= 풍부한 문맥을 이해할 수 있게 됨)

=> "다음 단어 맞추기"로 upstream task를 수행한 모델 = LM (Language Model)이라고 함

 

 

e.g.2 빈칸 채우기 : BERT 

"티끌", "태산" 사이에 올 단어를 예측할 것이고, 많은 말뭉치 데이터를 가지고 빈칸 채우기를 반복 학습한다면 앞뒤 문맥을 보고 빈칸에 올 단어 예측 가능

=> "모아"라는 단어에 해당하는 확률은 높이고 나머지 단어에 관계된 확률은 낮추는 방향으로 모델 업데이트 

=> "빈칸 채우기"로 upstream task를 수행한 모델 = MLM (Masked Language Model)이라고 함 

 

다음 단어 맞히기, 빈칸 채우기와 같은 upstream task들은 강력한 힘을 가짐 

: 글 (= 대규모 말뭉치)만 있으면 수작업 없이도 다량의 학습 데이터를 저렴한 가격에 만들어낼 수 있음 !! 

=> upstream task를 수행한 모델은 성능이 기존보다 월등히 좋음

=> 데이터 (여기서는 말뭉치 데이터) 내에서 정답을 만들고 이를 바탕으로 모델을 학습하는 방법 = 자기 지도 학습 (Self-Supervised Learning)

 

 

task2 = downstream task (자연어 처리의 구체적인 문제들)

= 우리가 풀어야 할 자연어 처리의 구체적인 과제들

=> downstream task들은 pretrain을 마친 모델을 구조 변경 없이 사용 / + task module 해서 수행 

 

본질 = 분류 (classification) : MLM (문장 생성 제외) 사용

자연어를 입력 받아 해당 입력이 어떤 범주에 해당하는지 확률 형태로 반환 

 

학습 방식 = 파인 튜닝 (fine tuning) 

= pre train을 마친 모델을 downstream task에 맞게 업데이트하는 기법

e.g. task2 = 문서 분류라면, pre train을 마친 BERT 모델 전체를 문서 분류 데이터로 업데이트

e.g. task2 = 개체명 인식이라면, pre train을 마친 BERT 모델 전체를 개체명 인식 데이터로 업데이트

 

1. 문서 분류 

= 자연어 (문서 / 문장) 입력 받아 해당 입력이 어떤 범주에 속하는지 그 확률값을 반환 

범주에는 긍정, 부정, 중립, ..., 이 있음 

=> 노란색 실선 박스 = pre train을 마친 MLM / 초록색 실선 박스 (= 작은 모듈) = 문서 전체의 분류 범주 

 

* CLS, SEP은 문장의 시작, 끝에 붙이는 특수한 token이므로 일단 pass

 

2. 자연어 추론 

= 문장 2개 입력받아 두 문장 사이의 관계의 범주에 대한 확률값 반환

범주에는 참 (entailment) / 거짓 (contradiction) / 중립 (neutral) / ... 등 존재 

 

=> 노란색 실선 박스 = pre train을 마친 MLM / 초록색 실선 박스 (= 작은 모듈) = 두 문장 사이의 관계 범주 

 

3. 개체명 인식

= 자연어 (문서 / 문장) 입력 받아 단어별로 기관명 / 인명 / 지명 등 어떤 개체명 범주에 속하는지 그 확률값 반환 

=> 노란색 실선 박스 = pre train을 마친 MLM / 초록색 실선 박스 (= 단어별 작은 모듈) = 각각의 개체명 범주 

 

4. 질의응답

= 자연어 (질문 + 지문) 입력 받아 각 단어가 정답의 시작일 확률값과 끝일 확률값을 반환 

 

 

=> 노란색 실선 박스 = pre train을 마친 MLM /

초록색 실선 박스 (= 단어별 시작 작은 모듈) , 빨간색 실선 박스 (= 단어별 끝 작은 모듈)

 

5. 문장 생성 : GPT (LM)

= 자연어 (문장) 입력 받아 어휘 전체에 대한 확률값을 반환

*확률값 = 입력된 자연어 (문장) 다음에 올 단어로 얼마나 적절한지를 나타내는 점수

 

=> pre train을 마친 언어 모델을 구조 변경 없이 그대로 사용!!! 

문맥에 이어지는 적절한 다음 단어를 분류

 

downstream은 모두 fine tuning으로 학습하지만, 사실 downstream task 학습 방법은 크게 세 가지임

=> 

1. fine-tuning : downstream task 데이터 전체를 사용 -> 모델 전체를 업데이트

2. prompt tuning : downstream task 데이터 전체를 사용 -> task에 맞게 모델 일부만 업데이트

3. in-context tuning : downstream task 데이터 일부만 사용 -> 모델 업데이트 안 함!!!

3-1. zero-shot learning : downstream task 데이터 전혀 사용 x -> 모델이 바로 downstream task 수행

3-2. one-shot learning : downstream task 데이터 1건만 사용 -> 모델은 해당 건수가 어떻게 수행되었는지만 참고하고 downstream task 수행

3-3. few-shot learning : downstream task 데이터 몇 건만 사용 -> 모델은 해당 건들이 어떻게 수행되었는지 참고해 바로 downstream task 수행

 

=> 사실 언어 모델이 기하급수적으로 커지고 있음 : GPT-3의 parameter는 무려 175B 개!! 

따라서

- fine-tuning으로 모델 전체를 업데이트하려면 비용이 만만치 않음

- prompt-tuning, in-context tuning 도 성능이 fine-tuning과 비슷할 때가 많음 

=> in-context tuning처럼 모델을 업데이트하지 않고도 downstream task를 수행할 수 있다는 건 매우 매력적이다~~