본 논문 리뷰는 저의 개인적인 해석과 의견을 바탕으로 작성된 글입니다. 내용 중 해석의 오류나 개념적인 착오가 있다면, 망설이지 마시고 댓글로 혼내주시면 감사하겠습니다~
Preview - task vector에 대한 산술 연산을 이용해 모델을 편집(editing)하는 새로운 패러다임을 제안 - 다양한 비전 모델과 NLP 모델에서 실험한 결과, 여러 개의 태스크에 특화된 task vector를 더하면, 모든 목표 태스크를 잘 수행하는 단일 모델을 만들 수 있었고, 경우에 따라서는 단일 태스크 성능조차 오히려 향상됨 - 또한 task vector를 반대로 더하는 것을 통해, 예를 들어 유해한 발화 같은 원치 않는 행동을 제거하거나, 특정 태스크 자체를 의도적으로 잊게 만들 수 있으며, 그 과정에서도 다른 영역의 성능은 그대로 유지할 수 있음 - task analogy 기법은 이미 존재하는 데이터를 활용해, 데이터가 부족한 도메인이나 하위 집단에서도 성능을 향상시킬 수 있음
사전학습된 모델의 행동을 바꾸는 것(튜닝)은 머신러닝 시스템을 개발할 때 매우 흔한 일이다.
예를 들어, 특정 downstream 태스크의 성능을 높이거나, 사전학습 과정에서 생긴 편향을 줄이기 위해 모델을 수정한다.
이 논문에서는 task vector(태스크 벡터)를 중심으로, 신경망의 행동을 원하는 방향으로 조정하는 새로운 패러다임을 제안한다.
task vector란, 사전학습된 모델의 가중치 공간(weight space)에서 그 방향으로 이동하면 특정 태스크 성능이 좋아지는 방향 벡터를 의미한다.
task vector는 같은 모델을 특정 태스크로 fine-tuning 한 뒤의 가중치에서 사전학습 모델의 가중치를 그대로 빼서 만든다.
즉, 이 태스크를 학습하면서 모델이 얼마나, 어떤 방향으로 변했는가를 벡터로 표현한 것
이렇게 만든 task vector는 부호를 바꾸거나(negation), 여러 개를 더하는(addition)산술 연산으로 조합할 수 있으며, 그 결과에 따라 모델의 행동도 함께 바뀐다.
task vector의 부호를 반대로 하면, 해당 태스크 성능은 떨어지지만 다른 태스크(컨트롤 태스크)에서의 모델 행동은 거의 변하지 않는다.
또한 여러 task vector를 더하면, 하나의 모델이 여러 태스크에서 동시에 성능을 잘 내도록 만들 수 있다.
마지막으로, 태스크들 사이에 "A는 B와 같고, C는 D와 같다"라는 analogy relationship가 있을 경우, 네 번째 태스크의 데이터가 전혀 없어도 나머지 세 태스크의 task vector를 조합해 성능을 향상시킬 수 있다.
결국 이 논문은 fine-tuning으로 생긴 가중치 변화 자체를 벡터(task vector)로 보고, 그 벡터를 더하고 빼는 간단한 연산만으로 모델의 능력을 제거하거나, 결합하거나, 새로운 태스크로 전이할 수 있음을 보여준다.
📍1. Introduction
실제 환경에서 사전학습된 모델을 가지고 특정 task 데이터로 다시 가중치를 업데이트(수정) 시킨다.
대표적인 목적들로는 downstream task의 성능을 높이기 위해, 사전학습 과정에서 모델이 학습해버린 편향이나 원하지 않는 행동을 완화하거나 제거하기 위해, 모델의 행동을 인간의 선호나 가치관에 맞게 정렬(alignment)하기 위해, 새로운 정보가 생겼을 때 모델의 지식을 업데이트하기 위해 등등....
이 논문에서는 task vector를 기반으로 한 완전히 새로운 신경망 편집(editing) 패러다임을 제시한다.
task vector는 어떤 태스크를 잘 수행하는 데 필요한 정보 자체를 담고 있는 벡터다. 즉, 태스크를 잘하게 만든 변화량(방향)이라고 이해하면 된다.
구체적으로, task vector는 (태스크로 fine-tuning된 모델 가중치) − (사전학습 모델 가중치)로 얻어진다.즉, 이 태스크를 학습하면서 모델이 바뀐 방향과 크기를 나타냄.
Task vector에 대해 위에서 계속 같은 말을 반복했지만...결국 핵심은 이거다!
👉 모델의 파라미터(가중치) 공간에서 덧셈, 뺄셈 같은 산술 연산이 가능하다
- 기존에는 A,B Task를 동시에 잘하는 모델을 만들기 위해서는 각각의 데이터를 합쳐서 모델 전체 혹은 head를 파인튜닝하거나 A를 학습한 모델에 B를 다시 학습시켰다면, (A를 학습한 뒤 B를 학습하면 A를 까먹는 Catastrophic Forgetting이 발생) - 그러지 말고 각각의 task로 학습된 모델의 가중치에서 backbone 모델의 가중치를 빼서 변화된 정도(변화량)를 나타내는 Task Vector를 구하고
- 그 Task Vector끼리 더하거나 빼서 새로운 모델을 조합하자
a) 기본 Task Vectors를 구하는 방법
이젠 task vector에 어떤 산술 연산(task arithmetic)을 적용함으로써 다양한 모델을 edit할 수 있는지 알아보자!!!!
Forgetting via negation
여기서 말하는 forgetting은 단순 성능 저하가 아니라 의도적으로 특정 능력을 제거하는 것을 의미한다.
task vector의 부호를 반대로 적용함으로써 유해한 텍스트 생성 같은 원치 않는 행동을 줄이거나 OCR처럼 특정 태스크 자체를 완전히 잊게 만들 수도 있다.
모델을 다시 학습하지 않고도, 그 태스크를 배우게 만든 방향만 되돌린다.
Learning via addition
여기서 말하는 learning은 다시 학습한다는 뜻이 아니라, 이미 학습된 것들을 더해서 새로운 능력을 얻는 것을 의미한다.
여러 task vector를 더하면, 여러 태스크를 동시에 잘 수행하는 멀티태스크 모델을 만들 수 있고, 경우에 따라서는 단일 태스크 성능도 더 좋아질 수 있다.
Task analogies
태스크들 사이에 A는 B와 같고, C는 D와 같다라는 analogy 관계를 만들 수 있다면, 앞의 세 태스크에서 얻은 task vector들을 조합하면, 네 번째 태스크의 성능을 향상시킬 수 있다. 심지어 그 네 번째 태스크에 대해 학습 데이터가 거의 없거나 아예 없어도 가능하다.
📍2. Task Vectors
이 논문에서 말하는 태스크(task)란, 단순히 “문제 종류”가 아니라 fine-tuning에 사용되는 데이터셋과 loss function의 조합으로 정의된다.
Task vector
앞서 말했듯이, 태스크 t에 대한 task vector는 두 가중치(Pre-trained 가중치, Fin-tuning 가중치)벡터의 원소별 차이(element-wise difference)로 정의된다.
task vector는 같은 아키텍처를 가진 어떤 모델의 가중치 θ 에도 적용할 수 있다. task vector를 원소별 덧셈으로 더하며, 필요하다면 스케일링 계수 λ를 곱하면된다.
task vector를 더해 만든 새로운 가중치
λ 값은 임의로 정하지 않고, 검증용 데이터를 사용해 가장 성능이 좋은 값으로 선택한다. (task vector는 방향이고 λ는 얼마나 갈 것인가를 조절)
예를 들어, λ = 1로 설정하고 사전학습 모델 θ_pre에 task vector를 더하면, 그 태스크로 fine-tuning 한 모델과 정확히 동일하다.
이 논문은 추가 파라미터 없이 fine-tuning이 가능한 open-ended 모델에 초점을 맞춘다. 이런 모델들은 태스크가 바뀌어도head를 새로 만들 필요가 없다.
open-vocabulary 이미지 분류기 (예: CLIP 계열)
text-to-text 모델 (예: T5, GPT 계열)
반대로, fine-tuning 과정에서 새로운 파라미터가 추가되는 경우도 있다. 예를 들면 새로운 분류 헤드를 붙이는 상황이다. 이런 경우에는, 공유되는 가중치(shared weights)만 병합하는 방식(backbone만 task arithmetic 적용)도 가능하지만 향후 과제로 남기고 다루진 않는다.
Editing models with task arithmetic
[Figure 1]에서 보인 것처럼, 이 논문은 task vector에 대한 세 가지 산술 연산에 집중한다. 이 모든 연산은 모델 가중치 벡터에 대해원소별(element-wise)로 적용된다.
부호 반전 (negation)
덧셈 (addition)
아날로지 조합 (analogy)
부호 반전 (negation) : task vector τ의 부호를 반대로 한를 적용하는 것은, 사전학습 모델과 fine-tuned 모델 사이를 넘어서는 방향으로 이동(extrapolation)하는 것과 같다. 되돌리는 것을 넘어서 반대편으로 더 간다는 의미다.
뒤에서 더 자세히 살펴보겠지만, 결과는 목표 태스크 성능은 나빠지지만 컨트롤 태스크 성능은 거의 변하지 않는다.
덧셈 (addition) : 두 개 이상의 task vector를 더하면, 아래와 같은 새로운 task vector가 만들어진다.
이 벡터를 적용한 모델은 각 task vector에 해당하는 모든 태스크를 잘 수행하는 멀티태스크 모델이 될 뿐만 아니라 놀랍게도, 각 태스크를 따로 fine-tuning 한 모델보다 더 높은 성능을 보이는 경우도 있다.
아날로지 조합 (analogy) : 마지막으로,태스크 A, B, C, D가 "A는 B와 같고, C는 D와 같다"라는아날로지 관계를 이룰 때를 생각한다.
아래와 같은 task vector를 만들 수 있고, 이를 이용해 task D에 대한 성능도 뽑을 수 있다. (word embedding analogy 수식과 동일한 구조)
📍3. Forgetting via Negation
task vector의 부호를 반대로 하는 것(negation)이 특정 목표 태스크의 성능만 효과적으로 떨어뜨리면서도, 다른 영역의 성능은 거의 해치지 않는다는 점을 확인해 보자.
이러한 forgetting 또는 unlearning은 사전학습 과정에서 모델이 의도치 않게 학습해 버린 편향이나 바람직하지 않은 행동을 완화하는 데 도움을 주고 경우에 따라 법적·윤리적 요구사항을 충족하기 위해 특정 태스크 자체를 완전히 제거하는 것이 필요할 수도 있다.
예를 들면, 이미지 분류기가 얼굴을 인식하지 못하게 하거나 OCR을 통해 개인 정보를 읽지 못하게 하는 것이 해당된다.
여기서 중요한 것은 편집 대상이 아닌 특정 영역의 데이터를 처리할 때 모델의 행동에 큰 영향을 주지 않아야 한다.
예를 들어, 얼굴 인식을 지워도 고양이·자동차 분류는 그대로 여야 한다.
그래서 저자들은, 지우고 싶은 목표 태스크(target task) 성능뿐 아니라, 컨트롤 태스크(control task)의 성능도 함께 측정한다
이 컨트롤 태스크는 "건드리면 안 되는 영역"을 대표한다.
IMAGE CLASSIFICATION 부분에 대한 리뷰는 생략하겠습니다!
3.2 TEXT GENERATION
서로 다른 크기의 GPT-2 모델들이 생성하는 유해한(toxic) 텍스트의 양을 줄이는 것을 목표로 한다.
이를 위해 저자들은, Civil Comments 데이터셋 중에서 독성 점수(toxicity score)가 0.8보다 높은 문장들만 골라 GPT-2를 fine-tuning 한다. (Pre-trained는 4.8%, Fine-tuned은 57% 유해한 문장을 생성)
그리고 이렇게 얻은 "독성 행동을 학습하게 만든 task vector"를 그대로 부호 반전(negation) 해서 모델에 적용한다. (Negative task vector로 학습시키니까 0.8% 유해한 문장을 생성)
다른 baselines과 비교
Gradient ascent : loss를 줄이는 게 아니라 일부러 키우는 방향으로 학습해서 해당 태스크 성능을 망가뜨리는 방법 (기존 gradient descent 하면 유해한 문장을 생성하게 학습하는 것이고, gradient ascent 하면 유해한 문장을 생성하지 않게)
Random vector : task vector와 크기(norm)는 같지만 방향은 무작위인 벡터를 모델에 적용하는 방식
Fine-tuned on non-toxic : Civil Comments 데이터 중에서 독성이 낮은 문장들(toxicity score 0.2 이하)만 사용해 fine-tuning 한 모델
모델 평가를 위해, 각 모델이 생성한 1,000개의 문장에 대해 Detoxify 모델을 사용해 독성 점수를 측정한다.
컨트롤 태스크로는, 언어 모델의 기본 언어 능력을 보기 위해 WikiText-103에서의 perplexity를 측정한다. (독성은 줄이되, 언어 모델로서의 능력은 유지되는가?)
결과를 보면 negative task vector를 적용하는 방식은 매우 효과적이다.
독성으로 분류되는 생성 결과 비율이 4.8%에서 0.8%로 감소했고, WikiText-103에서의 perplexity는 사전학습 모델 대비 0.5 이내 차이만 보인다.
반면 gradient ascent 방식은, 독성 문장은 줄이지만 언어 모델 성능 자체를 심각하게 훼손됨
비독성 데이터로 다시 fine-tuning한 모델 역시, 독성 감소 효과도 더 약하고 컨트롤 태스크 성능도 더 나쁘다.
실험 대조군으로 사용한 무작위 벡터를 더한 경우에는, 독성 감소도 없고 perplexity 변화도 거의 없다. 이로써, 효과의 원인이 ‘방향’에 있다는 것이 확인된다.
다른 크기의 GPT-2 모델 결과
📍4. Learning via Addition
이 방식은 두 가지 목적을 가진다.
1. 여러 태스크를 동시에 잘 수행하는 멀티태스크 모델을 만들거나
2. 단일 태스크의 성능 자체를 향상시키는 것이다.
이 덧셈 연산의 가장 큰 장점은, 내부에서 직접 학습한 모델이든 공개된 수많은 fine-tuned 모델이든 그 지식을 그대로 재사용·전이할 수 있다는 점이다. 그리고 이 과정에는 추가 학습도 필요 없고, 학습 데이터에 접근할 필요도 없다.
4.1 IMAGE CLASSIFICATION 부분은 리뷰 생략하겠습니다!
4.2 NATURAL LANGUAGE PROCESSING
덧셈이 멀티태스크 전용인가, 아니면 단일 태스크 강화에도 쓸 수 있나?
이를 위해 먼저, T5-base 모델을 GLUE 벤치마크의 4개 태스크에 대해 fine-tuning 한다.
그다음, Hugging Face Hub에서 이 T5 모델과 호환 가능한(checkpoint 구조가 맞는) fine-tuned 모델들을 탐색한다. 그 결과, 총 427개의 후보 체크포인트를 찾음.
이 427개 체크포인트 각각에서 얻은 task vector를 앞서 fine-tuning 한 T5 모델에 하나씩 더해본다.
그리고 각 경우에 대해, 어떤 체크포인트(task vector)가 가장 도움이 되는지 스케일링 계수 λ는 얼마가 좋은지를 검증 데이터를 통해 선택한다.
결국 목표 태스크 A에 대해 fine-tuning한 모델에, 다른 태스크 B로 학습된 task vector를 추가로 더했더니, A 태스크 성능이 더 향상되었다. 즉, 427개의 체크포인트에서 얻은 427개의 task vector를 하나씩 더해가며 테스트를 진행했고, 그 결과들 중에서 성능을 향상시키는 task vector가 존재했다.
Appendix D.6 ADDING PAIRS OF TASK VECTORS FROM NLP TASKS
이 절에서는 저자들이 직접 파인튜닝하지 않은 모델들, 즉 Hugging Face Hub에 공개되어 있던 외부 체크포인트들을 사용해서 task vector를 더하는 방식으로 멀티태스크 모델을 만들 수 있는지를 실험한 결과를 보여준다.
기존에도 여러 NLP 태스크를 하나의 모델에서 처리하려는 멀티태스크 학습 연구들이 있었고, 이들과 같은 문제의식을 공유한다는 점에서 출발한다.
구체적으로는, Hugging Face Hub에 올라와 있는 T5-base 기반의 파인튜닝 모델 6개를 골라 실험했는데, 인기와 태스크 다양성을 기준으로 선택했다. 총 6개의 각각의 모델들은 아래와 같은 데이터로 학습되었다.
sentiment analysis using movie reviews : IMDB
question answering : RACE, QASC
summarization : MultiNews
question generation : SQuAD
constrained text generation : CommonGen
이 모델들과 태스크들은 다음 조건을 만족한다.
1. 모두 같은 초기 모델(T5-Base)에서 출발했고
2. 추가 파라미터(head 등)를 붙이지 않고 파인튜닝되었으며
3. 태스크가 서로 충분히 다르고, Hub에서 실제로 많이 사용되는 모델들이다.
이 실험에서는 태스크 유형에 따라 서로 다른 평가 지표를 사용한다.
IMDB 감성 분류는 정답/오답이 명확한 분류 문제이므로 accuracy를 쓰고,
질의응답(RACE, QASC) 은 정답 문장이 정확히 맞는지가 중요하므로 exact match,
요약·질문 생성·제약 생성 같은 생성 태스크는 출력 문장의 품질을 보기 위해 ROUGE-2를 사용한다.
각 태스크의 성능은 그 태스크에 단독으로 파인튜닝된 모델의 성능으로 나누어 정규화한다. 이렇게 하는 이유는 태스크마다 난이도도 다르고 평가 지표도 다르기 때문이다.
결과를 보면 서로 다른 두 태스크에 특화된 모델 두 개를 하나의 모델로 합쳐도 성능 손실이 거의 없다는 것을 확인했다.
NLP에서는 일반적으로 pre-trained 모델과 fine-tuned 모델 간 성능 차이가 매우 크고, 태스크마다 입력 도메인, 문장 길이, 출력 형태가 극단적으로 다르기 때문에 위와 같은 결과가 나온 게 신기하다.
추가로, 이미지 분류에 비해 NLP에서는 어떤 태스크 조합을 고르느냐에 따라 성능 변동이 더 크다는 점도 관찰된다.
그럼에도 불구하고, 일부 태스크 조합에서는 각 태스크에 단독으로 파인튜닝된 모델보다도 더 높은 성능이 나오기도 했다.
평균적으로 보면, task vector를 더해서 만든 단일 모델은 각 태스크별 전문 모델 성능의 96.7% 수준을 유지한다.
📍5. Task Analogies
Domain generalization
많은 실제 문제에서, 라벨이 없는 데이터(unlabeled data)를 모으는 것은 사람이 직접 정답을 달아야 하는 라벨 데이터(annotation)를 수집하는 것보다 훨씬 쉽고 비용도 적게 든다.
만약 타깃 태스크에는 라벨 데이터가 전혀 없다면, 라벨이 있는 보조 태스크(auxiliary task)와 라벨이 필요 없는 비지도 학습 목적(unsupervised objective)을 함께 사용해서 task analogy 방식으로 타깃 태스크 성능을 끌어올릴 수 있다.
예시로, Yelp 리뷰 데이터에 대한 감성 분석(sentiment analysis)을 타깃 태스크로 생각해 보자
task analogy를 사용하면 다음과 같은 새로운 Yelp task vector를 만들 수 있음
Yelp 감성 분석 Task vector = Amazon 감성 분석 task vector + (Yelp 도메인의 언어적 특성 − Amazon 도메인의 언어적 특성)
즉, Amazon에서 배운 감성 판단 능력을 Yelp 도메인 언어 스타일에 맞게 이동(shift)시키는 연산
Amazon 감성 분석 task vector는 Amazon 리뷰 데이터에 대해 라벨이 있는 감성 분석 태스크로 파인튜닝해서 얻은 task vector
Yelp 도메인의 언어적 특성과Amazon 도메인의 언어적 특성은 각각 Yelp와 Amazon 데이터에서 라벨 없이 언어 모델링(language modeling)만 수행해서 얻은 task vector
Table 4에서는, 이러한 task analogy 방식이 모델 크기(T5-small, base, large)에 관계없이 Amazon과 Yelp 감성 분석 모두에서 성능 향상을 가져온다는 것을 보여준다.
추가적인 실험을 통해 확인한 결과, 감성 분석 task vector에 더 큰 가중치를 줄수록 최종 모델의 정확도가 더 높아지는 경향이 있었다.
그래서 모든 task vector를 동일하게 취급하지 않고, 감성 분석 task vector에 적용되는 스케일 계수 하나, 언어 모델링 task vector들(Yelp LM, Amazon LM)에 공통으로 적용되는 또 다른 스케일 계수 하나, 총 두 개의 독립적인 scaling coefficient를 사용했다.
Subpopulations with little data
실제 데이터에는 종종 특정 하위 집단(subpopulation)에 대해 본질적인 데이터 부족이 존재한다.
예를 들어, 실내 환경에서 촬영된 사자 사진은 실외 사자 사진이나 개 사진(실내·실외 모두)에 비해 훨씬 드물다.
이처럼 데이터가 부족한 하위 집단이 데이터가 풍부한 다른 하위 집단과 유추 관계(analogy)를 가질 수 있다면, task analogy를 적용할 수 있다.
저자들은 이 아이디어를 검증하기 위해, ImageNet과 사람 손그림(sketch) 데이터셋에 공통으로 존재하는 125개 클래스를 사용해 총 4개의 하위 집단을 구성했다.
이 125개 클래스를 거의 같은 크기의 두 그룹으로 나누어, 결과적으로 A, B, C, D라는 네 개의 하위 집단을 만들었다.
이때 (A, C)와 (B, D)는 각각 같은 객체 클래스(예: 같은 동물 종류)를 공유하도록 구성되어 있다.
반면 (A, B)와 (C, D)는 각각 같은 스타일(style) 즉, 사진(real image) 또는 스케치(sketch)를 공유한다.
비록 실제 실험에서는 각 하위 집단이 여러 클래스를 포함하고 있지만, 설명을 위해 “real dog”, “real lion”, “sketch dog” and “sketch lion”을 예시로 들겠다.
어떤 타깃 하위 집단이 주어지면, 그 타깃을 제외한 나머지 세 개의 하위 집단 각각에 대해 모델을 독립적으로 파인튜닝하여 세 개의 task vector를 만든다. 그리고 이렇게 얻은 task vector들을 task arithmetic으로 결합한다.
예를 들어, 스케치 사자 task vector = 스케치 개 task vector + (실제 사진 사자 − 실제 사진 개)
Figure 4 결과가 네 가지 타깃 하위 집단 각각에 대해 실험한 성능을 평균한 값이다.
사전학습(pre-trained) 모델과 비교했을 때, task vector를 적용한 모델은 평균적으로 정확도를 3.4% p 향상했다.
더 나아가, 타깃 하위 집단에 대한 소량의 데이터라도 파인튜닝에 사용할 수 있다면, 사전학습 모델에서 시작하는 것보다 task vector로 편집된 모델에서 시작하는 것이 항상 더 높은 정확도를 보였다.
심지어 추가 데이터 없이 analogy만 적용했을 때 얻는 성능 향상은, 타깃 하위 집단에 대해 약 100개 정도의 학습 데이터를 새로 수집하고 라벨링 한 것과 비슷한 효과를 낸다.
Kings and queens
이미지 분류기가 “king(왕)”이라는 새로운 카테고리를, 직접적인 학습 데이터 없이도 “queen(여왕)”, “man(남자)”, “woman(여자)”라는 세 개의 관련된 클래스 데이터만으로 배울 수 있을까?
τking = τqueen + (τman−τwoman)
그 결과를 먼저 보면, “king” 클래스에 대해 아무 학습 데이터도 사용하지 않았음에도 불구하고, task analogy를 적용한 모델은 사전학습(pre-trained) 모델보다 훨씬 큰 정확도 향상을 보였다.
📍6. Discussion
이 섹션에서는 앞에서 얻은 실험 결과들을 좀 더 깊이 이해하기 위해, 서로 다른 태스크에서 얻어진 task vector들 간의 유사도가 어떠한지, 그리고 학습률이나 랜덤 시드 같은 학습 설정이 task vector에 어떤 영향을 미치는지를 분석한다.
Similarity between task vectors
분석 결과, 서로 다른 태스크에서 얻은 task vector들은 대체로 서로 거의 직교에 가깝다는 것을 관찰했다.
task A의 변화 방향이 task B의 변화 방향을 방해하지 않는다
저자들은 이러한 거의 직교적인 구조 덕분에, task vector들을 단순히 더하더라도 서로 간섭이 거의 발생하지 않는다고 추측한다.
또한 의미적으로 서로 비슷한 태스크들 사이에서는 task vector 간의 코사인 유사도가 더 높게 나타난다는 것도 관찰했다.
예를 들어 Figure 5의 왼쪽 그래프에서 가장 큰 코사인 유사도를 보이는 태스크 쌍들은 MNIST, SVHN, GTSRB인데, 이 태스크들은 모두 숫자 인식이라는 공통된 핵심 능력을 요구한다.
이러한 "태스크 공간(task space)"에서의 유사성은 기존 연구 중 하나인 Ilharco et al. [39]에서 보고된 일부 결과들을 뒷받침함
Ilharco et al. 의 연구는 어떤 태스크로 파인튜닝된 모델과 사전학습 모델 사이의가중치를 보간(interpolate) 만으로도 그 태스크와 유사한 다른 태스크에서 성능이 향상되는 현상이 관찰되었다.
다시 말해, 단일 task vector를 적용하는 것만으로도 유사한 task에서 성능을 향상 시킬 수 있다
예를 들어, Figure 5에서 가장 큰 코사인 유사도를 보인 MNIST와 SVHN을 생각하면 MNIST로 학습한 task vector를 적용했을 때 SVHN 데이터에 대해 아무 학습 없이도 정확도가 향상되는 현상될 수 있음
The impact of the learning rate
학습률을 크게 할수록, task vector를 사용할 때도, 개별 태스크 모델을 직접 파인튜닝할 때도 모두 정확도가 감소하는 경향이 나타난다.
다만 그 성능 저하의 속도는, 개별 태스크 모델을 직접 파인튜닝할 때가 task vector를 사용할 때보다 더 완만하다.
이러한 관찰 결과는 기존 연구(두 개의 파인튜닝된 모델 사이를 선형적으로 보간할 때,학습률이 클수록 정확도가 더 많이 감소하는 현상)의 결과와도 일치한다.
따라서 개별 태스크 모델을 파인튜닝할 때는 task vector를 활용할 경우에는 상대적으로큰 학습률도 허용될 수 있지만, 학습률 선택에 훨씬 더 주의해야 한다
task vector는 "정확한 방향"이 생명이기 때문에 learning rate가 크면 방향이 흔들림
더 나아가 저자들은, 자연어 처리(NLP) 실험에서 task vector를 더할 때 성능 변동이 컸던 이유 중 하나가 커뮤니티에서 공개된 모델들이 서로 다른(그리고 종종 큰) 학습률로 파인튜닝되었기 때문일 수 있다고 추측한다.
The evolution of task vectors throughout fine-tuning
Figure 7에서는 파인튜닝 과정 전체에 걸쳐 task vector가 시간에 따라 어떻게 변하는지를 시각적으로 보여준다.
파인튜닝 도중에 얻은 중간 단계의 task vector들은 학습이 끝났을 때 얻는 최종 task vector의 방향으로 아주 빠르게 수렴한다.
방향이 중요하고, 크기는 상대적으로 덜 중요
더 나아가, 두 개의 이미지 분류 태스크에서 아직 학습이 끝나지 않은 중간 단계 task vector들만을 더해서 만든 모델의 성능은 파인튜닝을 시작하고 수백 step만 지나도 이미 포화(saturate)되는 것을 관찰했다
이러한 결과는, 파인튜닝 도중의 task vector를 활용하는 것만으로도, 정확도 손실은 거의 없이 연산 자원(compute)을 크게 절약할 수 있다는 점을 시사한다.
Limitations
task vector는 모델 가중치에 대해 원소별(element-wise) 연산을 수행하기 때문에, 같은 아키텍처를 가진 모델들 사이에서만 적용할 수 있다.
또한 이 논문의 모든 실험에서는, 같은 사전학습 초기화(pre-trained initialization)에서 출발해 파인튜닝된 모델들에 대해서만 task arithmetic을 수행했다.
📍7. Conclusion
이 논문에서는 task vector에 대한 산술 연산을 이용해 모델을 편집(editing)하는 새로운 패러다임을 제안한다.
다양한 비전 모델과 NLP 모델에서 실험한 결과, 여러 개의 태스크에 특화된 task vector를 더하면, 모든 목표 태스크를 잘 수행하는 단일 모델을 만들 수 있었고, 경우에 따라서는 단일 태스크 성능조차 오히려 향상되었다.
또한 task vector를 반대로 더하는 것을 통해, 예를 들어 유해한 발화 같은 원치 않는 행동을 제거하거나, 특정 태스크 자체를 의도적으로 잊게 만들 수 있으며, 그 과정에서도 다른 영역의 성능은 그대로 유지할 수 있다.
마지막으로, task analogy 기법은 이미 존재하는 데이터를 활용해, 데이터가 부족한 도메인이나 하위 집단에서도 성능을 향상시킬 수 있음을 보였다.
💬 8. Takeaway
LoRA를 merge 하는 방법을 조사하며 공부하다가 여기까지 오게되었다. Huggingface 기술 자료에서 LoRA를 linear하게 merge하는 방법론이 해당 논문에서 출발했다고 써져 있길래 읽게 되었다. 해당 논문에서 말하는 것처럼 가중치의 변화량이 해당 task의 모든 변화량을 가지고 있기 때문에 이런 실험들이 가능한 것처럼 LoRA 자체도 특정 task의 가중치기 때문에 이것들의 결합만으로 새로운 모델을 만들 수 있지 않을까 생각해서 해당 논문에서 출발한 것 같다.