새 프로젝트 시작 가이드

이 섹션에서는 ML 프로젝트를 시작할 때 다음을 선택하는 방법을 설명합니다.

  • 모델 아키텍처를
  • 옵티마이저
  • 배치 크기
  • 초기 구성을

가정

이 섹션의 조언에서는 다음을 전제합니다.

  • 이미 문제를 공식화했고 학습 데이터를 어느 정도 준비했습니다.
  • 학습 및 테스트 파이프라인을 이미 설정했습니다.
  • 배포된 환경에서 측정할 항목을 최대한 대표하는 측정항목을 이미 선택하고 구현했습니다.

앞의 기본 요건을 모두 충족했다면 이제 모델 아키텍처와 학습 구성에 집중할 수 있습니다.

모델 아키텍처 선택

다음 정의부터 시작해 보겠습니다.

  • 모델 아키텍처는 예측을 생성하는 시스템입니다. 모델 아키텍처에는 입력 데이터를 예측으로 변환하기 위한 프레임워크가 포함되지만 매개변수 값은 포함되지 않습니다. 예를 들어 각각 노드 10개, 노드 5개, 노드 3개로 구성된 히든 레이어 3개가 있는 신경망은 모델 아키텍처입니다.
  • model은 모델 아키텍처와 모든 매개변수에 대한 특정 값입니다. 예를 들어 모델은 모델 아키텍처 정의에서 설명한 신경망과 각 노드의 가중치 및 편향에 관한 특정 값으로 구성됩니다.
  • 모델 계열초매개변수 집합이 지정된 모델 아키텍처를 구성하기 위한 템플릿입니다.

모델 아키텍처를 선택한다는 것은 실제로 다양한 모델 집합 (모델 초매개변수의 설정별로 하나씩)을 선택하는 것을 의미합니다.

가능하면 현재 문제와 최대한 유사한 내용을 다루는 문서화된 코드베이스를 찾으세요. 그런 다음 해당 모델을 시작점으로 재현합니다

최적화 도구 선택

모든 유형의 머신러닝 문제와 모델 아키텍처에서 '최적'의 옵티마이저는 없습니다. 옵티마이저의 성능만 비교하는 것조차 어렵습니다. 📊 특히 새 프로젝트를 시작할 때는 잘 확립된 인기 있는 옵티마이저를 사용하는 것이 좋습니다.

처리 중인 문제 유형에 가장 많이 사용되는 옵티마이저를 선택하는 것이 좋습니다. 다음과 같이 잘 설정된 옵티마이저를 사용하는 것이 좋습니다.

선택한 옵티마이저의 모든 인수에 주의합니다. 초매개변수가 많은 옵티마이저의 경우 일반적으로 더 많은 조정 작업이 필요합니다. 이는 프로젝트 시작 단계에서 옵티마이저 인수를 성가시게 처리하면서 다른 다양한 초매개변수의 최적값(예: 학습률)을 찾으려고 할 때 특히 고통스럽습니다. 따라서 다음 방법을 사용하는 것이 좋습니다.

  1. 프로젝트 시작 시 조정 가능한 초매개변수가 많지 않은 옵티마이저를 선택합니다. 다음은 두 가지 예입니다.
    • 고정 모멘텀이 있는 SGD입니다.
    • Epsilon, Beta1, Beta2가 수정된 Adam
  2. 프로젝트의 후반부에서는 초매개변수를 기본값으로 수정하는 대신 더 많은 초매개변수를 조정하는 보다 일반적인 옵티마이저로 전환합니다.

배치 크기 선택

요약: 배치 크기는 학습 속도에 영향을 줍니다. 검증 세트 성능을 직접 조정하는 데 배치 크기를 사용하지 마세요.

배치 크기는 학습 시간과 컴퓨팅 리소스 소비를 크게 결정합니다. 배치 크기를 늘리면 학습 시간이 감소하는 경우가 많으며, 그 이유는 다음과 같습니다.

  • 고정된 시간 간격 내에서 초매개변수를 보다 세밀하게 조정하여 더 나은 최종 모델을 만들 수 있습니다.
  • 개발 주기의 지연 시간이 단축되어 새로운 아이디어를 더 자주 테스트할 수 있습니다.

