트랜스포머·PEFT 2일 과정8장 · PEFT와 LoRA 학습10 / 18← 이전목차다음 →MetaContents

8장. PEFT와 LoRA 학습

학습이 잘 안 될 때 점검표

자동차가 이상하면 정비사는 증상부터 듣고, 의심 가는 곳을 하나씩 열어 봅니다. "브레이크가 밀린다 → 패드가 닳았나 → 패드 두께를 잰다"처럼요. LoRA 학습도 이상하면 증상 → 의심할 원인 → 점검 방법 차례로 하나씩 지워 갑니다.

손실 곡선, 데이터, 템플릿, 메모리의 네 점검 장소를 나란히 놓은 비교 그림

그림의 네 칸은 문제가 생겼을 때 먼저 열어 볼 곳입니다. 손실 곡선은 학습이 되고 있는지, 데이터는 원문과 끝맺음이 바른지, 템플릿은 학습과 추론이 같은 양식인지, 메모리는 배치와 길이가 알맞은지를 봅니다.

증상별 점검표

증상의심할 원인점검 방법
학습 후에도 답이 거의 그대로학습률이 너무 낮음, epoch 부족, 추론 템플릿 불일치손실 곡선, chat() 이 apply_chat_template 을 쓰는지
답을 끝내지 못하고 계속 생성학습 데이터에 종료 토큰 없음, max_length 에서 잘림토큰화한 학습 예시 끝에 <|im_end|> 가 남는지
질문을 따라 하거나 이상한 기호 출력labels 마스킹 오류, 데이터에 이상한 기호가 섞임completion_mask, 학습 데이터 원문
학습 데이터 문장을 그대로 외워서 출력과적합검증 손실 추이, epoch·r 줄이기
원래 잘하던 일반 질문을 못함지나친 학습으로 기존 능력 손상9장처럼 일반 질문으로 확인
CUDA out of memory배치·max_length 가 큼배치 줄이고 gradient_accumulation_steps 늘리기, QLoRA, gradient checkpointing

표 안의 <|im_end|> 는 Qwen 의 대화 끝 표시 <|im_end|> 입니다(표 칸을 나누는 기호와 겹치지 않게 바꿔 적었습니다). gradient checkpointing 은 activation 을 모두 기억하지 않고 필요할 때 다시 계산해 메모리를 아끼는 방법입니다.

짧은 예시

Python
def diagnose(train, valid):
    # 마지막 두 epoch 의 변화로 손실 곡선의 모양을 가른다
    t_change = train[-1] - train[-2]
    v_change = valid[-1] - valid[-2]
    if any(x != x for x in train + valid):          # NaN 은 자기 자신과 같지 않다
        return "불안정: 학습률 낮추기, 정밀도 확인"
    if t_change < 0 and v_change > 0:
        return "과적합 신호: epoch 줄이기, 데이터 늘리기, dropout·r 조정"
    if abs(t_change) < 0.01 and abs(v_change) < 0.01:
        return "거의 안 배움: 학습률 올리기, 데이터·템플릿 점검"
    return "잘 배우는 중: epoch 를 늘려 볼 수 있음"

print(diagnose([3.09, 2.4227, 1.8684], [3.126545, 3.122271, 3.208835]))
# 결과: 과적합 신호: epoch 줄이기, 데이터 늘리기, dropout·r 조정
print(diagnose([3.10, 3.10, 3.10], [3.12, 3.12, 3.12]))
# 결과: 거의 안 배움: 학습률 올리기, 데이터·템플릿 점검

이 코드가 뜻하는 것

정비사의 점검 순서를 함수 하나로 적어 본 코드입니다. 증상(손실 곡선의 마지막 변화)을 듣고 의심할 곳과 조치를 돌려줍니다. 여기서 증상이 t_change, v_change, 정비 안내가 돌려주는 문장입니다.

줄하는 일쉽게 말하면
train[-1] - train[-2]마지막 두 epoch 의 차이최근에 나아졌나
x != xNaN 인지 확인계기판이 고장 났나
t_change < 0 and v_change > 0학습만 내려가고 검증은 올라감답만 외우는 중

첫 줄은 실습 3의 실제 손실을 넣은 것이고, 둘째 줄은 설명용으로 지어낸 평평한 곡선입니다. 실제 진단은 이 함수처럼 단순하지 않으므로, 손실과 답을 함께 보고 사람이 판단합니다.

주의할 점

  • 증상 하나에 원인이 여럿일 수 있습니다. 한 번에 설정 하나만 바꾸고 다시 학습해야 무엇이 효과였는지 압니다.
  • 학습 데이터 문장을 그대로 외워 말하는지는 손실만으로 알기 어렵습니다. 학습 데이터에 없는 질문으로 답을 직접 읽어 봅니다.
← 이전 절8장 · 손실 곡선 읽기다음 절 →8장 · 실습 지도