개발 창고/AI

LoRA에서 `target_modules`란 무엇인가요?

Royzero 2025. 6. 17. 22:00
반응형

LoRA에서 target_modules란 무엇인가요?

LoRA를 사용할 때 핵심 설정 중 하나가 target_modules입니다.
이는 어떤 레이어에만 LoRA를 적용할지를 지정하는 항목으로, 모델 내부의 Linear Layer 중 일부에만 저차원 행렬을 삽입해 학습하도록 설정합니다.


Transformer 구조에서의 주요 Linear Layer

Transformer 기반 모델에는 다음과 같은 주요 Linear Layer가 존재합니다.

용어 설명
q (Query) 입력 토큰으로부터 "무엇을 찾을지"를 계산하는 벡터
k (Key) 입력 토큰의 "특징(열쇠)"을 나타내는 벡터
v (Value) 입력 토큰의 실제 정보 내용
o (Output) Self-Attention 결과를 통합하여 출력값으로 변환
up (MLP Up Projection) FFN에서 차원을 확장하는 Linear Layer
down (MLP Down Projection) 확장된 차원을 다시 줄이는 Linear Layer
gate (Gated FFN) 일부 모델에서 사용하는 gating 메커니즘 레이어

이 레이어들은 왜 중요할까요?

Transformer는 입력 문장을 이해할 때, 각 토큰이 서로 어떤 관계에 있는지 계산합니다.
이때 가장 핵심적인 계산이 바로 Self-Attention이며, 그 과정에서 q, k, v, o 레이어가 사용됩니다.

또한 Transformer의 Feed Forward Network (FFN) 구조에서는 up, down, gate가 주요 역할을 합니다. 이들은 모델이 더 깊은 표현을 만들 수 있도록 도와줍니다.


어떤 모듈을 선택하면 좋을까요?

LoRA는 모델의 성능을 유지하면서도 파라미터 수를 줄이기 위해, 다음과 같은 방식으로 target_modules를 설정합니다.

target_modules = ["q_proj", "v_proj"]

하지만 상황에 따라 다음처럼 확장할 수 있습니다:

target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "up_proj", "down_proj", "gate_proj"]

의미 요약:

target_module 의미 LoRA 적용 시 효과
q_proj Query 생성 Attention 입력 조정
k_proj Key 생성 문맥 키 조정
v_proj Value 생성 정보 유입 조절
o_proj Output 계산 Attention 출력 방향 조정
up_proj FFN 차원 확장 표현력 향상
down_proj FFN 차원 축소 요약된 정보 표현
gate_proj Gated FFN 활성화 정보 흐름 제어

실제 적용 코드 예시

lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=8,
    lora_alpha=32,
    lora_dropout=0.1,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "up_proj", "down_proj", "gate_proj"]
)

이렇게 설정하면 모델의 핵심 레이어에만 저차원 행렬이 삽입되어, 학습 속도와 메모리 사용량은 줄이면서도 성능은 유지할 수 있습니다.


마무리하며

모든 레이어에 LoRA를 적용할 필요는 없습니다. 일반적으로는 q_projv_proj 만으로도 충분한 성능 향상을 볼 수 있으며,
보다 세밀한 튜닝이 필요한 경우 k, o, up, down, gate 등도 함께 고려해볼 수 있습니다.

모델 구조에 따라 적용 가능한 레이어 이름이 다르므로, 실제 모델 소스코드를 살펴보고 정확한 레이어 명칭을 사용하는 것이 중요합니다.

반응형