배치 크기를 늘리면 리소스 소비가 감소 또는 증가하거나 리소스 소비가 변경되지 않은 상태로 둘 수 있습니다.

배치 크기를 검증 세트 성능을 위해 조정 가능한 초매개변수로 취급하지 마세요. 다음 조건이 모두 충족되면 모델 성능이 배치 크기에 의존해서는 안 됩니다.

  • 모든 옵티마이저 초매개변수는 잘 조정됩니다.
  • 정규화로 충분하고 적절하게 조정됩니다.
  • 학습 단계 수면 충분합니다.

어떤 배치 크기를 사용해도 동일한 최종 성능을 얻을 수 있어야 합니다(Shallue 외 2018년검증 세트 성능을 직접 개선하기 위해 배치 크기를 조정하면 안 되는 이유는 무엇인가요? 참고).

가능한 배치 크기를 결정하고 학습 처리량 예측

지정된 모델과 옵티마이저에서 사용 가능한 하드웨어는 일반적으로 다양한 배치 크기를 지원합니다. 제한 요인은 일반적으로 가속기 메모리입니다. 안타깝게도 전체 학습 프로그램을 실행하거나 컴파일하지 않고는 메모리에 적합한 배치 크기를 계산하기 어려울 수 있습니다. 가장 쉬운 해결책은 일반적으로 작업 중 하나가 가용 메모리를 초과할 때까지 적은 수의 단계에서 다양한 배치 크기 (예: 2의 거듭제곱 증가)로 학습 작업을 실행하는 것입니다. 배치 크기별로 학습 처리량의 신뢰할 수 있는 추정치를 얻을 수 있을 만큼 충분히 학습합니다.

학습 처리량 = 초당 처리되는 예시의 수

또는 이에 상응하는 단계당 시간:

단계당 시간 = 배치 크기 / 학습 처리량

가속기가 아직 포화되지 않은 경우 배치 크기가 두 배가 되면 학습 처리량도 두 배 (또는 거의 두 배 이상)가 됩니다. 마찬가지로, 단계당 시간은 배치 크기가 커질 때 일정하거나 적어도 거의 일정해야 합니다. 그렇지 않은 경우 학습 파이프라인에 컴퓨팅 노드 간 I/O 또는 동기화와 같은 병목 현상이 발생합니다. 계속하기 전에 병목 현상을 진단하고 해결하는 것이 좋습니다.

학습 처리량이 최대 배치 크기까지만 증가하는 경우 하드웨어가 더 큰 배치 크기를 지원하더라도 최대 배치 크기까지만 배치 크기를 고려합니다. 더 큰 배치 크기를 사용할 때의 모든 이점은 학습 처리량이 증가한다는 가정 하에 이뤄집니다. 그렇지 않은 경우 병목 현상을 해결하거나 더 작은 배치 크기를 사용합니다.

경사 축적은 하드웨어가 지원할 수 있는 것보다 큰 배치 크기를 시뮬레이션하므로 처리량 이점이 없습니다. 일반적으로 적용된 작업에서 경사 누적을 피해야 합니다.

모델이나 옵티마이저를 변경할 때마다 이 단계를 반복해야 할 수도 있습니다. 예를 들어 다른 모델의 아키텍처는 더 큰 배치 크기를 메모리에 맞출 수 있도록 허용합니다.

학습 시간을 최소화하려면 배치 크기를 선택하세요.

학습 시간의 정의는 다음과 같습니다.

  • 학습 시간 = (걸음당 시간) x (총 걸음 수)

가능한 모든 배치 크기에 대해 단계당 시간이 거의 일정하다고 간주할 수 있습니다. 이는 다음과 같은 경우에 적용됩니다.

  • 병렬 계산으로 인한 오버헤드가 없습니다.
  • 모든 학습 병목 현상을 진단하고 해결했습니다. 학습 병목 현상을 식별하는 방법은 이전 섹션을 참조하세요. 실제로는 일반적으로 배치 크기를 늘리면 어느 정도 오버헤드가 있습니다.

