0. Abstract
Abstract 부분에서는 기존에 사용하던 fine-tuning과 저자들이 제시하는 prefix-tuning을 비교하고 있다.
- Fine-tuning
→ downstream task를 처리하기 위해 전체 파라미터를 모두 학습해야 하며, 해당 모델을 저장할 때에도 모델 전체를 copy해야한다. - Prefix-tuning
→ Langauge model의 parameter들은 freeze한다. 대신 앞에 붙여지는 continuous task-specific vector를 optimize하는 방식이다. 이때 continous task-specific vector를 prefix라고 부른다.
Prefix-tuning은 prompting에서 영감을 받았다고 한다. 이때 prompt와 관련된 의미들은 다음과 같다.
- prompt: 원하는 응답을 이끌어 내기 위해 언어모델에 전달하는 질문이나 요청 (즉, 언어 모델의 입력값)
1. Introduction
- Prefix-tuning은 위와 같이 Transformer의 parameter들은 freeze하고 빨간색의 Prefix 부분만을 optimize하면 된다. 결과적으로 각 테스크를 학습하면 해당 부분만 저장하면 되기 때문에 효율적이다.
기존의 fine tuning은 large pretrained language model들을 사용하기 위한 일반적인 접근 방법이였다. 하지만 모든 파라미터들을 update하고 store해야한다. 따라서 이런 방식은 language model들이 점차 커지면서 사용하기 힘들어졌다. (GPT-2는 774M개의 파라미터를 가지며, GPT-3는 175B의 파라미터를 가진다.)
이런 문제를 해결하기 위해 대부분의 pretrained parameter들을 freeze하고, 작은 trainable module을 module에 augment하는 방식인 lightweight fine-tuning이 등장한다. 예를 들어, adapter-tuning의 경우 pretrained language model의 layer들 사이에 추가적인 task-specific layer를 삽입한다. Adapter-tuning은 단지 2~4% 정도의 파라미터만 추가하지만 굉장히 좋은 성능을 보여준다.
이후 GPT-3가 등장하면서 task-specific tuning을 사용하지 않았다. 대신, 유저들은 task에 대한 몇 가지 예시를 보여주고, 자연어를 통한 instruction을 제공해야 한다. 그러면 Langauge Model로부터 output을 생성할 수 있다. 이러한 방식은 in-context learning 혹은 prompting이라고 부른다.
논문 저자들은 Natural Language Generation(NLG) task의 fine-tuning에 대한 가벼운 대안(lightweight alternative)으로 prompting의 영향을 받은 Prefix-tuning을 제안한다. 위 사진에서 보는 것과 같이 data table에 대해 textual description을 생성하는 task를 생각해보자. input은 linearized table로 "name: Starbucks | type: coffee shop"이다. output은 input에 대한 description으로 "Starbucks serves coffee."이다. Prefix-tuning은 continuous task-specific vector들을 input에 prepend한다. (이때 붙이는 vector들을 prefix라고 부른다.)
- "prepend"란 어떤 요소나 값이나 데이터를 특정 구조의 앞에 추가하는 것을 의미한다.
2. Prefix-Tuning
2.1 Intuition
저자들은 prompting으로부터 얻은 직관(intuition)에 따라 적절한 context를 가지는 것은 parameter 변화 없이 LM을 steer할 수 있다고 믿었다. 예를 들어, LM이 한 개의 word(Obama)를 생성하길 원한다고 하자. 그럼 우리는 context로써 obama와 함께 자주 오는 Barak을 앞에 prepend할 수 있다. 그럼 LM은 더 높은 확률로 그 단어를 찾아낼 것이다. 이 intuition을 single word 혹은 sentence 생성을 넘어 Natrual Language Generating task에 적용해보자. 직관적으로 x(=input)로부터 추출된 것을 guding함으로써 context는 x의 encoding에 영향을 미칠 수 있다. 그리고 이것은 다음 token의 분포를 steer함으로써 y(=output)을 생성하는데 영향을 미칠 수 있다. 그러나 이러한 context가 존재하는지 아닌지는 명확하지 않다. "summarize the following table in one sentence"와 같은 Natural language task instruction들은 expert annotator가 task를 해결하도록 guide할 수 있지만, 대부분의 Language Model들은 실패했다. discrete instruction들에 대해 data-driven optimization을 수행하는 것은 도움이 될 수 있지만 discrete optimization은 연산적으로 어렵다.
discrete token들에 대해 optimizing을 하는 것 대신에 저자들은 instruction들을 continuous word embedding들로 optimize했다고 한다. 이 방법이 discrete prompt보다 더 expressive하다. 반면 모든 activation layer에 intervene하는 것 보다는 덜 expressive하다고 한다. 따라서 Prefix-tuning은 모든 layer들의 prefix를 optimize해야한다.
2.2 Method
Prefix-tuning은 z=[PREFIX; x; y]를 얻기 위해 autoregressive Language Model에 prefix를 prepend한다. 혹은 z=[PREFIX; x; PREFIX'; y]를 얻기 위해 Figure2와 같이 두 개의 encoder 모두에 prefix를 prepend한다. 이때 추가된 Prefix만 trainable parameter로 구성하고 뒤에 있는 y를 출력하도록 학습한다. 이렇게 구성하면 각 Task별로 가장 적합한 Prefix를 찾을 수 있다. (이렇게 찾은 Prefix가 Continuous Vector인 것이다.) 각 hi의 수식은 다음과 같다.
2.3 Parametrization
실험에 의하면 위처럼 직접적으로 prefix를 학습하는 방법은 optimization이 불안정하고 성능을 떨어뜨렸다고 한다. 따라서 저자들은 MLP(큰 feedforward neural network)로 구성된 더 작은 matrix로 기존 prefix matrix를 reparametrize했다고 한다. (기존 prefix matrix를 P, 더 작은 matrix를 P'이라고 하자.) 이때 P와 P'은 row의 개수는 같지만 column의 개수는 다르다. 학습이 완료되면, P'은 버려도 되고, P만 저장하면 된다. 이때 P'와 P에 대한 수식은 다음과 같다.
3. Result
논문의 결과를 정리하면 아래와 같다.
- table-to-text: 파인튜닝과 유사한 성능을 보인다.
- summarization task: 파인튜닝보다 약간 성능이 떨어진다.
- 데이터가 적은 경우 prefix-tuning이 파인튜닝보다 좋은 성능을 보인다.
출처
'AI > NLP' 카테고리의 다른 글
[논문 리뷰] LoRA: Low-Rank Adaptation of Large Language Models (0) | 2024.05.01 |
---|---|
[논문 리뷰] Parameter-Efficient Transfer Learning for NLP (Adapter) (0) | 2024.05.01 |