[CIT/Continual Instruction Tuning] Task-Incremental Tuning① (PAPT, Continual-T0, ConTinTin, SLM)
- 참고 논문 : Continual Learning for Large Language Models: A survey [paper]
Task-Incremental Tuning
1. Task-incremental CIT란?
: task-incremental CIT는 task-specific한 지시(instruction)을 이어서 파인튜닝하여 새로운 task에 대한 능력을 획득하는 것을 목표로 함.
- 하지만, LLM을 연속적으로 파인튜닝하는것은 이전 task에서 배운 지식과 문제해결능력을 망각하는 catastrophic forgetting을 야기할수있음. [Kotha et al.,,2023] Understanding Catastrophic Forgetting in Language Models via Implicit Inference [paper]
2. Task-incremental 다양한 방법론
📙 TAPT (Task-Adaptive Pre-Training)
(논문: Don’t Stop Pretraining: Adapt Language Models to Domains and Tasks)
: 모든 도메인 데이터가 아닌, 작업과 관련성 높은 데이터만 사용하여, 학습비용을 감소하면서 성능 유지
✔️ 데이터 선택 과정
- 특정 작업(task)의 분포와 유사한 unlabeled 텍스트를 in-domain corpus에서 찾음
- 예: 만약 의료 진단 분류 작업을 수행하려 한다면, 의료 corpus에서 진단과 관련된 텍스트를 우선적으로 선택
- -> 단순히 도메인 특화 데이터를 모두 사용하는 것보다 더 스마트한 접근법
✔️"Aligning with task distribution"
- 단순히 같은 도메인의 데이터를 사용하는 것이 아님
- 실제 수행하려는 특정 작업(task)의 특성과 잘 맞는 데이터를 선별
- 예: 증상-진단 관계를 학습하려 한다면, 단순한 의학 텍스트보다는 증상 설명과 진단이 함께 있는 텍스트를 우선 선택
Q1. 데이터가 많으면 좋은거 아닌가?
데이터 양이 중요한 이유?
- 다양성 확보: 더 많은 데이터는 더 다양한 패턴과 지식을 학습할 기회 제공
- 일반화 능력: 대량의 데이터는 모델이 더 강건한 일반화 능력을 갖게 함
- 희소 사례 학습: 많은 데이터에서는 드문 케이스도 충분히 포함될 수 있음
→ 그러나 selective approach가 필요한 이유
- 계산 효율성: 모든 데이터로 학습하는 것은 엄청난 컴퓨팅 자원 필요
- 노이즈 문제: 관련성 낮은 데이터는 오히려 학습을 방해할 수 있음
- 목적 지향성: 특정 task에 대해서는 관련 데이터에 집중하는 것이 더 효과적일 수 있음
→ 이상적인 접근
- 사전학습(Pre-training): 가능한 많은 데이터 사용
- 특정 작업 학습(Task-specific): 더 선별적인 데이터 사용
결론적으로, "많을수록 좋다"는 원칙은 기본적으로 맞지만, 실제 적용에서는 리소스 제약과 효율성을 고려한 균형이 필요
📙 Continual-T0
(논문: Fine-tuned Language Models are Continual Learners)
: 이전에 배운 것을 잊지 않기 위해 주기적으로 복습하는 것과 같은 원리로 학습
→ 구체적인 작동 방식
- Memory Buffer(메모리 버퍼)
- 이전 작업들의 데이터를 저장하는 공간
- 마치 공부할 때 중요한 내용을 정리해둔 노트와 같은 역할
- Replay(재생)
- 새로운 작업을 학습할 때 버퍼에 저장된 이전 작업 데이터도 함께 학습
- 예: A를 배운 후 B를 배울 때, B만 학습하는 게 아니라 A의 일부도 함께 학습
→ 목표
- Catastrophic forgetting(재앙적 망각) 방지
- 이전에 학습한 능력의 유지
- 새로운 지식과 기존 지식의 조화로운 통합
(공연자가 이전에 연습한 부분을 잊지 않기 위해 계속 리허설을 하는 것처럼, 모델도 이전 학습 내용을 주기적으로 '복습'한다는 의미를 강조하기 위해 rehersal이란 용어 사용)
Q. 'replay'와 'rehersal'의 차이?
1) Replay
- 더 기계적이고 직접적인 데이터 재사용을 의미
- "Experience Replay"처럼 경험/데이터를 그대로 다시 사용
- 강화학습에서 주로 사용되던 용어가 continual learning으로 넘어온 느낌
- 저장된 데이터를 그대로 다시 학습에 활용
2) Rehearsal
- 더 선택적이고 학습 지향적인 의미를 내포
- 때로는 원본 데이터가 아닌 대표 샘플이나 수정된 버전을 사용할 수 있음
- "pseudo-rehearsal", "synthetic rehearsal" 같은 변형된 방식도 포함
- 학습 과정에서의 반복적 연습의 의미가 더 강함
하지만 실제 논문들에서는 대부분 이 두 용어를 명확히 구분하지 않고 사용하며, 같은 기술을 다른 논문에서 다른 용어로 부르기도 함(분야나 저자에 따라 선호하는 용어가 다를 수 있음)
📙 ConTinTin
(논문 : Continual learning from task instructions )
: 지시문(instruction)들의 관계와 패턴을 적극적으로 활용하는 학습 방법으로, 부정적 예시를 학습에 활용하고 이전 지시문들을 전략적으로 재방문함으로써 새로운 작업과 이전 작업 모두에서의 성능 향상(forward/backward transfer) 이룸.
- 단순히 데이터를 재사용하는 것이 아닌, 지시사항(instruction) 자체에 초점
- 긍정적 예제뿐만 아니라 부정적 예제도 적극 활용
- 작업들 간의 관계를 명시적으로 학습하려 시도
*Forward-transfer과 Backward-transfer
🗸 Forward-transfer : 이전에 배운 것이 새로운 작업을 학습하는 데 도움이 되는 것
- 예: 영어-한국어 번역을 배운 후 영어-일본어 번역을 더 쉽게 배우는 현상
🗸 Backward-transfer : 새로운 것을 배우면서 이전 작업의 성능도 향상되는 것
- 예: 일본어를 배우면서 한국어 실력도 같이 향상되는 현상
InstructionSpeak 2가지 전략
✔️Negative outputs 활용
- 잘못된 응답이나 실패 사례도 학습 데이터로 활용
- "이렇게 하면 안 된다"는 것을 명시적으로 학습
- 이를 통해 모델이 작업의 경계와 제약을 더 명확히 이해
# 학습 샘플 예시
{ "instruction": "이 환자의 증상을 바탕으로 가능한 진단을 제시하세요",
"input": "38도의 고열, 인후통, 기침이 3일째 지속되고 있습니다.",
"negative_output": "이것은 명백한 폐암의 초기 증상입니다. 즉시 항암치료를 시작해야 합니다.",
"feedback": "이는 부적절한 진단입니다. 1) 충분한 검사 없이 심각한 진단을 내렸고 2) 제한된 증상만으로 확정적 진단을 내렸으며 3) 불필요한 공포를 유발할 수 있는 표현을 사용했습니다.",
"correct_output": "현재 증상으로는 상기도 감염이 의심됩니다. 하지만 정확한 진단을 위해서는 추가적인 검사와 진찰이 필요합니다. 현재 나타난 증상들은 여러 질환의 초기 증상일 수 있으므로, 의료진의 직접적인 진찰을 권장드립니다." }
✔️ revisiting previous task instructions
- 새로운 작업을 학습할 때 이전 작업의 지시사항을 함께 검토
- 작업들 간의 관계와 공통점을 파악하는 데 도움
- 이를 통해 작업 간 지식 전이를 촉진
// Task 1 (이전에 학습한 태스크){"instruction":"다음 영어 문장을 한국어로 번역하세요.",
"input":"The weather is nice today.","output":"오늘 날씨가 좋네요."}
// Task 2 (새로운 태스크){"instruction":"다음 영어 문장을 일본어로 번역하고, 번역 과정을 설명하세요.",
"input":"The weather is nice today.",
revisited_instructions":[{"related_instruction":"다음 영어 문장을 한국어로 번역하세요.","
explanation":"이 태스크도 영어 원문의 의미를 다른 언어로 전달하는 것이 핵심입니다. Task 1에서 학습한 영어-한국어 번역의 패턴을 활용할 수 있습니다."}],
"output":{"translation":"今日は天気がいいですね。","explanation":"영어 'The weather'는 '天気'로, 'is nice'는 'いい'로 번역되며..."}}
Q. 데이터셋 구축에 너무 많은 공수가 들지 않을까?
이상적인 학습 데이터를 만들기 위해 필요한 작업을 생각해보면,
- 각 태스크에 대한 negative output 생성
- 각 negative output에 대한 전문적인 피드백 작성
- 태스크 간 관계 분석 및 설명 작성
- 이전 instruction들과의 연관성 분석
이를 위해서는, 도메인 전문가의 참여가 필요하며, 상당한 시간과 비용이 들고, 대규모 데이터셋을 구축하는것은 불가능.
이를 위해서 가능한 현실적 대안들
- 자동화된 데이터 생성
- 다른 LLM을 활용해 초기 데이터 생성
- 하지만 품질 보장이 어려움
- 부분적 적용
- 중요한 태스크나 도메인에 대해서만 수동 데이터 구축
- 나머지는 일반적인 방식으로 학습
- 사용자 피드백 활용
- 실제 사용 과정에서 발생하는 오류와 피드백을 점진적으로 수집
- 하지만 수집에 시간이 오래 걸림
📙 SLM(Scalable Language Model)
(논문: Anonymous. Scalable language model with generalized continual learning )
✔️ 기존 방법들의 한계:
- Replay-based: 이전 데이터를 그대로 재학습하는 방식으로, 메모리 사용량이 크고 확장성(scalability)이 떨어짐
- Regularization-based: 이전 학습된 파라미터를 보존하는 방식으로, 새로운 지식 습득에 제한적이고 유연성이 부족
✔️ SLM 방법론?
- 벡터 공간 검색(vector space retrieval)을 언어 모델에 통합
- 즉, 학습된 지식을 벡터 공간에 저장하고 효율적으로 검색/활용
- 전체 모델을 복제하지 않고도 각 태스크에 최적화된 상태로 모델을 빠르게 전환 가능
✔️ 작동 방식 (새로운 태스크 학습 시)
- 입력을 벡터 공간에 매핑
- 관련된 이전 지식을 검색후, 검색된 지식을 활용해 새로운 태스크 수행
1. 지식 저장 방식 (각 task마다 key, value를 저장)
- key: 이 task가 어떤 종류의 문제인지 알려주는 특징 벡터
- value: 이 task를 잘 풀기 위해 모델을 어떻게 조정해야 하는지에 대한 정보*value는 실제로 무엇인가? -> weight increment(Δθ)
θ' = θ + Δθp ==> 여기서 θ는 원본 모델 파라미터, Δθp는 검색된 가중치 증분들의 가중 평균
즉, 원본 모델 가중치(W₀)에 더해질 작은 크기의 행렬을 의미함.
2. 새로운 문제를 풀 때
질문: "이 영화는 재미있나요?"라는 질문이 들어왔다고 가정하면
1) 특징 추출: "이 질문은 영화 리뷰 관련 질문이구나"라고 파악
2) 유사한 task 검색: 과거에 비슷한 유형의 task들을 찾음
3) 파라미터 조정: 찾은 task들의 value를 참고해서 모델 조정
(저장된 가중치 증분(Δθ)을 사용해 기본 모델 가중치를 미세 조정)
🧭 실생활 비유로 들면, 마치 선생님이 학생의 질문을 듣고 "아, 이건 수학 문제구나" 하고 파악한 뒤 (특징 추출),
수학 문제 풀 때의 마인드셋으로 전환하는 것(파라미터 조정)과 비슷함!
그 결과, 각 task에 맞게 모델을 최적화할 수 있고 이전에 배운 지식도 잊지 않으면서 새로운 task도 잘 수행하게됨.