https://arxiv.org/abs/2005.00247
2025.01.04 - [[Deep daiv.]/[Deep daiv.] NLP] - [Deep daiv.] NLP - Prompt & Prefix Tuning
(이전 글에서 이어집니다.)
Intro.
PEFT의 또 다른 방법으로 어댑터(Adapter)라는 것이 있습니다.
이전 글에서 언급한 방법들처럼 모델 앞단에 Leanerable Parameter를 추가하는 대신 모델 중간에 Task-specific Parameter를 추가하고, 이들만 학습하는 방식입니다.
결국 프롬프트 튜닝과 결은 같은데, 추가한 파라미터의 위치만 달라지는 것입니다.
그렇다면 Adapter가 집중한 기존 fine-tuning 단점은 무엇일까요?
전이 학습의 단점
전이 학습이란, 한 분야의 문제를 해결하기 위해서 얻은 지식과 정보를 다른 문제를 푸는데 사용하는 방식입니다. 예를 들어 딥러닝 분야에서 '이미지 분류'문제를 해결하는데 사용했던 네트워크(DNN; Deep Neural Network)를 다른 데이터셋 혹은 다른 문제(task)에 적용시켜 푸는 것을 의미합니다. *사전학습된 LM모델을 이용해 downstream task를 fine-tuning을 통해 해결하는 것도 전이학습의 일례입니다.
기존의 제안되었던 Transfer Learning 방식으로는 Sequential fine-tuning이 있습니다.
Sequential fine-tuning은 여러 task를 순차적으로 학습하는 방식입니다. 하지만 이 방식으로 학습하면 catastrophic forgetting 문제가 발생할 수 있습니다. 이는 각 weight들이 해당 task를 학습할 때 정확히 어떤 correlation이 있는지 모르는 상태에서 파인튜닝을 진행하여 weight을 바꾸면 기존 task에 맞춰져있던 weight들을 망각하는 것입니다.
이는 전이 학습의 대표적인 약점으로 이전 학습 데이터 셋과 새로운 학습 데이터 셋간의 연관성이 있더라도 이전 데이터 셋에 대한 정보를 대량으로 손실하게 됩니다. *이러한 약점으로 인해 파인 튜닝을 활용하는 방법은 다양한 태스크에 대처하기 힘들어집니다. 하지만 프롬프트 튜닝이나 추후에 설명할 어댑터는 특정 태스크에 맞는 파라미터는 모델 전체에 비해 작은 부분을 차지하기 때문에, 사전 학습때 변경된 파라미터들을 망각하지는 않는다는 장점이 있습니다.
Adapter란?
본 논문에서는 Adapter를 활용해 기존 기법이 가지고 있었던 문제점(catastrophic forgetting)을 해결한 Transfer Learning기법을 제안합니다. 우선 제안 기법을 살펴보기에 앞서 Adapter가 무엇인지를 알아보겠습니다.
앞서 언급한 것처럼 기존의 방식들은 pre-trained → fine-tuning으로 학습을 진행했습니다. 그러다 보니 특정 task에 fine-tuning된 모델을 재사용하기 위해서는 parameter 전체를 공유해야 합니다. *서로 다른 task를 수행하지만, 이미 특정 task에 fine-tuning된 파라미터를 활용해야합니다.
이를 경량화하기 위해 Adapter는 fine-tuning단계에서 전체 parameter를 학습하지 않습니다. *이 점은 prompt tuning과 마찬가지입니다.
Transformer Layer사이에 Adapter layer를 일정 layer개수마다 1개씩 배치하고, fine-tuning단계에서 Adapter layer만을 학습합니다.
전체 parameter에 비해 Adapter의 parameter는 1% 이하이기 떄문에 빠르게 학습할 수 있으며, 특정 Task에 fine-tuning된 adapter만 재사용해도 되기 때문에 공유가 용이합니다.
AdapterFusion
AdapterFusion은 다수의 Task의 지식을 공유하기 위해 two-stage learning algorithm을 도입한 새로운 architecture를 제안합니다. 첫 stage에서는 각 task별 adapter를 학습합니다. 그후 다음 stage에서는 이전 stage에서 학습한 adapter를 AdapterFusion을 이용해 결합해 최종 결과를 출력합니다. *이런 방식은 catastrophic forgetting을 방지하기 위한 방법입니다. 각 task별 adapter를 따로 학습하기 때문에, 최근 task학습으로 인한 이전 task의 weight들이 초기화되지 않기 때문입니다.
Adapter는 하나의 Task로만 학습된 Single-task Adapter와 다수의 Task를 동시에 학습시킨 Multi-task Adapter를 모두 사용합니다. 실험에서는 Multi-task Adapter를 포함시킨 것과 그렇지 않은 것으로 성능을 비교합니다.
(AdapterFusion에 대한 자세한 구조와 수식들은 넘어갑니다. 궁금하시면 논문을 참고해주세요.)
Result
그림 3.을 보면 Fusion의 대부분의 작업에서 성능 향상이 이루어짐을 알 수 있습니다.
그림 4. 는 어떤 task를 수행할 때 Attention Weight를 시각화해 어떤 Adapter가 다른 task를 평가할 때 영향을 미쳤는지를 살펴본 것입니다. 유의미한 데이터는 MultiNLI입니다. 이런 task는 단일 Adapter로 평가했을 때보다 AdapterFusion을 사용했을 때 약 6.5%정도의 성능 향상을 보여줬습니다. 이는 다른 Task들을 학습한 정보를 활용했기 때문에 성능이 올라갔다고 볼 수 있습니다.
prompt tuning vs adapter
그렇다면 기존의 prompt tuning과 adapter를 활용한 PEFT는 어떤 차이가 있을까요?
Inductive Bias
우선 prompt tuning은 각 task에 맞는 세팅이 필요합니다. Inductive Bias, 재귀적 편향이 있어서 비슷한 세팅에서만 좋은 성능을 보임을 가정하지만, 다른 세팅에 대해서는 좋은 성능을 가정하지 않는다는 단점이 있습니다. *입력 프롬프트가 정해져야 좋은 성능을 보장합니다.
그에 반해 adapter를 활용한 방법은 그런 세팅이 필요하지 않습니다.
https://re-code-cord.tistory.com/entry/Inductive-Bias%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
Performance
성능의 차이도 분명했습니다.
위에서 봤던 그림 4. 처럼 AdapterFusion을 활용한 모델은 서로 다른 task들을 학습한 weight들끼리 긍정적인 영향을 줘서 더 나은 성능 향상을 이끌 수 있지만, prompt tuning은 불가능합니다. *또한 prompt tuning의 경우 입력 공간의 수정만으로 모든 태스크에 대응해야 하므로, 태스크가 아주 복잡하거나 도메인의 차이가 크면 성능의 한계가 있을 수 있습니다. 하지만 Adapter를 활용하면 모델 내부 표현을 수정할 수 있기 때문에, prompt tuning대비 더 나은 성능을 내는 경우가 많습니다.
배포
마지막으로는 배포의 이점입니다.
prompt tuning은 모델 자체의 구조를 변경할 필요가 있기 때문에(*prompt tuning의 경우는 embedding layer의 크기 변경, prefix tuning의 경우는 모델에 MLP를 달아줘야 합니다.) 학습하는 파라미터만 줄어들 뿐, 배포 환경에서 갖는 이점이 없었습니다. 반면, 어댑터는 원본 모델에 임의로 탈부착이 가능한 형태로 만들어졌기 때문에 배포에서도 큰 이점을 가졌습니다.
AdapterFusion의 단점
모델 구조 변경에 따른 복잡성 증가
기존의 사전학습 모델에 Adapter 모듈을 삽입해야하기 때문에 모델의 구조가 복잡해집니다. 그리고 이는 추가적인 layer삽입으로 인한 추론 지연이 발생한다는 단점으로 이어집니다.
Adapter layer가 들어가면, 모델이 순방향 추론을 할 때 Adapter layer를 한 번 더 거쳐야 합니다. 비록 Adapter 자체의 파라미터 수는 적더라도, 실시간 추론을 중요시하는 애플리케이션에서 이 latency가 문제가 될 수 있습니다. 특히 대형 모델의 경우, 작은 지연 시간도 매우 중요한 시스템 환경에서 Adapter 추가로 인한 추론 시간이 무시할 수 없을 정도로 늘어날 수 있습니다.
도메인의 차이가 큰 경우 성능 한계
Adapter는 기존 베이스 모델이 학습한 표현을 활용하여 특정 task에 맞춰 '수정'하는 방식입니다. 만약 베이스 모델과 매우 다른(혹은 생소한) 도메인, 데이터 분포를 다루어야 할 때, 작은 Adapter 파라미터만으로는 충분히 모델을 적응시키지 못할 수 있습니다. 특히, 베이스 모델 자체 표현이 도메인에 적합하지 않으면, Adapter만으로는 성능 개선에 한계가 있을 수 있습니다. *Full parameter fine-tuning이 필요한 경우도 있을 수 있습니다.