학습 파이프라인 추가 안내

이 섹션에서는 학습 파이프라인을 자세히 설명합니다.

입력 파이프라인 최적화

요약: 입력 종속 파이프라인의 원인과 개입은 작업에 따라 크게 달라집니다. 프로파일러를 사용하여 일반적인 문제를 찾아보세요.

다음과 같은 적절한 프로파일러를 사용하여 입력 바운드 파이프라인을 진단합니다.

궁극적으로 구체적인 원인과 개입은 작업에 따라 크게 달라집니다. 더 광범위한 엔지니어링 고려사항 (예: 디스크 공간 최소화)은 입력 파이프라인 성능을 저해할 수 있습니다.

다음은 입력에 종속된 파이프라인의 일반적인 원인입니다.

  • 데이터가 학습 프로세스와 함께 배치되지 않아 I/O 지연 시간이 발생합니다. 예를 들어 네트워크를 통해 학습 데이터를 읽으면 I/O 지연 시간이 발생할 수 있습니다.
  • 비싼 온라인 데이터 전처리 오프라인에서 한 번 전처리하고 결과를 저장하는 것이 좋습니다.
  • 데이터 파이프라인 프리페치를 방해하는 의도치 않은 동기화 장벽 예를 들어 CommonLoopUtils에서 기기와 호스트 간에 측정항목을 동기화하는 경우입니다.

입력에 종속된 파이프라인에는 다음 개입이 권장됩니다.

모델 성능 평가

요약: 학습보다 큰 배치 크기로 평가를 실행합니다. 정기적인 시간 간격이 아닌 정기적인 단계 간격으로 평가를 실행합니다.

평가 설정

다음 설정을 사용하여 모델의 성능을 평가할 수 있습니다.

  • 온라인 평가: 모델이 프로덕션 환경에서 예측을 제공할 때 측정항목을 수집합니다. 온라인 평가는 모델이 사용되는 방식과 일치하므로 일반적으로 모델 품질을 가장 현실적으로 평가할 수 있습니다.
  • 오프라인 평가: 프로덕션 환경을 나타내는 오프라인 학습, 검증 또는 테스트 세트에서 모델을 실행할 때 측정항목을 수집합니다. 문제에 따라 오프라인 평가가 상당히 복잡하고 계산 비용이 많이 들 수 있습니다.
  • 정기 평가: 모델 학습 중에 오프라인 평가의 프록시가 될 수 있는 측정항목 또는 오프라인 평가에 사용된 데이터의 하위 집합에 관한 측정항목을 수집합니다. 정기 평가는 가장 실용적이고 경제적인 선택이지만 프로덕션 환경을 완전히 나타내지는 않을 수 있습니다. 학습 중에 수신된 신호의 신뢰성을 저하시키지 않으면서 오프라인 평가의 편리한 프록시를 사용해야 합니다.

주기적 평가 설정

다음과 같은 이유로 학습 중에 주기적으로 평가를 실행하는 것이 좋습니다.

가장 간단한 구성은 동일한 컴퓨팅 인스턴스 내에서 학습과 주기적 평가를 모두 실행하여 학습과 평가를 주기적으로 번갈아 수행하는 것입니다. 이 경우 평가를 실행하는 데 사용되는 배치 크기는 학습에 사용되는 배치 크기 이상이어야 합니다. 평가 중에 모델 활성화를 유지할 필요가 없기 때문에 예시당 계산 요구사항이 낮아집니다.

시간 간격이 아닌 정기적인 단계 간격으로 주기적인 평가를 실행합니다. 시간 간격을 기반으로 평가하면 학습 곡선을 해석하기가 더 어려워질 수 있습니다. 특히 학습 작업의 선점, 네트워크 지연 시간 문제 등으로 인해 학습에 문제가 있을 수 있는 경우에 그렇습니다.

셔플된 학습 세트, 검증 세트, 테스트 세트 분할을 사용하는 경우 검증 및 테스트 측정항목의 주기성은 다음과 같은 구현 버그를 나타낼 수 있습니다.

  • 테스트 데이터가 학습 데이터와 중복됩니다.
  • 학습 데이터가 제대로 셔플되지 않습니다.