배치 크기를 변경할 때 모든 관련 초매개변수를 다시 조정한다면 배치 크기가 커질 때 고정된 성능 목표에 도달하는 데 필요한 총 단계 수가 일반적으로 줄어듭니다. (Shallue 외 2018년 참고) 예를 들어 배치 크기를 두 배로 늘리면 필요한 총 단계 수가 절반으로 줄어들 수 있습니다. 이 관계를 완벽한 확장이라고 하며 중요한 배치 크기까지 모든 배치 크기에서 유지해야 합니다.

중요한 배치 크기를 넘어서는 배치 크기를 늘리면 반환되는 결과가 감소합니다. 즉, 배치 크기를 늘려도 학습 단계 수는 줄어들지 않고 증가하지는 않습니다. 따라서 학습 시간을 최소화하는 배치 크기는 일반적으로 필요한 학습 단계 수를 줄이는 최대 배치 크기입니다. 배치 크기는 데이터 세트, 모델, 옵티마이저에 따라 달라지며, 모든 새로운 문제에 대해 실험적으로 크기를 찾는 것 외에는 계산 방법에 대한 미해결 문제입니다. 🤖

배치 크기를 비교할 때는 다음 사항의 차이에 유의하세요.

  • 예시 예산 또는 에포크 예산: 모든 실험을 실행하는 동시에 학습 예시 프레젠테이션의 수를 수정합니다.
  • 단계 예산 - 정해진 수의 학습 단계로 모든 실험을 실행합니다.

에포크 예산으로 배치 크기를 비교하면 배치 크기가 클 수도 있지만 필요한 학습 단계 수를 줄여 의미 있는 속도를 높일 수 있더라도 완벽한 확장 체계만 프로브할 수 있습니다. 사용 가능한 하드웨어에서 지원하는 가장 큰 배치 크기는 주요 배치 크기보다 작은 경우가 많습니다. 따라서 실험을 실행하지 않고 최대한 큰 배치 크기를 사용하는 것이 좋습니다.더 큰 배치 크기를 사용하면 학습 시간이 늘어나는 것은 무의미합니다.

리소스 소비를 최소화하려면 배치 크기를 선택하세요.

배치 크기 증가와 관련된 리소스 비용에는 두 가지 유형이 있습니다.

  • 선불 비용. 예를 들어 새 하드웨어를 구매하거나 학습 파이프라인을 다시 작성하여 다중 GPU / 다중 TPU 학습을 구현합니다.
  • 사용 비용. 예: 팀의 리소스 예산 청구, 클라우드 제공업체의 청구, 전기 / 유지보수 비용

배치 크기를 늘리는 데 상당한 선불 비용이 있는 경우에는 프로젝트가 성숙되고 비용-편익 절충점을 더 쉽게 평가할 때까지 배치 크기 증가를 연기하는 것이 좋습니다. 멀티 호스트 병렬 학습 프로그램을 구현하면 bugs미묘한 문제가 발생할 수 있으므로 더 간단한 파이프라인으로 시작하는 것이 좋습니다. 반면에 많은 조정 실험이 필요한 프로세스 초기에 학습 시간을 크게 높이면 매우 유용할 수 있습니다.

총 사용 비용 (여러 종류의 비용이 포함될 수 있음)을 리소스 소비로 지칭하며 다음과 같이 계산됩니다.

리소스 사용 = 단계별 리소스 사용 x 총 단계 수

