3줄 요약

  1. LoRA 훈련의 하이퍼파라미터는 각자 독립적으로 조절하는 다이얼이 아니라 서로 얽힌 계다. 남의 “레시피"를 복제하는 대신 각 다이얼이 무엇을 하는지 원리로 이해해야 자기 상황에 맞출 수 있다는 것이 3부작 전체의 주장이다.
  2. Rank는 정보 용량, Alpha는 강도 스케일, LR은 한 스텝당 학습의 크기다. Rank·Alpha는 대개 32/16 또는 32/32로 두고, LR은 모델마다 감도가 다르니 0.0001에서 시작해 cosine 스케줄러로 감쇠시키는 것이 안전한 기본선이다.
  3. 정규화 데이터셋은 base model이 훈련 대상 밖의 일반 클래스를 잊지 않게 한다. 훈련 중에는 6가지 프롬프트로 샘플링해서 언제 오버트레이닝이 시작되는지 눈으로 판별하는 절차를 함께 짜야 한다.

자료의 위치

원저자: /u/AwakenedEyes, r/StableDiffusion, 2026-04-26 게시. 3부작 LoRA 훈련 가이드의 마지막 편이다.

Part 1이 데이터셋을 짜고 Part 2가 캡션으로 신호를 정리했다면, Part 3은 그 신호를 어떤 강도·주기·순서로 모델에 흘려 넣을지를 결정하는 훈련 다이얼을 다룬다.

Caption dropout과 Token shuffling

먼저 자주 잘못 쓰이는 두 옵션이 정리된다.

  • Caption dropout은 일정 비율의 이미지 캡션을 무작위로 뺀 채 훈련한다. 원래는 조건 없는 생성에 반응하게 하려던 대규모 파인튜닝용 장치다. 15~30장짜리 캐릭터 LoRA에서는 dropout된 스텝마다 트리거 결합이 강화되지 않고 낭비된다. 캐릭터 LoRA는 0 또는 0에 가깝게 둔다.
  • Token shuffling은 캡션 안 단어 순서를 무작위로 섞는다. CLIP 기반 구형 모델(SD1.5·SDXL) 시대의 유산이다. T5 기반 최신 모델(Flux·Chroma 등)은 자연어를 순서 민감하게 이해한다. a woman wearing a red dressa red dress wearing a woman은 T5에게 완전히 다른 뜻이다. 현대 모델에서 토큰 셔플링은 좋아야 무용, 나쁘면 LoRA를 능동적으로 오염시킨다. 꺼야 한다.

Rank(Network Dim)와 Alpha

Rank는 개념을 표현할 독립 차원의 수다. 저자는 오케스트라의 악기 수로 비유한다. 악기가 많으면 독립적인 선율을 더 많이 낼 수 있지만, 필요 이상으로 많으면 잡음도 늘어난다.

기본 원칙은 다음과 같다.

  • 배울 것이 많으면 rank를 올린다.
  • 배울 것이 간단하면 rank를 낮춘다.

균형이 어긋나면 두 방향으로 실패한다. Rank가 너무 높으면 데이터셋의 부수 세부까지 학습해 뻣뻣해지고, 생성 시 bleed가 나타난다. Rank가 너무 낮으면 일정 스텝 이후 학습이 멈춘다. 저자가 제시한 실전 기준값은 이렇다.

상황권장 rank
얼굴만 학습하는 캐릭터 LoRA16
전신을 포함한 캐릭터 LoRA32 또는 64
새로운 개념을 가르치는 LoRA기본보다 높게
다중 개념 LoRA더 높게
애매하면 기본값32

Alpha는 rank와 짝을 이루는 강도 스케일 파라미터다.

  • Alpha = Rank (기본): 표준 세팅.
  • Alpha = Rank / 2 (반): LoRA가 더 유연해지지만 수렴에 더 많은 스텝이 필요하다.

AI-Toolkit YAML 예시는 이렇다.

network:
  type: lora
  linear: 32
  linear_alpha: 16

Repeats: 데이터셋 사이의 비율을 조정하는 다이얼

