예전에는 훈련때 나오는 샘플을 믿을 수 없다고 생각해서 아무 의미를 두지 않았고,

누가 학습하는거 좀 가르쳐 달라고 할때도 필요없다고 설명하곤했었어요.


하지만 뒤늦게서야 샘플링의 중요성을 알게되어서 몇달 전부터는 적극적으로 쓰고 있습니다.

흔히들 텐서보드 자료를 통해 loss를 보면서 이걸 판단하는 분들이 많은걸로 알고 있습니다.


하지만 학습을 많이 해보시다보면 이게 별 의미없다는걸 알게되실거에요.

결국 LR이 높으면 loss는 많이 잡힐수 밖에 없고, lr이 낮으면 피팅 여부와 상관없이 loss는 낮습니다.

그래프 반등으로 overfit 판단하는것도 신통치 않아요. 

데이터셋에 따라 일시적인 반등은 꽤 자주나오거든요. 

그렇다고 그래프를 길게 보면 학습때 바로바로 대응할수가 없죠.


제가 쓰는 방법은 매우 간단합니다.

샘플링을 할때 2개의 프롬프트를 넣어줍니다.

하나는 학습 샘플에 사용되는 프롬프트 그대로,

나머지 하나는 트리거 워드정도와 함께 portrait of a girl, photo of a man, 훈련방법에 따라 photo of 토큰 클래스, 이런식으로 말이죠.


에포크가 진행되면서 나오는 샘플중에 학습에 사용된 프롬프트로 나온 샘플이 원본이미지와 닮지 않았다?

underfitting.

아주 간단하게 적은 프롬프트의 경우에는 거의 비슷한 구도의 그림이 반복되기 시작한다.

overfitting.


심플하게 이거 두개만 보시면 두개의 케이스에 대해 판단이 쉬워져요.

적어도 텐서보드보다는 직관적이고, 꽤 판단하기 쉽습니다.


다시 말하자면 학습데이터에 있는 프롬으로 어느정도 원본과 닮게 나오는 지점 ~ 심플한 프롬으로 비슷한 그림이 반복되기 시작

이 사이 구간이 우리가 학습에서 가장 좋은 결과를 얻을 수 있는 구간입니다.


더불어 원트레이너 사용해보세요.

kohya가 좋은 프로그램이지만, 원트레이너는 편의성과 vram 절약 이거 두개에서는 넘사벽으로 뛰어납니다.


!!!!!!!!!!!중요 추가!!!!!!!!!!!!!

진짜 미안해. 내가 글 대충쓰다가 멍청하게도 제일 중요한거 빼먹었어 ㅠㅠ

심플한 프롬프트 세팅할때 CFG=1로 해야해. 

과적합이 올때 샘플의 유사성이 CFG 1에서 가장 심하게 나타나기 때문임.

구체적인 프롬프트는 평소 많이 쓰는 CFG로 하면 됨.