정기적인 단계 간격으로 평가하면 이러한 문제를 더 쉽게 포착할 수 있습니다.

평가 세트가 배치 크기로 나누어지지 않으면 부분 배치가 발생할 수 있습니다. 손실 함수가 패딩된 예시에 의해 편향되지 않도록 패딩된 예시에 올바른 가중치가 부여되었는지 확인합니다 (배치에 대한 평균 손실을 계산하는 예시에 대한 가중 평균과 같이). 패딩된 예시에 가중치 0을 부여할 수 있는 경우가 많습니다.

오프라인 분석을 지원할 수 있도록 평가당 충분한 정보를 저장합니다. 디버깅에 매우 유용할 수 있으므로 개별 예시 선택에 대한 예측을 저장하는 것이 좋습니다. SavedModels과 같은 아티팩트를 생성하면 평가 작업이 완료된 후 임시 모델 검사가 간소화됩니다.

정기 평가를 위한 샘플 선택

주기적인 평가 작업이 적절한 시간 내에 전체 오프라인 평가 세트의 측정항목을 계산할 만큼 빠르게 실행되지 않을 수 있습니다. 이 문제로 인해 주기적 평가를 위해 데이터를 샘플링해야 하는 경우가 많습니다. 샘플링된 데이터 세트를 구성할 때는 샘플 크기 문제와 불균형 데이터 세트의 특별한 문제를 고려하세요.

샘플 크기

주기적 작업에서 사용하는 샘플링된 데이터 세트에서 계산된 성능이 전체 오프라인 평가 세트의 성능과 일치하는지 확인합니다. 즉, 샘플링된 데이터 세트와 전체 데이터 세트 간에 왜곡이 없는지 확인합니다.

정기 평가에 사용하는 데이터 세트는 다음 두 가지를 모두 충족해야 합니다.

  • 전체에 걸쳐 모델 예측을 쉽게 생성할 수 있을 만큼 작습니다.
  • 다음 두 가지 작업을 모두 수행할 수 있을 만큼 충분히 커야 합니다.
    • 모델 개선사항을 정확하게 측정합니다. 즉, 측정값이 라벨 노이즈에 압도되지 않아야 합니다.
    • 시퀀스에서 여러 평가를 수용하면서도 정확한 추정치를 생성합니다. 즉, 홀드아웃 테스트 세트로 일반화되지 않는 방식으로 시간이 지남에 따라 검증 세트에 적응적으로 '적합'하지 않을 만큼 충분히 커야 합니다. 하지만 이 고려사항은 실제로 거의 문제가 되지 않습니다.

불균형 데이터 세트

불균형 데이터 세트의 경우 드문 소수 클래스의 성능이 노이즈가 많은 경우가 많습니다. 소수 예시가 적은 데이터 세트의 경우 정확도 개선에 대한 자세한 정보를 얻기 위해 올바르게 예측된 예시의 수를 기록하세요. 예를 들어 민감도가 0.05 개선되었다고 하면 흥미롭게 들리지만, 개선이 올바른 예가 하나 더 추가된 것 때문인가요?

체크포인트 저장 및 최적의 체크포인트 사후 선택

요약: 고정된 단계 수로 학습을 실행하고 실행에서 가장 좋은 체크포인트를 회고적으로 선택합니다.

대부분의 딥 러닝 프레임워크는 모델 체크포인트를 지원합니다. 즉, 모델의 현재 상태가 주기적으로 디스크에 저장됩니다. 체크포인트를 사용하면 컴퓨팅 인스턴스 중단에 대한 학습 작업의 복원력이 향상됩니다. 최고의 체크포인트는 마지막 체크포인트가 아닌 경우가 많습니다. 특히 검증 세트 성능이 시간이 지남에 따라 계속 증가하지 않고 특정 값을 중심으로 변동하는 경우에 그렇습니다.