훈련은 각 이미지를 반복해서 노이즈·denoise 시킨다. 이 반복 횟수가 부족하면 LoRA는 그 이미지를 제대로 못 그리고(undertrained), 과하면 뻣뻣해지고 다른 것들을 잊는다(overtrained). Repeats는 데이터셋 간의 처리 빈도를 서로 다르게 두어 이 균형을 맞춘다.

저자는 두 가지 활용처를 든다.

(a) 다양성이 부족한 데이터셋의 각도 재조정. 정면 사진은 많은데 프로필 사진이 적으면 정면이 오버트레이닝, 프로필이 undertrained 된다. 프로필을 별도 데이터셋으로 묶고 repeats를 2배·3배로 잡으면 프로세싱 스텝의 총량이 재분배된다.

(b) 알려진 것과 미지의 것의 비율 조정. 검열 모델에 무검열 이미지처럼 사전 지식이 없는 개념을 가르치려면 훨씬 많은 노출이 필요하다. 미지 요소에 repeats를 5배 정도 얹어 언더트레이닝을 피한다.

Batch vs Gradient Accumulation

두 방식 모두 여러 이미지를 묶어 평균을 내지만 자원 소비가 다르다.

  • Batch는 이미지를 병렬 처리한다. VRAM과 GPU 파워가 훨씬 더 든다. 스텝 수는 줄일 수 있지만 스텝 하나가 그만큼 길다.
  • Gradient accumulation은 이미지를 직렬로 처리해 평균을 낸다. VRAM은 안 늘어나지만 각 스텝이 비례해서 길어진다.

소비자 GPU에서 VRAM이 병목이면 gradient accumulation 2~4가 실전 추천이다. VRAM 비용 없이 평균화 효과를 얻는다.

Learning Rate: 훈련의 #1 파라미터

저자는 여기서 목소리를 높인다.

LR은 LoRA 훈련의 #1 가장 중요한 파라미터다.

비유는 그림을 작은 사각형으로 나눠 옮기는 작업이다. 한 번에 옮기는 조각(청크)이 크면 학습이 빠르지만 세부가 뭉개진다. 조각이 작으면 세부를 잘 살릴 수 있지만 훨씬 많은 스텝이 필요하다.

모델마다 LR 감도가 다르다는 것이 특히 중요하다. Qwen-Image에서 0.0003이 잘 되는데, Chroma에서 같은 값을 쓰면 1000 스텝 안에 LoRA가 파괴된다. LR이 너무 높은 것이 LoRA 수렴 실패의 #1 원인이라고 저자는 단언한다.

규칙성. LR을 절반으로 낮추면 같은 결과에 도달하기 위해 스텝이 두 배 필요하다. 즉 LR 0.0001에서 3000 스텝이 걸리는 모델의 감도 높은 형제 모델에서는 LR 0.00005에 6000 스텝이 걸릴 수 있다.

시작점 권장은 LR 0.0001이다.

LR 스케줄러: 대리석 조각 비유

저자가 좋아하는 비유는 조각가의 정과 망치다.

대리석을 조각한다고 생각해 보자. 처음에는 큰 정과 큰 망치로 거친 덩어리를 빠르게 쳐 낸다. 하지만 목표에 가까워질수록 더 정교해져야 한다. 어느 지점부터는 작은 정으로 조심스럽게 다듬어야 작품을 망치지 않는다.

LR 스케줄러는 훈련이 진행되면서 LR을 점점 낮춘다. AI-Toolkit YAML에서 저자가 권한 세팅은 cosine이다.

train:
  lr_scheduler: "cosine"

Timestep 분포: 무엇을 배우는 노이즈 레벨을 골라내라

디퓨전 훈련에서 모델은 여러 노이즈 레벨(타임스텝)에서 denoise를 학습한다. 각 노이즈 레벨은 서로 다른 것을 가르친다.

  • 높은 타임스텝(무거운 노이즈): 전역 구조와 넓은 구도. “이건 얼굴인가 풍경인가?”
  • 중간 타임스텝: 시맨틱 정체성과 특징. “누구의 얼굴인가? 특정 비율은 무엇인가?”
  • 낮은 타임스텝(가벼운 노이즈): 세부와 텍스처. “가장자리는 얼마나 날카로운가? 피부 텍스처는 어떻게 생겼는가?”

