논문 및 개념 정리

[2021] GPT Understands, Too (P-tuning)

2022. 4. 29. 00:44
목차
  1. 1. Introduction
  2. 2. Method
  3. 3. Experiments

GPT3와 같이 매우 큰 언어모델을 서비스 목적에 맞게 fine-tuning하는 것은 비용도 클 뿐더러 성능이 안정적이지 않을 수 있다. 이런 fine-tuning을 효율적으로 하기 위해 p-tuning, LoRA와 같은 방법들이 소개가 되었다. 개인적으로는 p-tuning이 개발기간도 짧고 안정적인 성능향상이 있기 때문에 더 선호하는데 이를 정리해보고자 한다.(논문링크)(공개소스)

 

 

1. Introduction

언어모델은 다음과 같이 크게 3종류가 있다.

  • unidirectional LM(a.k.a auto-regressive model): GPT 계열
  • bidirectional LM: BERT 계열
  • hybrid LM: XLNet, UniLM

GPT 계열의 단점은 NLU 태스크(NLI, AE 등)에서 성능이 떨어질 뿐만 아니라 좋은 성능을 내는 HEAD+examples+prompt 조합을 찾는 과정(prompt-engineering)이 까다롭다는 것이다.

본 논문에서 제안하는 P-tuning은 prompt가 discrete space에서 prompt를 찾는 과정에서 벗어나 continuous space상에서 존재하도록하는 방법이다. Discrete space라 함은 사람이 일일히 자연어 문장을 입력하기 때문에 입력 token에 대해 discrete함을 의미하고, P-tuning에서는 trainable parameter를 둬서 입력 token space를 continuous space로 옮겨주는 역할을 한다.

 

 

2. Method

먼저 용어를 정리해보면 아래와 같다.

  • Language Model: M
  • discrete input tokens: x1:n={x0,x1,⋯,xn}
  • input embeddings: {e(x0),e(x1),⋯,e(xn)}
  • vocabulary of Language Model: V
  • i-th prompt token: [Pi]

LM이 학습되는 시나리오는 input token x에 대해 target y를 맞추는 것이다. BERT의 경우 y는 [MASK] token, GPT의 경우 next token이 될 것이다.

이때 prompt p의 역할을 context x, target y와 prompt를 엮어 template T로 만드는 것으로 정의해볼 수 있다. 아래 그림에서 처럼 "The capital of Britain is [MASK]."이라는 template이 있을 때 "The capital of ... is ... ."가 prompt, "Britain"이 context, "[MASK]"가 target이 된다.

 

P-tuning 그림

 

조금 헷갈렸던 부분은 prompt의 위치와 개수였는데 공개된 코드에서 확인해보니 input token 앞뒤로 3개씩 붙여주는 등 고정된 위치에 적절한 개수(10개 내외)를 주는 것 같다.

 

위의 그림 기준으로 설명해보면 input을 template T={[P0:i],x,[Pi+1:m],y}라고 할때, 원래의 언어모델은 [Pi]∈V이고 T을 아래와 같이 임베딩을 계산한다.

{e([P0:i]),e(x),e([Pi+1:m]),e(y)}

 

하지만 P-tuning에서는 [Pi]를 pseudo token으로 가정하고 아래와 같이 임베딩을 계산한다.

{h0,...,hi,e(x),hi+1,...,hm,e(y)}

여기서 hi는 trainable embedding tensor(Prompt Encoder output)로 논문의 설명대로라면 원래의 언어모델 M이 표현할 수 있는 vocabulary V의 한계를 넘어 continuous space상에서 존재하는 prompt를 얻을 수 있게 된다고 한다.

 

그 이후에는 언어모델 M의 parameter는 고정시켜두고 원래의 loss function L을 사용하여 continuous prompt hi(0≤i<m) 미분을 통해 optimize한다.

h^0:m=arg minh L(M(x,y))

 

Prompt Encoder로는 LSTM을 사용했다고 하는데 간단한 MLP를 사용해도 무방하다.

 

 

3. Experiments

P-tuning 실험 결과

P-tuning이 왜 많이 쓰이는지를 보여주는 실험 결과이다. GPT, BERT 계열에서 fine-tuning을 통해 많은 성능 향상을 끌어냈으며 언어모델 구조와 상관없이 적용이 가능하다. 오른쪽 결과는 Manual Prompt(MP), Fine-tuning(FT), MP+FT, P-tuning의 성능을 비교한 것인데 Fine-tuning보다 같거나 더 좋은 결과를 보여주고 있다.

 

 

 

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'논문 및 개념 정리' 카테고리의 다른 글

[2022] SimCSE: Simple Contrastive Learning of Sentence Embeddings  (0) 2022.10.01
[2021] LoRA: Low-Rank Adaptation of Large Language Models  (0) 2022.07.14
[2020] Poly-encoders: architectures and pre-training strategies for fast and accurate multi-sentence scoring  (0) 2022.04.04
[LM] Perplexity 개념  (0) 2022.02.17
[GPT3] 주요 내용 정리  (0) 2022.02.16
  1. 1. Introduction
  2. 2. Method
  3. 3. Experiments
'논문 및 개념 정리' 카테고리의 다른 글
  • [2022] SimCSE: Simple Contrastive Learning of Sentence Embeddings
  • [2021] LoRA: Low-Rank Adaptation of Large Language Models
  • [2020] Poly-encoders: architectures and pre-training strategies for fast and accurate multi-sentence scoring
  • [LM] Perplexity 개념
Fine애플
Fine애플
이것저것
끄적끄적이것저것
Fine애플
끄적끄적
Fine애플
전체
오늘
어제
  • 분류 전체보기 (167)
    • 논문 및 개념 정리 (27)
    • Pattern Recognition (8)
    • 개발 (57)
    • python 메모 (45)
    • pytorch, tensorflow (5)
    • 알고리즘 (9)
    • Toy Projects (4)
    • 통계이론 (2)
    • Reinforcement Learning (10)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 언어모델
  • 알고리즘
  • nlp
  • reinforcement learning
  • miniconda
  • container
  • Docker
  • Probability
  • Bert
  • 딥러닝
  • python
  • ubuntu
  • 자연어
  • tensorflow
  • BigBird
  • PyTorch
  • GPU
  • pandas
  • transformer
  • 개발환경

최근 댓글

최근 글

hELLO · Designed By 정상우.
Fine애플
[2021] GPT Understands, Too (P-tuning)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.