학습 중에 지금까지 확인된 N개의 최적 체크포인트를 추적하도록 파이프라인을 설정합니다. 학습이 끝나면 모델 선택은 단순히 가장 좋은 체크포인트를 선택하는 것을 의미합니다. 이 접근 방식을 회고적 최적 체크포인트 선택이라고 합니다. 사전 조기 중지를 지원할 필요는 없습니다. 트라이얼 예산을 미리 지정하고 지금까지 확인된 N개의 최적 체크포인트를 보존하기 때문입니다.

실험 추적 설정

요약: 다양한 실험을 추적할 때는 연구의 체크포인트 중 가장 우수한 성능, 연구에 관한 간략한 설명 등 여러 필수 요소를 추적하세요.

스프레드시트에서 실험 결과를 추적하는 것이 좋습니다. Google 스프레드시트에는 다음 열이 포함되는 경우가 많습니다.

  • 연구 이름
  • 학습 구성이 저장된 위치로 연결되는 링크입니다.
  • 연구에 관한 메모 또는 간단한 설명입니다.
  • 실행된 시험 횟수
  • 연구에서 가장 좋은 체크포인트의 검증 세트 성능입니다.
  • 특정 재현 명령어 또는 학습을 실행하는 데 필요한 제출되지 않은 변경사항에 관한 참고사항

위에 나열된 정보를 최소한 캡처하는 편리한 추적 시스템을 찾습니다. 추적되지 않는 실험은 존재하지 않는 것과 같습니다.

배치 정규화 구현 세부정보

요약: 요즘에는 배치 정규화를 LayerNorm으로 대체할 수 있는 경우가 많지만, 대체할 수 없는 경우에는 배치 크기나 호스트 수를 변경할 때 까다로운 세부사항이 있습니다.

배치 정규화는 현재 배치에 대한 평균과 분산을 사용하여 활성화를 정규화합니다. 하지만 다중 기기 설정에서는 명시적으로 동기화하지 않는 한 이러한 통계가 기기마다 다릅니다. 일화적인 보고서 (주로 ImageNet)에 따르면 ~64개의 예만 사용하여 이러한 정규화 통계를 계산하는 것이 실제로 더 효과적이라고 합니다. (Train longer, generalize better: closing the generalization gap in large batch training of neural networks의 고스트 배치 정규화 설명을 참고하세요.) 총 배치 크기와 배치 정규화 통계를 계산하는 데 사용되는 예의 수를 분리하는 것은 배치 크기 비교에 특히 유용합니다.

고스트 배치 정규화 구현은 기기별 배치 크기가 가상 배치 크기보다 큰 경우를 항상 올바르게 처리하지는 않습니다. 이 경우 각 기기에서 배치를 서브샘플링하여 적절한 수의 배치 정규화 통계 예시를 가져와야 합니다.

테스트 모드 배치 정규화에 사용되는 지수 이동 평균 (EMA)은 학습 통계의 선형 조합일 뿐입니다. 따라서 체크포인트에 저장하기 전에 이러한 EMA만 동기화하면 됩니다. 하지만 배치 정규화의 일부 일반적인 구현에서는 이러한 EMA를 동기화하지 않고 첫 번째 기기의 EMA만 저장합니다.

멀티 호스트 파이프라인 고려사항

요약: 로깅, 평가, RNG, 체크포인트, 데이터 샤딩의 경우 멀티 호스트 학습을 사용하면 버그를 매우 쉽게 도입할 수 있습니다.

멀티 호스트 파이프라인의 경우 다음을 실행합니다.

  • 파이프라인이 하나의 호스트에서만 로깅 및 체크포인트를 수행하는지 확인합니다.
  • 평가하거나 체크포인트를 지정하기 전에 호스트 간에 배치 정규화 통계를 동기화합니다.
  • 일반적으로 성능이 향상되므로 호스트 간에 데이터 파일을 샤딩합니다.

중요: 호스트 간에 동일한 RNG 시드(모델 초기화용)와 호스트 간에 서로 다른 시드(데이터 셔플링/전처리용)가 있는지 확인합니다. 따라서 적절하게 표시해야 합니다.