Files
fumen-measure-analyze/spec.md
2026-04-24 15:42:54 +09:00

2.8 KiB

학습

CLI

  • cli로 학습할 수 있는 쉘 스크립트를 작성한다.
  • argument
    • script_dir
    • working_dir
    • data_dir
    • train_data_count = 100
    • validate_data_count = 20
    • margin = 0.5
    • validate_iterations = 5

학습 모델

  • 추천: PyTorch 기반의 Deep MLP (Dropout 및 Weight Decay 필수 적용)
  • 과적합 방지 전략:
    • Dropout (0.3 ~ 0.5): 학습 시 뉴런을 의도적으로 꺼서 특정 데이터 암기를 방지한다.
    • L2 Regularization (Weight Decay): 가중치가 비정상적으로 커지는 것을 막는다.
    • Output Mapping: 최종 출력에 Sigmoid를 걸고 (y * 11) + 1을 적용해 [1, 12] 범위를 강제한다.

학습 과정

  1. {data_dir}/tja의 tja를 파싱한다. ({script_dir}/parse.ts)
  2. oniedit course를 factorize하여 {working_dir}/factors.json에 저장한다.
    • 이미 존재하면 생략하되, Factor 로직 수정 시 삭제 후 재실행한다.
  3. 데이터 표준화(Standardization)를 위한 스케일링 파라미터를 계산하고 {working_dir}/scaler.json에 저장한다.
  4. 학습 단계: 전체 데이터 중 train_data_count만큼 데이터를 랜덤하게 추출하여 학습을 진행한다.
    • edit 코스는 ura와 매칭하여 오차를 계산한다.
    • 모델이 충분히 수렴할 때까지 학습을 수행하며, 기존 모델 존재 시 가중치를 로드하여 업데이트한다.
  5. 검증 단계: 학습이 완료된 모델을 대상으로 아래 과정을 수행한다.
    • validate_data_count만큼의 데이터를 랜덤하게 추출하여 오차를 계산하고 validate_result_{n}.csv에 저장한다.
    • 이 과정을 validate_iterations 횟수만큼 반복한다.
    • 재시도 조건: 검증 루프 도중 단 한 번이라도 Mean Absolute Error(MAE)가 margin보다 크다면, 즉시 검증을 중단하고 4번(학습 단계)으로 돌아가 데이터를 새로 샘플링하여 재학습한다.
  6. 성공 및 종료: 모든 validate_iterations 회차에서 MAE가 margin 이하일 경우에만 학습 성공으로 간주하고 최종 모델 파일을 저장한다.

유의 사항

  • 모든 데이터는 working_dir에 저장한다.
  • Apple Silicon 환경에서 mps 디바이스를 할당하여 GPU 가속을 사용한다.

예측

CLI

  • argument: working_dir, tja, difficulty (oni | edit)

예측 과정

  • 로드된 모델과 학습 시 사용했던 스케일링 파라미터(Mean, Std)를 동일하게 적용하여 예측을 진행한다.

Factor

종류

  • average_density: 평균 밀도
  • peak_density: 최고 초당 밀도
  • max_combo: 노트의 수

Scripts

  • parse.ts: TJA 문자열을 Course 객체로 변환.
  • factorize.ts: Course를 입력받아 확장된 Factor 세트를 반환.