기본은 모든 타임스텝을 균등하게 샘플링한다. 하지만 캐릭터 LoRA의 정체성은 중간 타임스텝에 산다. AI-Toolkit에서 캐릭터 LoRA에 권장되는 세팅은 sigmoid 타임스텝 분포다. 이는 중간에 확률을 집중시키고 양 끝을 부드럽게 감쇠시킨다. 스타일 LoRA는 높은 쪽, 텍스처 작업은 낮은 쪽으로 편향시킨다.

Optimizer

  • AdamW가 가장 널리 쓰인다. AdamW8bit는 VRAM을 아끼는 버전으로 품질 손실이 미미하다. 소비자 GPU의 실전 기본값이다. 저자는 LR 스케줄러와 함께 쓰면 AdamW로 훌륭한 결과를 낸다고 밝혔다.
  • Prodigy는 LR을 자동 관리하려는 옵티마이저다. 시작값 1.0은 placeholder이며 훈련 중 동적으로 조절된다. LR을 스스로 정하기 어렵거나 LR 감도가 예민한 모델에 유용하다.

저자는 여기서 진단 프레임을 짚어 준다.

대부분의 LoRA 실패는 옵티마이저 실패가 아니다. 데이터셋, 캡션, LR 실패다. 뭔가 잘 안 될 때 옵티마이저를 바꾸는 것은 대개 마지막에 시도할 것이지 처음이 아니다.

훈련 모니터링: 6가지 샘플 프롬프트

많은 사람이 훈련이 길어진다는 이유로 샘플링을 끄지만, 저자는 그것이 대체로 나쁜 판단이라고 본다. 샘플링은 훈련이 잘 돌고 있는지 눈으로 검증하는 유일한 방법이다.

권장 샘플 프롬프트는 여섯 가지 목적을 각각 담는다.

  1. 기본 프롬프트: 트리거 워드가 학습됐는지 확인.
  2. 다른 각도와 줌 레벨의 프롬프트: 모든 각도·줌이 학습되고 있는지 확인. 낯선 각도에서 얼굴이 드리프트하면 undertrained거나 그 각도의 repeats가 부족.
  3. 모델이 몰랐던 요소(검열된 부분 등)의 프롬프트: body horror가 보이면 undertrained.
  4. 데이터셋에 없던 변주(예: 파란 머리)의 프롬프트: 오히려 데이터셋 색으로 수렴하기 시작하면 오버피팅.
  5. 풀 바디 샷 프롬프트: 신체 비율 학습 확인.
  6. 와이드 샷 프롬프트: 원경 구도가 잊혔는지 확인.

원리는 하나다. 샘플이 갑자기 수렴을 멈추거나 발산하기 시작하면 즉시 훈련을 멈춘다. LR이 너무 높아 LoRA가 파괴되고 있을 확률이 크다.

언제 멈춰야 하는가

저자의 판정 기준은 이렇다. 정합성이 좋아 보이고 목표에 가까워졌으며, 다음 샘플 배치에서 개선이 보이지 않으면 그때가 멈출 때다. 대부분의 트레이너는 에포크마다 LoRA를 저장하므로, 그 지점을 지나 조금 더 돌려 본 뒤 저장된 체크포인트 중 유연성을 잃지 않으면서 가장 좋아 보이는 것을 택할 수 있다.

body horror가 나오는 부분과 완벽한 얼굴이 섞여 있다면, 데이터셋 비율이 어긋난 것이다. 어떤 이미지는 언더트레이닝, 어떤 이미지는 오버트레이닝이다.

전형적인 오버트레이닝 진행은 다음 순서로 나타난다.

  1. LoRA가 개선되기 시작한다.
  2. 정합성과 유연성의 균형에 도달한다.
  3. 지나치게 날카롭거나 “crispy"해 보이기 시작한다.
  4. 프롬프트 유연성이 사라지고 창의적 프롬프트에 저항한다.
  5. 결국 품질 자체가 떨어진다.