배치 크기를 늘리면 일반적으로 총 단계 수가 줄어듭니다. 리소스 소비가 증가 또는 감소하는지는 다음과 같이 배치 크기에 따라 단계당 소비가 어떻게 변경되는지에 따라 다릅니다.

  • 배치 크기를 늘리면 리소스 소비가 감소할 수 있습니다. 예를 들어 배치 크기가 큰 각 단계를 작은 배치 크기와 동일한 하드웨어에서 실행할 수 있으면 (단계당 시간이 조금만 증가) 단계당 리소스 소비량의 증가가 단계 수 감소보다 우선할 수 있습니다.
  • 배치 크기를 늘려도 리소스 소비는 변경되지 않을 수 있습니다. 예를 들어 배치 크기를 두 배로 늘려도 필요한 단계 수가 절반으로 줄어들고 사용된 GPU 수가 두 배로 늘어나더라도 총 소비(GPU 시간 기준)는 변경되지 않습니다.
  • 배치 크기를 늘리면 리소스 소비가 증가할 수 있습니다. 예를 들어 배치 크기를 늘리는 데 하드웨어 업그레이드가 필요한 경우 단계당 소비량 증가가 단계 수 감소보다 클 수 있습니다.

배치 크기를 변경하려면 대부분의 초매개변수를 다시 조정해야 합니다.

대부분의 초매개변수의 최적 값은 배치 크기에 민감합니다. 따라서 배치 크기를 변경하려면 일반적으로 조정 프로세스를 처음부터 다시 시작해야 합니다. 배치 크기와 가장 밀접하게 상호작용하여 각 배치 크기에 맞게 조정하는 것이 가장 중요한 초매개변수는 다음과 같습니다.

  • 옵티마이저 초매개변수 (예: 학습률 및 모멘텀)
  • 정규화 초매개변수는

프로젝트 시작 시 배치 크기를 선택할 때 이 점을 참고하세요. 나중에 다른 배치 크기로 전환해야 하는 경우 새 배치 크기에 맞게 다른 초매개변수를 다시 조정하는 것이 어렵고 시간 및 비용이 많이 들 수 있습니다.

배치 정규화가 배치 크기와 상호작용하는 방법

배치 정규화는 복잡하며, 일반적으로 통계를 계산할 때는 경사 계산과 다른 배치 크기를 사용해야 합니다. 자세한 내용은 일괄 정규화 구현 세부정보를 참고하세요.

초기 구성 선택

초매개변수 조정의 첫 번째 단계는 다음 항목의 시작점을 결정하는 것입니다.

  • 모델 구성 (예: 레이어의 수)
  • 옵티마이저 초매개변수 (예: 학습률)
  • 학습 단계 수

이 초기 구성을 결정하려면 수동으로 구성된 학습 실행과 시행착오가 필요합니다.

Google의 기본 원칙은 다음과 같습니다.

합리적인 성능을 얻는 단순하고 상대적으로 빠르고 리소스 소비가 적은 구성을 찾습니다.

각 항목의 의미는 다음과 같습니다.

  • 단순이란 특수 정규화 또는 아키텍처 트릭과 같은 불필요한 파이프라인 기능을 피하는 것을 의미합니다. 예를 들어 드롭아웃 정규화가 없는(또는 드롭아웃 정규화가 사용 중지된) 파이프라인은 드롭아웃 정규화를 사용하는 파이프라인보다 단순합니다.
  • 합리적인 성능은 문제에 따라 다르지만, 최소한 학습된 모델은 검증세트에서 임의 확률보다 훨씬 더 우수합니다.

빠르고 최소한의 리소스를 소비하는 초기 구성을 선택하면 초매개변수를 훨씬 더 효율적으로 조정할 수 있습니다. 예를 들어 더 작은 모델로 시작해 보세요.

학습 단계 수를 선택하는 데는 다음과 같은 긴장감의 균형을 맞추는 것이 포함됩니다.

  • 더 많은 단계를 학습하면 성능을 개선하고 초매개변수 조정을 간소화할 수 있습니다. 자세한 내용은 Shallue 외 2018년을 참고하세요.
  • 반대로 학습 실행 단계가 적으면 각 학습 실행이 더 빠르고 리소스를 적게 사용하므로 주기 간 시간을 단축하고 더 많은 실험을 동시에 실행할 수 있어 조정 효율성이 높아집니다. 또한 프로젝트 시작 시 불필요하게 큰 단계 예산을 선택한 경우 프로젝트 후반부에서 변경하기가 어려울 수 있습니다. 예를 들어 해당 단계 수에 대한 학습률 일정을 조정한 후