| 옵션명 | 설명 | 예시 |
|---|---|---|
num_train_epochs | 전체 학습 에폭 수 (과소적합, 과적합 회피) | 3 |
per_device_train_batch_size | 학습 시 디바이스(GPU) 당 배치 크기 (클수록 더 한꺼번에 처리) | 8 |
per_device_eval_batch_size | 평가 시 배치 크기 (evaluation_strategy 에 따라 달라짐) | 8 |
learning_rate | 학습률 (가중치 크기 업데이트 잣대.) | 5e-5 |
weight_decay | 가중치 감쇠 (가중치가 커지지 않게 패널티 부여, 과적합 방지) | 0.01 |
save_steps | 체크포인트 저장 빈도 (스텝 단위, 체크포인트마다 폴더 생김) | 500 |
save_total_limit | 저장할 체크포인트 최대 개수 (저장 후 삭제하는 방식) | 3 |
evaluation_strategy | 평가 주기 설정 ("no", "steps", "epoch") | "steps" |
eval_steps | 평가 실행 빈도 (스텝 단위, evaluation_strategy=steps일 때) | 500 |
load_best_model_at_end | 학습 종료 시 가장 성능 좋은 모델 로드 여부 | True |
metric_for_best_model | 가장 좋은 모델 판단 기준 메트릭명 (클수록 좋음 : accuracy, f1, rouge, 작을수록 좋음 : loss, eval_loss, perplexity) | "accuracy" |
greater_is_better | 메트릭이 클수록 좋은지 여부 (메트릭명에 따라 결정) | True |
fp16 | 16-bit 혼합 정밀도 사용 여부 (기본은 32bit 인데 단순하게 16비트로 할 것이냐..., 정밀도는 낮아짐.) | True |
gradient_accumulation_steps | 그라디언트 누적 스텝 수 (가중치를 변경하는 또다른 잣대... 배치를 몇번 돌리고 가중치 계산 할거냐?) | 4 |
seed | 랜덤 시드 (학습 데이터 shuffle 순서 고정) | 42 |
report_to | 로그 기록 및 모니터링 서비스 지정 (tensorboard) | "tensorboard" |
disable_tqdm | tqdm 진행바 비활성화 | False |
가중치 W의 값은 그냥 값이 아닌 행렬로 이루어져 있음.
입력값에 곱해져서 출력값 계산하는데 [[1,2,3,4], [5,6,7,8]] 이런식의 큰 행렬임.
근데 이 W는 크기가 크기 때문에 전체를 학습시키는 것 보다
근사(Approximation) 하는 방식이 필요함. 그걸 lora 에서는 W' = W + A x B 로 표현
원래의 고정된 가중치 W 에 학습 가능한 작은 보정값(Delta W) 을 더하는 것과 같은 의미.
여기서 A 와 B 의 크기를 결정하는 것이 r 값임.
A : 원래출력차원 x r
B : r x 원래입력차원
A와 B의 크기가 작으면 저장해야 할 파라미터 수가 줄어들고, 연산량도 줄어들어 빠르게 학습할 수 있음.
행렬 A, B는 학습이 시작되기 전에 랜덤 초기화 됨.
예를 들어, A와 B 모두 작은 난수 값들로 채워져 있음. (예: 정규분포, 균등분포 등)
모델이 입력 데이터를 받아서 출력과 정답(레이블) 사이의 오차(손실)를 계산한다.
그 손실을 줄이기 위해 역전파(Backpropagation) 가 진행.
이 과정에서 A와 B의 값들이 서서히 조정(업데이트) 됨.
원재료는 그대로 두고 조미료(B, A)를 치는거와 비슷함.
alpha 값은 행렬곱에 a/r 를 곱하는 용도로 쓰임.
너무 작으면 효과가 미미하고 너무 크면 가중치값이 너무 커지므로 결과가 이상해짐.
α는 얼마나 강하게 조미료를 칠지 정하는 값