정규화 데이터셋

훈련의 부작용 하나는 base model이 자기가 이미 아는 것을 잊는 것이다. 여성 캐릭터 LoRA를 훈련하면 다른 여성들을 그리는 능력이 손상될 수 있다. 다중 개념 LoRA에서는 A도 B도 아닌 것을 여전히 알아야 한다는 요구가 추가된다.

정규화 데이터셋은 이를 위한 장치다. 대부분의 트레이너가 이 기능을 지원한다. 같은 일반 클래스(예: woman)에 속하지만 훈련 대상이 아닌 이미지를 별도 데이터셋에 담고, is_regularization 플래그를 켠다. 이 데이터셋은 base가 자기 사전 지식을 잊지 않도록 리마인더 역할을 한다.

기준은 이렇다. 훈련이 실제로 처리하는 이미지(repeats 포함) 2장당 정규화 이미지 1장 이상. 훈련된 LoRA가 다른 여성들을 눈에 띄게 오염시키면 정규화 노출을 늘리고, 캐릭터가 약하거나 불일관되게 나오면 줄인다.

댓글에서 건진 것들

Repeats 사용에 대한 반론

/u/Tosermepls가 Part 3에서도 반박했다. 다양성이 부족한 데이터셋에 repeats를 늘리면 재조정이 아니라 그 이미지에 대한 오버피팅만 심해진다는 주장이다. “훈련 길이를 늘리면 되지, 굳이 데이터셋을 재조정할 필요가 없다"고 덧붙였다.

저자의 재반론은 비율이 핵심이라는 것이다.

Repeats는 각 데이터셋의 비율을 조정하는 도구다. 훈련 길이만 늘리면 이미지들의 비율은 그대로다. 30장 정면·20장 비정면 데이터셋의 예를 들면, 정면 데이터셋 repeats=1과 비정면 repeats=2로 두면 같은 총 스텝 안에서 두 데이터셋이 유사한 총 처리 시간을 받는다. 이는 정면 각도의 오버피팅을 상쇄한다.

두 사람의 시각차는 결국 “데이터셋이 심하게 불균형할 때 부족한 쪽의 repeats를 늘리는 것이 근본 해결은 아니지만 유용한 완화 기법인가"에 대한 판단 차이다. 저자는 완화 기법으로 유효하다는 쪽에, Tosermepls는 부족한 이미지 몇 장에 대한 오버피팅만 만든다는 쪽에 섰다.

Alpha=1 관행과 낮은 rank

/u/Lucaspittol이 흥미로운 실전 관찰을 남겼다. Alpha 값은 항상 1로 두면 되고, Chroma에서는 rank 4로도 웬만한 캐릭터가 잘 학습된다는 것이다. 저자의 답은 절충적이다. 얼굴만 배우는 단순 캐릭터라면 rank 4로도 성공한 적 있지만, 전신 LoRA·다중 개념 LoRA에서는 rank 16~32로 올려야 품질이 눈에 띄게 좋아졌다는 실측을 공유했다. /u/beragis가 이를 지지하는 자기 경험을 덧붙였다. Chroma에서 단순 캐릭터는 rank 8~16으로 충분했지만, 얼굴·몸 문신이 많은 캐릭터는 rank 32~64가 필요했다.

낮은 LR이 오히려 좋았다는 후기

/u/autonomousdev_가 자기 실전 후기를 남겼다. 대부분의 가이드가 LR을 더 높이라고 말하는데, 통상적인 1e-4 대신 1e-5로 낮췄더니 캐릭터 세부가 훨씬 잘 잡혔다는 것이다. 12번의 실패 훈련 뒤에 발견한 결론이었고, 예상 밖으로 batch size 2도 크게 도움 됐다고 덧붙였다. 저자의 응답은 짧게 cosine LR 스케줄러를 시도해 보라는 권유였다.

정규화가 처음 이해된다는 반응

/u/AIWaifLover2000은 이 가이드에서 정규화 이미지의 개념이 처음 이해가 됐다고 감사 인사를 남겼다. base 모델이 잊게 되는 방향과, 정규화가 리마인더로 작동하는 방향을 한 번에 설명한 대목이 효과적이었던 듯하다.

캐릭터 LoRA가 원본 프롬프트에서만 잘 나오는 사례

/u/kvnstnkr이 실전 문제를 상세히 물었다. SDXL과 Flux 2 Klein으로 같은 52장 데이터셋을 훈련했는데, 데이터셋 프롬프트와 비슷한 프롬프트로 생성하면 얼굴이 유사하게 나오지만, 새로운 옷·상황을 요청하면 정합성이 떨어진다는 증상이었다. 저자의 진단이 밀도 있다.

데이터셋과 비슷한 프롬프트에는 잘 나오는데 새로운 상황에 안 나오는 것은 오버트레이닝의 신호다. 모델이 너무 많이 배워서 새로운 것을 추론하기 어렵다.

그 뒤에 이어진 처방은 실전 체크리스트다. Flux 2 Klein은 자연어 이해가 강하고 태그로 캡션하면 능력의 절반만 쓰는 셈이니 캡션 전면 재작성. 하이퍼파라미터는 LR 0.00008에서 시작, cosine 스케줄러, sigmoid 타임스텝. 500 스텝마다 의미 있는 프롬프트로 샘플링. 2000 스텝 안에 방향이 보이고 4000 스텝 전에 멈출 수 있다.

“AI가 썼다"는 재차의 시비

Part 3 댓글에도 같은 시비가 반복된다. /u/shrimpdiddle은 “지식만 있고 증거가 없으면 무의미. AI 게시글은 신뢰를 못 얻는다"고 던졌고, 이후 /u/hurrdurrimanaccount가 “OP의 글은 완전히 AI가 쓴 것"이라고 프랑스어 사용자라는 근거로 우겼다. /u/Additional_Drive1915, /u/Spara-Extreme, /u/Sarashana가 각자 반박을 얹었다. 저자의 대응이 결국 이 정도로 마무리된다.

Hater’s gonna hate. AI 생성 포럼에서 AI 얘기하는 아이러니. Peut-être qu’il préfère que je lui écrive en français alors???

/u/Sarashana의 절충이 마지막에 놓인다.

AI-assisted 작성과 AI-generated 작성은 다르다. 만약 그가 외국어라 서식을 다듬는 데 AI를 썼다면 그건 정당하다. 그리고 만약 이 글이 완전 AI 생성이었다면, 사실을 이렇게 정확히 잡은 AI라니 훌륭한 일을 한 셈이다.

가장 눈여겨본 것은

Part 3에서 가장 인상 깊은 대목은 타임스텝 분포에 대한 처방이다. 캐릭터 정체성은 중간 타임스텝에 산다는 것, 그래서 sigmoid 분포로 그 구간에 훈련 확률을 몰아 준다는 설계는, 디퓨전 훈련을 어떤 노이즈 레벨에서 무엇을 배울지 예산을 어떻게 나눌 것인가의 문제로 다시 보게 한다. 스타일 LoRA는 높은 쪽에, 텍스처는 낮은 쪽에라는 대응까지 이어지면 이 관점의 일반성이 드러난다.

또 하나는 저자가 옵티마이저를 “마지막에 만질 것"으로 규정한 판단이다. 대부분의 실패가 데이터셋·캡션·LR에서 나오는데도 많은 사람이 옵티마이저부터 바꾼다는 관찰은, LoRA 훈련이라는 어긋난 계에서 사람들이 자주 가장 눈에 띄는 다이얼부터 만지는 경향을 짚어 준다. 실은 그 다이얼이 문제의 근원인 경우가 드물다는 것.

그리고 3부작을 관통하는 저자의 방법론이 마지막에 다시 정리된다. 특정 모델·특정 예제의 레시피는 이 가이드에 없다. 대신 각 다이얼이 무엇을 하고 왜 그렇게 반응하는지의 원리만 있다. 어느 커뮤니티가 이런 형태의 컨텐츠를 축적하려면 시간이 걸린다. 저자가 2년치 관찰 뒤에 굳이 재작성해 다시 올린 이유가 이 순간 조금 더 이해된다.

출처